If the communication with the target was failing (either because of an
intermittent connection or the target was rebooted), this is needed to
reestablish operational state.
Reported-by: Tim Sander <tim@krieglstein.org>
Tested-by: Tim Sander <tim@krieglstein.org>
Change-Id: I91ea2e2b2b5ef8eb27dfe9bae95ef2a919f67e4e
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Reviewed-on: http://openocd.zylin.com/2152
Tested-by: jenkins
Reviewed-by: Tim Sander <tim@krieglstein.org>
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
/** trace module clock prescaler */
uint32_t prescale;
} trace;
/** trace module clock prescaler */
uint32_t prescale;
} trace;
+ /** reconnect is needed next time we try to query the
+ * status */
+ bool reconnect_pending;
};
#define STLINK_DEBUG_ERR_OK 0x80
};
#define STLINK_DEBUG_ERR_OK 0x80
static int stlink_usb_assert_srst(void *handle, int srst);
static int stlink_usb_assert_srst(void *handle, int srst);
+static enum stlink_mode stlink_get_mode(enum hl_transports t)
+{
+ switch (t) {
+ case HL_TRANSPORT_SWD:
+ return STLINK_MODE_DEBUG_SWD;
+ case HL_TRANSPORT_JTAG:
+ return STLINK_MODE_DEBUG_JTAG;
+ case HL_TRANSPORT_SWIM:
+ return STLINK_MODE_DEBUG_SWIM;
+ default:
+ return STLINK_MODE_UNKNOWN;
+ }
+}
+
/** */
static int stlink_usb_init_mode(void *handle, bool connect_under_reset)
{
/** */
static int stlink_usb_init_mode(void *handle, bool connect_under_reset)
{
LOG_DEBUG("MODE: 0x%02X", mode);
/* set selected mode */
LOG_DEBUG("MODE: 0x%02X", mode);
/* set selected mode */
- switch (h->transport) {
- case HL_TRANSPORT_SWD:
- emode = STLINK_MODE_DEBUG_SWD;
- break;
- case HL_TRANSPORT_JTAG:
- emode = STLINK_MODE_DEBUG_JTAG;
- break;
- case HL_TRANSPORT_SWIM:
- emode = STLINK_MODE_DEBUG_SWIM;
- break;
- default:
- emode = STLINK_MODE_UNKNOWN;
- break;
- }
+ emode = stlink_get_mode(h->transport);
if (emode == STLINK_MODE_UNKNOWN) {
LOG_ERROR("selected mode (transport) not supported");
if (emode == STLINK_MODE_UNKNOWN) {
LOG_ERROR("selected mode (transport) not supported");
- if (h->jtag_api == STLINK_JTAG_API_V2)
- return stlink_usb_v2_get_status(handle);
+ if (h->reconnect_pending) {
+ LOG_INFO("Previous state query failed, trying to reconnect");
+ res = stlink_usb_mode_enter(handle, stlink_get_mode(h->transport));
+
+ if (res != ERROR_OK)
+ return TARGET_UNKNOWN;
+
+ h->reconnect_pending = false;
+ }
+
+ if (h->jtag_api == STLINK_JTAG_API_V2) {
+ res = stlink_usb_v2_get_status(handle);
+ if (res == TARGET_UNKNOWN)
+ h->reconnect_pending = true;
+ return res;
+ }
stlink_usb_init_buffer(handle, h->rx_ep, 2);
stlink_usb_init_buffer(handle, h->rx_ep, 2);
if (h->databuf[0] == STLINK_CORE_HALTED)
return TARGET_HALTED;
if (h->databuf[0] == STLINK_CORE_HALTED)
return TARGET_HALTED;
+ h->reconnect_pending = true;
+
Linking to existing account procedure
If you already have an account and want to add another login method
you
MUST first sign in with your existing account and
then change URL to read
https://review.openocd.org/login/?link
to get to this page again but this time it'll work for linking. Thank you.
SSH host keys fingerprints
1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=.. |
|+o.. . |
|*.o . . |
|+B . . . |
|Bo. = o S |
|Oo.+ + = |
|oB=.* = . o |
| =+=.+ + E |
|. .=o . o |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)