Skip to content

Commit 4e169bb

Browse files
authored
Merge pull request #7673 from gamblor21/atmel-spi-tx-len-fix
Fix for long length SPI writes on ATMEL
2 parents 8a10069 + 6987d3d commit 4e169bb

File tree

1 file changed

+8
-1
lines changed
  • ports/atmel-samd/common-hal/busio

1 file changed

+8
-1
lines changed

ports/atmel-samd/common-hal/busio/SPI.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,14 @@ bool common_hal_busio_spi_write(busio_spi_obj_t *self,
268268
}
269269
int32_t status;
270270
if (len >= 16) {
271-
status = sercom_dma_write(self->spi_desc.dev.prvt, data, len);
271+
size_t bytes_remaining = len;
272+
273+
// Maximum DMA transfer is 65535
274+
while (bytes_remaining > 0) {
275+
size_t to_send = (bytes_remaining > 65535) ? 65535 : bytes_remaining;
276+
status = sercom_dma_write(self->spi_desc.dev.prvt, data + (len - bytes_remaining), to_send);
277+
bytes_remaining -= to_send;
278+
}
272279
} else {
273280
struct io_descriptor *spi_io;
274281
spi_m_sync_get_io_descriptor(&self->spi_desc, &spi_io);

0 commit comments

Comments
 (0)