@@ -89,6 +89,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
8989 uint8_t mosi_len = sizeof (mcu_spi_mosi_list )/sizeof (* mcu_spi_mosi_list );
9090 uint8_t miso_len = sizeof (mcu_spi_miso_list )/sizeof (* mcu_spi_miso_list );
9191
92+ bool spi_taken = false;
9293 //sck
9394 for (uint i = 0 ; i < sck_len ;i ++ ) {
9495 if (mcu_spi_sck_list [i ].pin == sck ) {
@@ -101,7 +102,10 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
101102 && (mcu_spi_sck_list [i ].spi_index == mcu_spi_mosi_list [j ].spi_index )
102103 && (mcu_spi_sck_list [i ].spi_index == mcu_spi_miso_list [k ].spi_index )) {
103104 //keep looking if the SPI is taken, edge case
104- if (reserved_spi [mcu_spi_sck_list [i ].spi_index - 1 ]) continue ;
105+ if (reserved_spi [mcu_spi_sck_list [i ].spi_index - 1 ]) {
106+ spi_taken = true;
107+ continue ;
108+ }
105109 //store pins if not
106110 self -> sck = & mcu_spi_sck_list [j ];
107111 self -> mosi = & mcu_spi_mosi_list [j ];
@@ -118,11 +122,11 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
118122 if (self -> sck != NULL && self -> mosi != NULL && self -> miso != NULL ) {
119123 SPIx = mcu_spi_banks [self -> sck -> spi_index - 1 ];
120124 } else {
121- mp_raise_RuntimeError ( translate ( "Invalid SPI pin selection" ));
122- }
123-
124- if ( reserved_spi [ self -> sck -> spi_index - 1 ]) {
125- mp_raise_RuntimeError ( translate ( "Hardware busy, try alternative pins" ));
125+ if ( spi_taken ) {
126+ mp_raise_RuntimeError ( translate ( "Hardware busy, try alternative pins" ));
127+ } else {
128+ mp_raise_RuntimeError ( translate ( "Invalid SPI pin selection" ));
129+ }
126130 }
127131
128132 //Start GPIO for each pin
0 commit comments