Skip to content

Commit dbf0b19

Browse files
committed
Try to read and send the requested data in chunks
1 parent d2a76cd commit dbf0b19

File tree

1 file changed

+10
-22
lines changed

1 file changed

+10
-22
lines changed

main.c

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -205,38 +205,26 @@ static void command_loop(void)
205205
// Read data to be sent (if slen > 0)
206206
if (slen > 0) {
207207
readbytes_blocking(tx_buffer, slen);
208-
}
209-
210-
// Perform SPI operation
211-
cs_select(SPI_CS);
212-
if (slen > 0) {
208+
cs_select(SPI_CS);
213209
spi_write_blocking(SPI_IF, tx_buffer, slen);
214-
}
215-
if (rlen > 0 && rlen < MAX_BUFFER_SIZE ) {
216-
spi_read_blocking(SPI_IF, 0, rx_buffer, rlen);
217-
// Send ACK followed by received data
218-
sendbyte_blocking(S_ACK);
219-
if (rlen > 0) {
220-
sendbytes_blocking(rx_buffer, rlen);
221-
}
222-
223210
cs_deselect(SPI_CS);
224-
break;
225211
}
226212

227213
// Send ACK after handling slen (before reading)
228214
sendbyte_blocking(S_ACK);
229215

230216
// Handle receive operation in chunks
231-
uint32_t chunk_size = (rlen < MAX_BUFFER_SIZE) ? rlen : MAX_BUFFER_SIZE;
217+
while (rlen > 0) {
218+
uint32_t chunk_size = (rlen < MAX_BUFFER_SIZE) ? rlen : MAX_BUFFER_SIZE;
232219

233-
cs_select(SPI_CS);
234-
spi_read_blocking(SPI_IF, 0, rx_buffer, chunk_size);
235-
cs_deselect(SPI_CS);
220+
cs_select(SPI_CS);
221+
spi_read_blocking(SPI_IF, 0, rx_buffer, chunk_size);
222+
cs_deselect(SPI_CS);
223+
224+
sendbytes_blocking(rx_buffer, chunk_size);
225+
rlen -= chunk_size;
226+
}
236227

237-
sendbytes_blocking(rx_buffer, chunk_size);
238-
rlen -= chunk_size;
239-
cs_deselect(SPI_CS);
240228
break;
241229
}
242230
case S_CMD_S_SPI_FREQ:

0 commit comments

Comments
 (0)