diff --git a/src/platforms/hosted/dap.c b/src/platforms/hosted/dap.c index e3d53e0c..196ed7c6 100644 --- a/src/platforms/hosted/dap.c +++ b/src/platforms/hosted/dap.c @@ -32,6 +32,7 @@ /*- Includes ----------------------------------------------------------------*/ #include +#include "exception.h" #include "dap.h" #include "jtag_scan.h" @@ -329,12 +330,13 @@ static uint32_t wait_word(uint8_t *buf, int size, int len, uint8_t *dp_fault) break; } while (buf[1] == DAP_TRANSFER_WAIT); - if (buf[1] > DAP_TRANSFER_WAIT) { - DEBUG_WARN("dap wait_word reg %x fault %x\n", - cmd_copy[3], buf[1]); + if(buf[1] == SWDP_ACK_FAULT) { *dp_fault = 1; return 0; } + + if(buf[1] != SWDP_ACK_OK) + raise_exception(EXCEPTION_ERROR, "SWDP invalid ACK"); uint32_t res = ((uint32_t)buf[5] << 24) | ((uint32_t)buf[4] << 16) | ((uint32_t)buf[3] << 8) | (uint32_t)buf[2]; diff --git a/src/target/adiv5.h b/src/target/adiv5.h index 63abecf4..95c62f62 100644 --- a/src/target/adiv5.h +++ b/src/target/adiv5.h @@ -170,7 +170,7 @@ typedef struct ADIv5_DP_s { void (*seq_out_parity)(uint32_t MS, int ticks); uint32_t (*seq_in)(int ticks); bool (*seq_in_parity)(uint32_t *ret, int ticks); - /* dp_low_write returns true if no OK resonse. */ + /* dp_low_write returns true if no OK resonse, but ignores errors */ bool (*dp_low_write)(struct ADIv5_DP_s *dp, uint16_t addr, const uint32_t data); uint32_t (*dp_read)(struct ADIv5_DP_s *dp, uint16_t addr);