]> git.sur5r.net Git - openocd/commitdiff
jtag: cmsis-dap: Issue disconnect before reconnecting
authorTomas Vanek <vanekt@fbl.cz>
Thu, 5 Nov 2015 20:05:43 +0000 (21:05 +0100)
committerSpencer Oliver <spen@spen-soft.co.uk>
Fri, 20 Nov 2015 18:26:12 +0000 (18:26 +0000)
cmsis-dap protocol has both DAP_Connect and DAP_Disconnect commands.
Logically if cmsis_dap_swd_switch_seq() calls DAP_Connect in connected
state it should call DAP_Disconnect first.

Doing so surprisingly solves problems on Atmel EDBG with target SAMD/R/L/C.
Without this change SWD communication breaks after reset run/halt
in config "reset_config srst_only" and reconnect trials repeatedly
fail with "SWD ack not OK: 0 JUNK"

Change-Id: Ie951098d5e0c83f388e2df414608aaabec2135c9
Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-on: http://openocd.zylin.com/3098
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/jtag/drivers/cmsis_dap_usb.c

index 38828ea0d2472a3133da7b48724637ce1c5c6808..b3b9143503bb9dc3a63e9589b24b353c587cb238 100644 (file)
@@ -714,6 +714,9 @@ static int cmsis_dap_swd_switch_seq(struct adiv5_dap *dap, enum swd_special_seq
        unsigned int s_len;
        int retval;
 
+       /* First disconnect before connecting, Atmel EDBG needs it for SAMD/R/L/C */
+       cmsis_dap_cmd_DAP_Disconnect();
+
        /* When we are reconnecting, DAP_Connect needs to be rerun, at
         * least on Keil ULINK-ME */
        retval = cmsis_dap_cmd_DAP_Connect(seq == LINE_RESET || seq == JTAG_TO_SWD ?