@@ -110,7 +110,6 @@ byte SPIClassRP2040::transfer(uint8_t data) {
110
110
return 0 ;
111
111
}
112
112
data = (_spis.getBitOrder () == MSBFIRST) ? data : reverseByte (data);
113
- spi_set_format (_spi, 8 , cpol (), cpha (), SPI_MSB_FIRST);
114
113
DEBUGSPI (" SPI::transfer(%02x), cpol=%d, cpha=%d\n " , data, cpol (), cpha ());
115
114
spi_write_read_blocking (_spi, &data, &ret, 1 );
116
115
ret = (_spis.getBitOrder () == MSBFIRST) ? ret : reverseByte (ret);
@@ -124,9 +123,13 @@ uint16_t SPIClassRP2040::transfer16(uint16_t data) {
124
123
return 0 ;
125
124
}
126
125
data = (_spis.getBitOrder () == MSBFIRST) ? data : reverse16Bit (data);
127
- spi_set_format (_spi, 16 , cpol (), cpha (), SPI_MSB_FIRST);
128
126
DEBUGSPI (" SPI::transfer16(%04x), cpol=%d, cpha=%d\n " , data, cpol (), cpha ());
129
- spi_write16_read16_blocking (_spi, &data, &ret, 1 );
127
+ uint8_t msb, lsb;
128
+ msb = (data >> 8 ) & 0xff ;
129
+ lsb = data & 0xff ;
130
+ spi_write_read_blocking (_spi, &msb, &msb, 1 );
131
+ spi_write_read_blocking (_spi, &lsb, &lsb, 1 );
132
+ ret = ((msb << 8 ) | (lsb & 0xff )) & 0xffff ;
130
133
ret = (_spis.getBitOrder () == MSBFIRST) ? ret : reverse16Bit (ret);
131
134
DEBUGSPI (" SPI: read back %02x\n " , ret);
132
135
return ret;
@@ -153,8 +156,6 @@ void SPIClassRP2040::transfer(const void *txbuf, void *rxbuf, size_t count) {
153
156
154
157
// MSB version is easy!
155
158
if (_spis.getBitOrder () == MSBFIRST) {
156
- spi_set_format (_spi, 8 , cpol (), cpha (), SPI_MSB_FIRST);
157
-
158
159
if (rxbuf == nullptr ) { // transmit only!
159
160
spi_write_blocking (_spi, txbuff, count);
160
161
return ;
@@ -191,6 +192,7 @@ void SPIClassRP2040::beginTransaction(SPISettings settings) {
191
192
}
192
193
DEBUGSPI (" SPI: initting SPI\n " );
193
194
spi_init (_spi, _spis.getClockFreq ());
195
+ spi_set_format (_spi, 8 , cpol (), cpha (), SPI_MSB_FIRST);
194
196
DEBUGSPI (" SPI: actual baudrate=%u\n " , spi_get_baudrate (_spi));
195
197
_initted = true ;
196
198
}
0 commit comments