From ebf3e9da0422271acb5374fe2158b596128234f3 Mon Sep 17 00:00:00 2001 From: Piotr Esden-Tempski Date: Mon, 26 Aug 2019 17:22:02 -0700 Subject: [PATCH 1/3] Changed the Gitter chat link to Discord. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f260082..21be638b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Black Magic Probe ================= [![Build Status](https://travis-ci.org/blacksphere/blackmagic.svg?branch=master)](https://travis-ci.org/blacksphere/blackmagic) -[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/blacksphere/blackmagic?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +[![Discord](https://img.shields.io/discord/613131135903596547?logo=discord)](https://discord.gg/P7FYThy) [![Donate](https://img.shields.io/badge/paypal-donate-blue.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=N84QYNAM2JJQG) [![Kickstarter](https://img.shields.io/badge/kickstarter-back%20us-14e16e.svg)](https://www.kickstarter.com/projects/esden/1bitsy-and-black-magic-probe-demystifying-arm-prog) From 44f471db531350deeacbf0d42fb760e780b29f27 Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Tue, 20 Aug 2019 22:01:20 +0200 Subject: [PATCH 2/3] pc-stlinkv2: READMEM_8BIT needs to read 2 bytes for 1 byte requested. Fix as seen in openocd. SYSROM_PIDR2 has only 3 bits for the JEP106 identity code field, bits [6:4]. --- src/platforms/pc-stlinkv2/stlinkv2.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/platforms/pc-stlinkv2/stlinkv2.c b/src/platforms/pc-stlinkv2/stlinkv2.c index 4d8d6992..7cc6ddd0 100644 --- a/src/platforms/pc-stlinkv2/stlinkv2.c +++ b/src/platforms/pc-stlinkv2/stlinkv2.c @@ -1095,6 +1095,7 @@ void stlink_readmem(ADIv5_AP_t *ap, void *dest, uint32_t src, size_t len) { if (len == 0) return; + size_t read_len = len; uint8_t type; char *CMD; if (src & 1 || len & 1) { @@ -1104,6 +1105,8 @@ void stlink_readmem(ADIv5_AP_t *ap, void *dest, uint32_t src, size_t len) DEBUG(" Too large!\n"); return; } + if (len == 1) + read_len ++; /* Fix read length as in openocd*/ } else if (src & 3 || len & 3) { CMD = "READMEM_16BIT"; type = STLINK_DEBUG_APIV2_READMEM_16BIT; @@ -1120,7 +1123,7 @@ void stlink_readmem(ADIv5_AP_t *ap, void *dest, uint32_t src, size_t len) src & 0xff, (src >> 8) & 0xff, (src >> 16) & 0xff, (src >> 24) & 0xff, len & 0xff, len >> 8, ap->apsel}; - int res = read_retry(cmd, 16, dest, len); + int res = read_retry(cmd, 16, dest, read_len); if (res == STLINK_ERROR_OK) { uint8_t *p = (uint8_t*)dest; for (size_t i = 0; i < len ; i++) { From 5d59338de5f396300e46f52c264d6a050b8ae247 Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Wed, 21 Aug 2019 12:50:29 +0200 Subject: [PATCH 3/3] pc-stlinkv2: Try first to reset device if we read a strange version number. --- src/platforms/pc-stlinkv2/stlinkv2.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/platforms/pc-stlinkv2/stlinkv2.c b/src/platforms/pc-stlinkv2/stlinkv2.c index 7cc6ddd0..f3de39e4 100644 --- a/src/platforms/pc-stlinkv2/stlinkv2.c +++ b/src/platforms/pc-stlinkv2/stlinkv2.c @@ -800,10 +800,23 @@ void stlink_init(int argc, char **argv) Stlink.req_trans = libusb_alloc_transfer(0); Stlink.rep_trans = libusb_alloc_transfer(0); stlink_version(); - if (Stlink.ver_stlink < 3 && Stlink.ver_jtag < 32) { - DEBUG("Please update Firmware\n"); - goto error_1; - } else if (Stlink.ver_stlink == 3 && Stlink.ver_jtag < 3) { + if ((Stlink.ver_stlink < 3 && Stlink.ver_jtag < 32) || + (Stlink.ver_stlink == 3 && Stlink.ver_jtag < 3)) { + /* Maybe the adapter is in some strange state. Try to reset */ + int result = libusb_reset_device(Stlink.handle); + DEBUG("Trying reset\n"); + if (result == LIBUSB_ERROR_BUSY) { /* Try again */ + platform_delay(50); + result = libusb_reset_device(Stlink.handle); + } + if (result != LIBUSB_SUCCESS) { + DEBUG("libusb_reset_device failed\n"); + goto error_1; + } + stlink_version(); + } + if ((Stlink.ver_stlink < 3 && Stlink.ver_jtag < 32) || + (Stlink.ver_stlink == 3 && Stlink.ver_jtag < 3)) { DEBUG("Please update Firmware\n"); goto error_1; }