stlink: remove reset pulse when entering in JTAG
Until version J14 the behaviour of ST-Link was to send a reset pulse to the target when the debug connection is started in JTAG mode. No reset pulse is sent, instead, in SWD mode. Version J15 introduces a new parameter to avoid the reset pulse in JTAG mode, aligning the behaviour with SWD. This reset from the ST-Link, if propagated to the target, prevents attaching a running target. Actually this reset pulse is very short (few microsecond) and can be easily filtered out by an on-board capacitor, usually present on the reset wire (mainly to filter the bounces of the reset button). Moreover, most of the use cases for ST-Link are with SWD (not with JTAG) and this has probably further masked this JTAG specific behaviour. OpenOCD can tolerate it but requires the flag "connect_assert_srst" to the command "reset_config", but the flag is not present in any configurations in folder tcl. This enforces the guess it was not noticed due to on-board capacitors or missing connection of reset pin or ST-Link only used in SWD; so it's safe applying this patch. Change the default behaviour to avoid reset in JTAG at connection. There is no need to manage the ST-Link version here, since every parameter that is not recognized by older ST-Link is treated as "connect in JTAG with reset pulse", keeping backward compatibility. Change-Id: Idc97a1457279e3970fd0839cadbff22d9b0302d4 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/4713 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>log_output
parent
80ce68b42c
commit
717d3af087
|
@ -205,7 +205,6 @@ struct stlink_usb_handle_s {
|
||||||
#define STLINK_SWIM_READMEM 0x0b
|
#define STLINK_SWIM_READMEM 0x0b
|
||||||
#define STLINK_SWIM_READBUF 0x0c
|
#define STLINK_SWIM_READBUF 0x0c
|
||||||
|
|
||||||
#define STLINK_DEBUG_ENTER_JTAG 0x00
|
|
||||||
#define STLINK_DEBUG_GETSTATUS 0x01
|
#define STLINK_DEBUG_GETSTATUS 0x01
|
||||||
#define STLINK_DEBUG_FORCEDEBUG 0x02
|
#define STLINK_DEBUG_FORCEDEBUG 0x02
|
||||||
#define STLINK_DEBUG_APIV1_RESETSYS 0x03
|
#define STLINK_DEBUG_APIV1_RESETSYS 0x03
|
||||||
|
@ -223,8 +222,9 @@ struct stlink_usb_handle_s {
|
||||||
#define STLINK_DEBUG_APIV1_WRITEDEBUGREG 0x0f
|
#define STLINK_DEBUG_APIV1_WRITEDEBUGREG 0x0f
|
||||||
#define STLINK_DEBUG_APIV1_SETWATCHPOINT 0x10
|
#define STLINK_DEBUG_APIV1_SETWATCHPOINT 0x10
|
||||||
|
|
||||||
#define STLINK_DEBUG_ENTER_JTAG 0x00
|
#define STLINK_DEBUG_ENTER_JTAG_RESET 0x00
|
||||||
#define STLINK_DEBUG_ENTER_SWD 0xa3
|
#define STLINK_DEBUG_ENTER_SWD_NO_RESET 0xa3
|
||||||
|
#define STLINK_DEBUG_ENTER_JTAG_NO_RESET 0xa4
|
||||||
|
|
||||||
#define STLINK_DEBUG_APIV1_ENTER 0x20
|
#define STLINK_DEBUG_APIV1_ENTER 0x20
|
||||||
#define STLINK_DEBUG_EXIT 0x21
|
#define STLINK_DEBUG_EXIT 0x21
|
||||||
|
@ -830,7 +830,7 @@ static int stlink_usb_mode_enter(void *handle, enum stlink_mode type)
|
||||||
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_ENTER;
|
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_ENTER;
|
||||||
else
|
else
|
||||||
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_ENTER;
|
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_ENTER;
|
||||||
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_ENTER_JTAG;
|
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_ENTER_JTAG_NO_RESET;
|
||||||
break;
|
break;
|
||||||
case STLINK_MODE_DEBUG_SWD:
|
case STLINK_MODE_DEBUG_SWD:
|
||||||
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
|
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_COMMAND;
|
||||||
|
@ -838,7 +838,7 @@ static int stlink_usb_mode_enter(void *handle, enum stlink_mode type)
|
||||||
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_ENTER;
|
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV1_ENTER;
|
||||||
else
|
else
|
||||||
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_ENTER;
|
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_APIV2_ENTER;
|
||||||
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_ENTER_SWD;
|
h->cmdbuf[h->cmdidx++] = STLINK_DEBUG_ENTER_SWD_NO_RESET;
|
||||||
break;
|
break;
|
||||||
case STLINK_MODE_DEBUG_SWIM:
|
case STLINK_MODE_DEBUG_SWIM:
|
||||||
h->cmdbuf[h->cmdidx++] = STLINK_SWIM_COMMAND;
|
h->cmdbuf[h->cmdidx++] = STLINK_SWIM_COMMAND;
|
||||||
|
|
Loading…
Reference in New Issue