stm32: Wait for transmission to complete before returning from spi_transfer()

It's possible for the SCLK pin to still be updating even after the
last byte of data has been read from the receive pin.  (In particular
in spi mode 0 and 1.)  Exiting early from spi_transfer() in this case
could result in the CS pin being raised before the final updates to
SCLK pin.

Add an additional wait at the end of spi_transfer() to avoid this
issue.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2022-02-09 13:07:32 -05:00
parent 1c594ef27a
commit 99d55185a2
1 changed files with 5 additions and 2 deletions

View File

@ -117,4 +117,7 @@ spi_transfer(struct spi_config config, uint8_t receive_data,
*data = rdata;
data++;
}
// Wait for any remaining SCLK updates before returning
while ((spi->SR & (SPI_SR_TXE|SPI_SR_BSY)) != SPI_SR_TXE)
;
}