summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorrobert-hh <robert@hammelrath.com>2023-04-30 13:29:56 +0200
committerDamien George <damien@micropython.org>2023-05-09 16:14:40 +1000
commit14b862f70fdf61cf4040d99439f59f0d0aa925b0 (patch)
tree8b8831819d005c9b227f01fc2109dc50df7fe17d
parentd2a02dcee3ae4d3bc4d29629264cbee9501d1c05 (diff)
downloadmicropython-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.c24
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);
+ }
}
}