diff options
author | robert-hh <robert@hammelrath.com> | 2023-04-30 13:29:56 +0200 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2023-05-09 16:14:40 +1000 |
commit | 14b862f70fdf61cf4040d99439f59f0d0aa925b0 (patch) | |
tree | 8b8831819d005c9b227f01fc2109dc50df7fe17d | |
parent | d2a02dcee3ae4d3bc4d29629264cbee9501d1c05 (diff) | |
download | micropython-14b862f70fdf61cf4040d99439f59f0d0aa925b0.tar.gz micropython-14b862f70fdf61cf4040d99439f59f0d0aa925b0.zip |
mimxrt/machine_spi: Ignore transfers with len=0.
It was treated as an error before. The error surfaced when using the
NINAW10 drivers for WiFi support. Even if this is a bad behavior of the
NINA driver, machine_spi can be forgiving in that situation.
-rw-r--r-- | ports/mimxrt/machine_spi.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/ports/mimxrt/machine_spi.c b/ports/mimxrt/machine_spi.c index d6aff2a329..bafe94b970 100644 --- a/ports/mimxrt/machine_spi.c +++ b/ports/mimxrt/machine_spi.c @@ -240,17 +240,19 @@ STATIC void machine_spi_init(mp_obj_base_t *self_in, size_t n_args, const mp_obj STATIC void machine_spi_transfer(mp_obj_base_t *self_in, size_t len, const uint8_t *src, uint8_t *dest) { machine_spi_obj_t *self = (machine_spi_obj_t *)self_in; - // Wait a short while for the previous transfer to finish, but not forever - for (volatile int j = 0; (j < 5000) && ((self->spi_inst->SR & kLPSPI_ModuleBusyFlag) != 0); j++) {} - - lpspi_transfer_t masterXfer; - masterXfer.txData = (uint8_t *)src; - masterXfer.rxData = (uint8_t *)dest; - masterXfer.dataSize = len; - masterXfer.configFlags = (self->master_config->whichPcs << LPSPI_MASTER_PCS_SHIFT) | kLPSPI_MasterPcsContinuous | kLPSPI_MasterByteSwap; - - if (LPSPI_MasterTransferBlocking(self->spi_inst, &masterXfer) != kStatus_Success) { - mp_raise_OSError(EIO); + if (len > 0) { + // Wait a short while for the previous transfer to finish, but not forever + for (volatile int j = 0; (j < 5000) && ((self->spi_inst->SR & kLPSPI_ModuleBusyFlag) != 0); j++) {} + + lpspi_transfer_t masterXfer; + masterXfer.txData = (uint8_t *)src; + masterXfer.rxData = (uint8_t *)dest; + masterXfer.dataSize = len; + masterXfer.configFlags = (self->master_config->whichPcs << LPSPI_MASTER_PCS_SHIFT) | kLPSPI_MasterPcsContinuous | kLPSPI_MasterByteSwap; + + if (LPSPI_MasterTransferBlocking(self->spi_inst, &masterXfer) != kStatus_Success) { + mp_raise_OSError(EIO); + } } } |