@@ -205,38 +205,26 @@ static void command_loop(void)
205
205
// Read data to be sent (if slen > 0)
206
206
if (slen > 0 ) {
207
207
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 );
213
209
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
-
223
210
cs_deselect (SPI_CS );
224
- break ;
225
211
}
226
212
227
213
// Send ACK after handling slen (before reading)
228
214
sendbyte_blocking (S_ACK );
229
215
230
216
// 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 ;
232
219
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
+ }
236
227
237
- sendbytes_blocking (rx_buffer , chunk_size );
238
- rlen -= chunk_size ;
239
- cs_deselect (SPI_CS );
240
228
break ;
241
229
}
242
230
case S_CMD_S_SPI_FREQ :
0 commit comments