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
Onno Kortmann 2013-12-06 20:30:01 -08:00
rodzic d650c9854f
commit badeef227a
1 zmienionych plików z 10 dodań i 1 usunięć

Wyświetl plik

@ -30,6 +30,7 @@ struct stlinky* stlinky_detect(stlink_t* sl)
{
static const uint32_t sram_base = 0x20000000;
struct stlinky* st = malloc(sizeof(struct stlinky));
int multiple=0;
st->sl = sl;
printf("sram: 0x%x bytes @ 0x%zx\n", sl->sram_base, sl->sram_size);
uint32_t off;
@ -37,14 +38,22 @@ struct stlinky* stlinky_detect(stlink_t* sl)
stlink_read_mem32(sl, sram_base + off, 4);
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);
st->off = sram_base + off;
stlink_read_mem32(sl, st->off + 4, 4);
st->bufsize = (size_t) *(unsigned char*) sl->q_buf;
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;
}