@@ -190,7 +190,7 @@ static void command_loop(void)
190
190
sendbyte_blocking (S_ACK );
191
191
else
192
192
sendbyte_blocking (S_NAK );
193
- break ;
193
+ break
194
194
case S_CMD_O_SPIOP :
195
195
{
196
196
uint32_t slen , rlen ;
@@ -211,29 +211,34 @@ static void command_loop(void)
211
211
// Read data to be sent (if slen > 0)
212
212
if (slen > 0 ) {
213
213
readbytes_blocking (tx_buffer , slen );
214
+ }
215
+
216
+ // Perform SPI write operation (if slen > 0)
217
+ if (slen > 0 ) {
214
218
cs_select (SPI_CS );
215
219
spi_write_blocking (SPI_IF , tx_buffer , slen );
216
220
cs_deselect (SPI_CS );
217
221
}
218
222
219
- // Send ACK after handling slen
223
+ // Send ACK after handling slen (before reading)
220
224
sendbyte_blocking (S_ACK );
221
225
222
- // Handle rlen in chunks
223
- while (rlen > 0 ) {
224
- uint32_t chunk_size = (rlen < MAX_BUFFER_SIZE ) ? rlen : MAX_BUFFER_SIZE ;
226
+ // Perform SPI read operation in chunks (if rlen > 0)
227
+ uint32_t total_read = 0 ;
228
+ while (total_read < rlen ) {
229
+ uint32_t chunk_size = (rlen - total_read > MAX_BUFFER_SIZE ) ? MAX_BUFFER_SIZE : (rlen - total_read );
225
230
226
231
cs_select (SPI_CS );
227
232
spi_read_blocking (SPI_IF , 0 , rx_buffer , chunk_size );
228
233
cs_deselect (SPI_CS );
229
234
230
235
sendbytes_blocking (rx_buffer , chunk_size );
231
- rlen - = chunk_size ;
236
+ total_read + = chunk_size ;
232
237
}
233
238
234
239
break ;
235
240
}
236
- case S_CMD_S_SPI_FREQ :
241
+ case S_CMD_S_SPI_FREQ :
237
242
{
238
243
uint32_t want_baud ;
239
244
readbytes_blocking (& want_baud , 4 );
0 commit comments