Looking for ideas on how to read a slow register (250ms) with openocd Mdw.
When I try to read one of these slow registers, I hit a WAIT, read back
bus float.
The dap disconnects, reconnects, and the value appears in an unexpected
location.
When the DAP disconnects, I'm able to read the value in another return
location.
Am I adjusting time correctly? Or does it have to do with dap resets and
not delay time?
How should I handle reading a very slow register on the target.
Thank you,
Rick
---
In src/jtag/drivers/ftdi.c, there is an adjustment made for time between
AP instructions.
---
/* Insert idle cycles after AP accesses to avoid WAIT */
if (cmd & SWD_CMD_APnDP)
mpsse_clock_data_out(mpsse_ctx, NULL, 0, ap_delay_clk, SWD_MODE);
---
There is also an area where more WAIT's can be added.
---
for (size_t i = 0; i < swd_cmd_queue_length; i++) {
int ack = buf_get_u32(swd_cmd_queue[i].trn_ack_data_parity_trn,
1, 3);
LOG_DEBUG_IO("%s %s %s reg %X = %08"PRIx32,
ack == SWD_ACK_OK ? "OK" : ack == SWD_ACK_WAIT ? "WAIT"
: ack == SWD_ACK_FAULT ? "FAULT" : "JUNK",
(swd_cmd_queue[i].cmd & SWD_CMD_APnDP) ? "AP" : "DP",
swd_cmd_queue[i].cmd & SWD_CMD_RnW ? "read" : "write",
(swd_cmd_queue[i].cmd & SWD_CMD_A32) >> 1,
buf_get_u32(swd_cmd_queue[i].trn_ack_data_parity_trn,
1 + 3 + (swd_cmd_queue[i].cmd & SWD_CMD_RnW ? 0
: 1), 32));
#if 1
for (int j = 0;j<10;j++) {
if (ack == SWD_ACK_WAIT) {
busy_sleep(75);
ack =
buf_get_u32(swd_cmd_queue[i].trn_ack_data_parity_trn, 1, 3);
LOG_DEBUG_IO("%s %s %s reg %X = %08"PRIx32,
ack == SWD_ACK_OK ? "OK" : ack == SWD_ACK_WAIT
? "WAIT" : ack == SWD_ACK_FAULT ? "FAULT" : "JUNK",
swd_cmd_queue[i].cmd & SWD_CMD_APnDP ? "AP" : "DP",
swd_cmd_queue[i].cmd & SWD_CMD_RnW ? "read" :
"write",
(swd_cmd_queue[i].cmd & SWD_CMD_A32) >> 1,
buf_get_u32(swd_cmd_queue[i].trn_ack_data_parity_trn,
1 + 3 + (swd_cmd_queue[i].cmd &
SWD_CMD_RnW ? 0 : 1), 32));
}
}
#endif
User : 42 23419 command.c:544 command_print(): debug_level: 4
Debug: 43 23420 command.c:143 script_debug(): command - ocd_command
ocd_command type ocd_mdw 0x500100fc
Debug: 44 23420 command.c:143 script_debug(): *command - mdw ocd_mdw
0x500100fc*
Debug: 45 23420 ftdi.c:1101 ftdi_swd_run_queue(): Executing 2 queued
transactions
Debug: 46 23420 ftdi.c:1133 ftdi_swd_run_queue(): OK AP read reg 0 =
00030003
Debug: 47 23420 ftdi.c:1133 ftdi_swd_run_queue(): OK DP read reg C =
00030003
Debug: 49 23420 ftdi.c:1101 ftdi_swd_run_queue(): Executing 4 queued
transactions
Debug: 50 23420 ftdi.c:1133 ftdi_swd_run_queue(): OK DP write reg 8 =
00000000
Debug: 51 23420 ftdi.c:1133 ftdi_swd_run_queue(): OK AP write reg 4 =
500100fc
Debug: 52 23420 ftdi.c:1133 ftdi_swd_run_queue(): OK AP read reg C =
00030003
Debug: 53 23420 ftdi.c:1133 ftdi_swd_run_queue(): WAIT DP read reg C =
ffffffff
Debug: 54 23495 ftdi.c:1145 ftdi_swd_run_queue(): WAIT DP read reg C =
ffffffff
Debug: 55 23570 ftdi.c:1145 ftdi_swd_run_queue(): WAIT DP read reg C =
ffffffff
Debug: 56 23645 ftdi.c:1145 ftdi_swd_run_queue(): WAIT DP read reg C =
ffffffff
Debug: 57 23720 ftdi.c:1145 ftdi_swd_run_queue(): WAIT DP read reg C =
ffffffff
Debug: 58 23795 ftdi.c:1145 ftdi_swd_run_queue(): WAIT DP read reg C =
ffffffff
Debug: 59 23870 ftdi.c:1145 ftdi_swd_run_queue(): WAIT DP read reg C =
ffffffff
Debug: 60 23945 ftdi.c:1145 ftdi_swd_run_queue(): WAIT DP read reg C =
ffffffff
Debug: 61 24020 ftdi.c:1145 ftdi_swd_run_queue(): WAIT DP read reg C =
ffffffff
Debug: 62 24095 ftdi.c:1145 ftdi_swd_run_queue(): WAIT DP read reg C =
ffffffff
Debug: 63 24170 ftdi.c:1145 ftdi_swd_run_queue(): WAIT DP read reg C =
ffffffff
Debug: 64 24170 ftdi.c:1262 ftdi_swd_switch_seq(): JTAG-to-SWD
Debug: 65 24170 ftdi.c:1101 ftdi_swd_run_queue(): Executing 2 queued
transactions
Debug: 67 24170 ftdi.c:1133 ftdi_swd_run_queue(): OK DP read reg 0 =
2ba01477
Debug: 68 24170 ftdi.c:1133 ftdi_swd_run_queue(): OK DP write reg 0 =
0000001e
Info : 69 24170 adi_v5_swd.c:136 swd_connect(): SWD DPIDR 0x2ba01477
Debug: 70 24170 arm_adi_v5.c:651 dap_dp_init(): ecm35xx.dap
Debug: 71 24170 ftdi.c:1101 ftdi_swd_run_queue(): Executing 2 queued
transactions
Debug: 72 24170 ftdi.c:1133 ftdi_swd_run_queue(): OK DP write reg 8 =
00000000
Debug: 73 24170 ftdi.c:1133 ftdi_swd_run_queue(): OK DP read reg 4 =
f0000001
Debug: 74 24170 arm_adi_v5.c:677 dap_dp_init(): DAP: wait CDBGPWRUPACK
Debug: 75 24170 arm_adi_v5.h:444 dap_dp_poll_register(): DAP: poll 4,
mask 0x20000000, value 0x20000000
Debug: 76 24170 ftdi.c:1101 ftdi_swd_run_queue(): Executing 4 queued
transactions
Debug: 77 24170 ftdi.c:1133 ftdi_swd_run_queue(): OK DP write reg 4 =
00000020
Debug: 78 24170 ftdi.c:1133 ftdi_swd_run_queue(): OK DP read reg 4 =
00000000
Debug: 79 24170 ftdi.c:1133 ftdi_swd_run_queue(): OK DP write reg 4 =
50000000
Debug: 80 24170 ftdi.c:1133 ftdi_swd_run_queue(): OK DP read reg 4 =
f0000000
Debug: 81 24170 arm_adi_v5.c:685 dap_dp_init(): DAP: wait CSYSPWRUPACK
Debug: 82 24170 arm_adi_v5.h:444 dap_dp_poll_register(): DAP: poll 4,
mask 0x80000000, value 0x80000000
Debug: 83 24170 ftdi.c:1101 ftdi_swd_run_queue(): Executing 1 queued
transactions
Debug: 84 24170 ftdi.c:1133 ftdi_swd_run_queue(): OK DP read reg 4 =
f0000000
Debug: 85 24170 ftdi.c:1101 ftdi_swd_run_queue(): Executing 3 queued
transactions
Debug: 86 24171 ftdi.c:1133 ftdi_swd_run_queue(): OK DP read reg 4 =
f0000000
Debug: 87 24171 ftdi.c:1133 ftdi_swd_run_queue(): OK DP write reg 4 =
50000001
Debug: 88 24171 ftdi.c:1133 ftdi_swd_run_queue(): OK DP read reg 4 =
f0000001
Debug: 89 24171 ftdi.c:1101 ftdi_swd_run_queue(): Executing 2 queued
transactions
*** The value I was trying to read.
Debug: 90 24171 ftdi.c:1133 ftdi_swd_run_queue(): *OK AP read reg 4 =
01120ff2*
Debug: 91 24171 ftdi.c:1133 ftdi_swd_run_queue(): OK DP read reg C =
50010100
Error: 92 24171 arm_adi_v5.c:542 mem_ap_read(): Failed to read memory at
0x50010100
Debug: 93 24171 command.c:642 run_command(): *Command failed with error
code -5*
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel