From 39610b254efed98754efcc85a85c0f647c7d9bd0 Mon Sep 17 00:00:00 2001 From: rdon Date: Sat, 30 May 2026 18:54:25 +0900 Subject: [PATCH 1/2] rp2: allow SPI transmit-only without SDI --- src/machine/machine_rp2_2040.go | 4 ++-- src/machine/machine_rp2_2350a.go | 4 ++-- src/machine/machine_rp2_2350b.go | 4 ++-- src/machine/machine_rp2_spi.go | 4 +++- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/machine/machine_rp2_2040.go b/src/machine/machine_rp2_2040.go index 78336a3b76..12638a1052 100644 --- a/src/machine/machine_rp2_2040.go +++ b/src/machine/machine_rp2_2040.go @@ -130,11 +130,11 @@ func (spi *SPI) validPins(config SPIConfig) error { var okSDI, okSDO, okSCK bool switch spi.Bus { case rp.SPI0: - okSDI = config.SDI == 0 || config.SDI == 4 || config.SDI == 16 || config.SDI == 20 + okSDI = config.SDI == NoPin || config.SDI == 0 || config.SDI == 4 || config.SDI == 16 || config.SDI == 20 okSDO = config.SDO == 3 || config.SDO == 7 || config.SDO == 19 || config.SDO == 23 okSCK = config.SCK == 2 || config.SCK == 6 || config.SCK == 18 || config.SCK == 22 case rp.SPI1: - okSDI = config.SDI == 8 || config.SDI == 12 || config.SDI == 24 || config.SDI == 28 + okSDI = config.SDI == NoPin || config.SDI == 8 || config.SDI == 12 || config.SDI == 24 || config.SDI == 28 okSDO = config.SDO == 11 || config.SDO == 15 || config.SDO == 27 okSCK = config.SCK == 10 || config.SCK == 14 || config.SCK == 26 } diff --git a/src/machine/machine_rp2_2350a.go b/src/machine/machine_rp2_2350a.go index 6918d22978..c92e7794f9 100644 --- a/src/machine/machine_rp2_2350a.go +++ b/src/machine/machine_rp2_2350a.go @@ -21,11 +21,11 @@ func (spi *SPI) validPins(config SPIConfig) error { var okSDI, okSDO, okSCK bool switch spi.Bus { case rp.SPI0: - okSDI = config.SDI == 0 || config.SDI == 4 || config.SDI == 16 || config.SDI == 20 + okSDI = config.SDI == NoPin || config.SDI == 0 || config.SDI == 4 || config.SDI == 16 || config.SDI == 20 okSDO = config.SDO == 3 || config.SDO == 7 || config.SDO == 19 || config.SDO == 23 okSCK = config.SCK == 2 || config.SCK == 6 || config.SCK == 18 || config.SCK == 22 case rp.SPI1: - okSDI = config.SDI == 8 || config.SDI == 12 || config.SDI == 24 || config.SDI == 28 + okSDI = config.SDI == NoPin || config.SDI == 8 || config.SDI == 12 || config.SDI == 24 || config.SDI == 28 okSDO = config.SDO == 11 || config.SDO == 15 || config.SDO == 27 okSCK = config.SCK == 10 || config.SCK == 14 || config.SCK == 26 } diff --git a/src/machine/machine_rp2_2350b.go b/src/machine/machine_rp2_2350b.go index 5f5a76da67..4e7f8e6293 100644 --- a/src/machine/machine_rp2_2350b.go +++ b/src/machine/machine_rp2_2350b.go @@ -55,11 +55,11 @@ func (spi *SPI) validPins(config SPIConfig) error { var okSDI, okSDO, okSCK bool switch spi.Bus { case rp.SPI0: - okSDI = config.SDI == 0 || config.SDI == 4 || config.SDI == 16 || config.SDI == 20 || config.SDI == 32 || config.SDI == 36 + okSDI = config.SDI == NoPin || config.SDI == 0 || config.SDI == 4 || config.SDI == 16 || config.SDI == 20 || config.SDI == 32 || config.SDI == 36 okSDO = config.SDO == 3 || config.SDO == 7 || config.SDO == 19 || config.SDO == 23 || config.SDO == 35 || config.SDO == 39 okSCK = config.SCK == 2 || config.SCK == 6 || config.SCK == 18 || config.SCK == 22 || config.SCK == 34 || config.SCK == 38 case rp.SPI1: - okSDI = config.SDI == 8 || config.SDI == 12 || config.SDI == 24 || config.SDI == 28 || config.SDI == 40 || config.SDI == 44 + okSDI = config.SDI == NoPin || config.SDI == 8 || config.SDI == 12 || config.SDI == 24 || config.SDI == 28 || config.SDI == 40 || config.SDI == 44 okSDO = config.SDO == 11 || config.SDO == 15 || config.SDO == 27 || config.SDO == 31 || config.SDO == 43 || config.SDO == 47 okSCK = config.SCK == 10 || config.SCK == 14 || config.SCK == 26 || config.SCK == 30 || config.SCK == 42 || config.SCK == 46 } diff --git a/src/machine/machine_rp2_spi.go b/src/machine/machine_rp2_spi.go index 785b8f831b..14ac5bae6a 100644 --- a/src/machine/machine_rp2_spi.go +++ b/src/machine/machine_rp2_spi.go @@ -174,7 +174,9 @@ func (spi *SPI) Configure(config SPIConfig) error { // SPI pin configuration config.SCK.setFunc(fnSPI) config.SDO.setFunc(fnSPI) - config.SDI.setFunc(fnSPI) + if config.SDI != NoPin { + config.SDI.setFunc(fnSPI) + } return spi.initSPI(config) } From 106c55578e75d2d3f7c52c09bbd88714a4d3846e Mon Sep 17 00:00:00 2001 From: rdon Date: Sat, 30 May 2026 21:06:17 +0900 Subject: [PATCH 2/2] ci: rerun