@@ -298,32 +298,32 @@ static uint8_t swd_read_block(uint32_t address, uint8_t *data, uint32_t size)
298
298
}
299
299
300
300
// TAR write
301
- req = SWD_REG_AP | SWD_REG_W | ( 1 << 2 ) ;
301
+ req = SWD_REG_AP | SWD_REG_W | AP_TAR ;
302
302
int2array (tmp_in , address , 4 );
303
303
304
- if (swd_transfer_retry (req , (uint32_t * )tmp_in ) != 0x01 ) {
304
+ if (swd_transfer_retry (req , (uint32_t * )tmp_in ) != DAP_TRANSFER_OK ) {
305
305
return 0 ;
306
306
}
307
307
308
308
// read data
309
- req = SWD_REG_AP | SWD_REG_R | ( 3 << 2 ) ;
309
+ req = SWD_REG_AP | SWD_REG_R | AP_DRW ;
310
310
311
- // dummy read
312
- if (swd_transfer_retry (req , ( uint32_t * ) data ) != 0x01 ) {
311
+ // initiate first read, data comes back in next read
312
+ if (swd_transfer_retry (req , NULL ) != 0x01 ) {
313
313
return 0 ;
314
314
}
315
315
316
- for (i = 0 ; i < size_in_words ; i ++ ) {
317
- if (swd_transfer_retry (req , (uint32_t * )data ) != 0x01 ) {
316
+ for (i = 0 ; i < ( size_in_words - 1 ) ; i ++ ) {
317
+ if (swd_transfer_retry (req , (uint32_t * )data ) != DAP_TRANSFER_OK ) {
318
318
return 0 ;
319
319
}
320
320
321
321
data += 4 ;
322
322
}
323
323
324
- // dummy read
324
+ // read last word
325
325
req = SWD_REG_DP | SWD_REG_R | SWD_REG_ADR (DP_RDBUFF );
326
- ack = swd_transfer_retry (req , NULL );
326
+ ack = swd_transfer_retry (req , ( uint32_t * ) data );
327
327
return (ack == 0x01 );
328
328
}
329
329
@@ -836,17 +836,17 @@ uint8_t swd_uninit_debug(void)
836
836
// Assume debug is powered up already
837
837
// Clear (CSYSPWRUPREQ | CDBGPWRUPREQ) in DP_CTRL_STAT register
838
838
uint32_t ctrl_stat_read ;
839
-
839
+
840
840
if (!swd_write_dp (DP_CTRL_STAT , 0x0 )) {
841
841
return 0 ;
842
842
}
843
-
843
+
844
844
do {
845
845
if (!swd_read_dp (DP_CTRL_STAT , & ctrl_stat_read )) {
846
846
return 0 ;
847
847
}
848
848
} while ((ctrl_stat_read & (CSYSPWRUPREQ | CDBGPWRUPREQ )));
849
-
849
+
850
850
return 1 ;
851
851
}
852
852
0 commit comments