@@ -202,31 +202,27 @@ static void command_loop(void)
202
202
uint8_t tx_buffer [MAX_BUFFER_SIZE ]; // Buffer for transmit data
203
203
uint8_t rx_buffer [MAX_BUFFER_SIZE ]; // Buffer for receive data
204
204
205
- // Ensure buffer sizes are adequate
206
- if (slen > MAX_BUFFER_SIZE || rlen > MAX_BUFFER_SIZE ) {
207
- sendbyte_blocking (S_NAK );
208
- break ;
209
- }
210
-
211
205
// Read data to be sent (if slen > 0)
212
206
if (slen > 0 ) {
213
207
readbytes_blocking (tx_buffer , slen );
214
208
}
215
209
216
- // Perform SPI operation
217
- cs_select ( SPI_CS );
210
+ sendbyte_blocking ( S_ACK );
211
+
218
212
if (slen > 0 ) {
219
213
spi_write_blocking (SPI_IF , tx_buffer , slen );
220
214
}
221
- if (rlen > 0 ) {
222
- spi_read_blocking (SPI_IF , 0 , rx_buffer , rlen );
223
- }
224
- cs_deselect (SPI_CS );
225
215
226
- // Send ACK followed by received data
227
- sendbyte_blocking (S_ACK );
228
- if (rlen > 0 ) {
229
- sendbytes_blocking (rx_buffer , rlen );
216
+ // Perform SPI operation in chunks
217
+ while (rlen > MAX_BUFFER_SIZE ) {
218
+ cs_select (SPI_CS );
219
+ spi_read_blocking (SPI_IF , 0 , rx_buffer , MAX_BUFFER_SIZE );
220
+ cs_deselect (SPI_CS );
221
+
222
+ // Send ACK followed by received data
223
+ sendbytes_blocking (rx_buffer , MAX_BUFFER_SIZE );
224
+
225
+ rlen -= MAX_BUFFER_SIZE ;
230
226
}
231
227
232
228
break ;
0 commit comments