Merge commit 'e8bd066fe96f72c6998aea7c0d80d6de019b825d' into sam-update
# Conflicts: # README.md
This commit is contained in:
commit
90a7ecaaf1
@ -800,10 +800,23 @@ void stlink_init(int argc, char **argv)
|
|||||||
Stlink.req_trans = libusb_alloc_transfer(0);
|
Stlink.req_trans = libusb_alloc_transfer(0);
|
||||||
Stlink.rep_trans = libusb_alloc_transfer(0);
|
Stlink.rep_trans = libusb_alloc_transfer(0);
|
||||||
stlink_version();
|
stlink_version();
|
||||||
if (Stlink.ver_stlink < 3 && Stlink.ver_jtag < 32) {
|
if ((Stlink.ver_stlink < 3 && Stlink.ver_jtag < 32) ||
|
||||||
DEBUG("Please update Firmware\n");
|
(Stlink.ver_stlink == 3 && Stlink.ver_jtag < 3)) {
|
||||||
goto error_1;
|
/* Maybe the adapter is in some strange state. Try to reset */
|
||||||
} else if (Stlink.ver_stlink == 3 && Stlink.ver_jtag < 3) {
|
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");
|
DEBUG("Please update Firmware\n");
|
||||||
goto error_1;
|
goto error_1;
|
||||||
}
|
}
|
||||||
@ -1095,6 +1108,7 @@ void stlink_readmem(ADIv5_AP_t *ap, void *dest, uint32_t src, size_t len)
|
|||||||
{
|
{
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
return;
|
return;
|
||||||
|
size_t read_len = len;
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
char *CMD;
|
char *CMD;
|
||||||
if (src & 1 || len & 1) {
|
if (src & 1 || len & 1) {
|
||||||
@ -1104,6 +1118,8 @@ void stlink_readmem(ADIv5_AP_t *ap, void *dest, uint32_t src, size_t len)
|
|||||||
DEBUG(" Too large!\n");
|
DEBUG(" Too large!\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (len == 1)
|
||||||
|
read_len ++; /* Fix read length as in openocd*/
|
||||||
} else if (src & 3 || len & 3) {
|
} else if (src & 3 || len & 3) {
|
||||||
CMD = "READMEM_16BIT";
|
CMD = "READMEM_16BIT";
|
||||||
type = STLINK_DEBUG_APIV2_READMEM_16BIT;
|
type = STLINK_DEBUG_APIV2_READMEM_16BIT;
|
||||||
@ -1120,7 +1136,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 & 0xff, (src >> 8) & 0xff, (src >> 16) & 0xff,
|
||||||
(src >> 24) & 0xff,
|
(src >> 24) & 0xff,
|
||||||
len & 0xff, len >> 8, ap->apsel};
|
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) {
|
if (res == STLINK_ERROR_OK) {
|
||||||
uint8_t *p = (uint8_t*)dest;
|
uint8_t *p = (uint8_t*)dest;
|
||||||
for (size_t i = 0; i < len ; i++) {
|
for (size_t i = 0; i < len ; i++) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user