kopia lustrzana https://github.com/stlink-org/stlink
Properly detect and warn if multiple stlinky magic bytes are detected
Stlinky can silently fail if its magic bytes are present anywhere else in the SRAM. This change makes st-term detect all stlinky structures, warn about multiple occurences and will use the last one detected.pull/195/head
rodzic
d650c9854f
commit
badeef227a
|
@ -30,6 +30,7 @@ struct stlinky* stlinky_detect(stlink_t* sl)
|
||||||
{
|
{
|
||||||
static const uint32_t sram_base = 0x20000000;
|
static const uint32_t sram_base = 0x20000000;
|
||||||
struct stlinky* st = malloc(sizeof(struct stlinky));
|
struct stlinky* st = malloc(sizeof(struct stlinky));
|
||||||
|
int multiple=0;
|
||||||
st->sl = sl;
|
st->sl = sl;
|
||||||
printf("sram: 0x%x bytes @ 0x%zx\n", sl->sram_base, sl->sram_size);
|
printf("sram: 0x%x bytes @ 0x%zx\n", sl->sram_base, sl->sram_size);
|
||||||
uint32_t off;
|
uint32_t off;
|
||||||
|
@ -37,14 +38,22 @@ struct stlinky* stlinky_detect(stlink_t* sl)
|
||||||
stlink_read_mem32(sl, sram_base + off, 4);
|
stlink_read_mem32(sl, sram_base + off, 4);
|
||||||
if (STLINKY_MAGIC == READ_UINT32_LE(sl->q_buf))
|
if (STLINKY_MAGIC == READ_UINT32_LE(sl->q_buf))
|
||||||
{
|
{
|
||||||
|
if (multiple > 0)
|
||||||
|
printf("WARNING: another ");
|
||||||
printf("stlinky detected at 0x%x\n", sram_base + off);
|
printf("stlinky detected at 0x%x\n", sram_base + off);
|
||||||
st->off = sram_base + off;
|
st->off = sram_base + off;
|
||||||
stlink_read_mem32(sl, st->off + 4, 4);
|
stlink_read_mem32(sl, st->off + 4, 4);
|
||||||
st->bufsize = (size_t) *(unsigned char*) sl->q_buf;
|
st->bufsize = (size_t) *(unsigned char*) sl->q_buf;
|
||||||
printf("stlinky buffer size 0x%zu \n", st->bufsize);
|
printf("stlinky buffer size 0x%zu \n", st->bufsize);
|
||||||
return st;
|
multiple++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (multiple > 0) {
|
||||||
|
if (multiple > 1) {
|
||||||
|
printf("Using last stlinky structure detected\n");
|
||||||
|
}
|
||||||
|
return st;
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue