kopia lustrzana https://github.com/stlink-org/stlink
Implement FlashErase GDB command.
rodzic
eac53cf6d1
commit
d4b435e7c0
|
@ -184,6 +184,56 @@ int serve(struct stlink* sl, int port) {
|
|||
break;
|
||||
}
|
||||
|
||||
case 'v': {
|
||||
char *separator = strstr(packet, ":"), *params = "";
|
||||
if(separator == NULL) {
|
||||
separator = packet + strlen(packet);
|
||||
} else {
|
||||
params = separator + 1;
|
||||
}
|
||||
|
||||
unsigned cmdNameLength = (separator - &packet[1]);
|
||||
char* cmdName = calloc(cmdNameLength + 1, 1);
|
||||
strncpy(cmdName, &packet[1], cmdNameLength);
|
||||
|
||||
if(!strcmp(cmdName, "FlashErase")) {
|
||||
char *s_addr, *s_length;
|
||||
char *tok = params;
|
||||
|
||||
s_addr = strsep(&tok, ",");
|
||||
s_length = tok;
|
||||
|
||||
unsigned addr = strtoul(s_addr, NULL, 16),
|
||||
length = strtoul(s_length, NULL, 16);
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("FlashErase: addr:%08x,len:%04x\n",
|
||||
addr, length);
|
||||
#endif
|
||||
|
||||
for(stm32_addr_t cur = addr;
|
||||
cur < addr + length; cur += 0x400) {
|
||||
#ifdef DEBUG
|
||||
printf("do_erase: %08x\n", cur);
|
||||
#endif
|
||||
|
||||
stlink_erase_flash_page(sl, cur);
|
||||
}
|
||||
|
||||
reply = strdup("OK");
|
||||
} else if(!strcmp(cmdName, "FlashWrite")) {
|
||||
} else if(!strcmp(cmdName, "FlashDone")) {
|
||||
reply = strdup("OK");
|
||||
}
|
||||
|
||||
if(reply == NULL)
|
||||
reply = strdup("");
|
||||
|
||||
free(cmdName);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 'c':
|
||||
stlink_run(sl);
|
||||
|
||||
|
|
|
@ -1108,7 +1108,7 @@ static int write_flash_mem16
|
|||
}
|
||||
#endif /* not working */
|
||||
|
||||
static int erase_flash_page(struct stlink* sl, stm32_addr_t page)
|
||||
int stlink_erase_flash_page(struct stlink* sl, stm32_addr_t page)
|
||||
{
|
||||
/* page an addr in the page to erase */
|
||||
|
||||
|
@ -1138,7 +1138,7 @@ static int erase_flash_page(struct stlink* sl, stm32_addr_t page)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int __attribute__((unused)) erase_flash_mass(struct stlink* sl)
|
||||
int stlink_erase_flash_mass(struct stlink* sl)
|
||||
{
|
||||
/* wait for ongoing op to finish */
|
||||
wait_flash_busy(sl);
|
||||
|
@ -1421,7 +1421,7 @@ static int stlink_fwrite_flash
|
|||
for (off = 0; off < mf.len; off += sl->flash_pgsz)
|
||||
{
|
||||
/* addr must be an addr inside the page */
|
||||
if (erase_flash_page(sl, addr + off) == -1)
|
||||
if (stlink_erase_flash_page(sl, addr + off) == -1)
|
||||
{
|
||||
fprintf(stderr, "erase_flash_page(0x%x) == -1\n", addr + off);
|
||||
goto on_error;
|
||||
|
|
|
@ -155,4 +155,7 @@ void stlink_write_mem8(struct stlink *sl, uint32_t addr, uint16_t len);
|
|||
void stlink_write_mem32(struct stlink *sl, uint32_t addr, uint16_t len);
|
||||
void stlink_close(struct stlink *sl);
|
||||
|
||||
int stlink_erase_flash_page(struct stlink* sl, stm32_addr_t page);
|
||||
int stlink_erase_flash_mass(struct stlink* sl);
|
||||
|
||||
#endif
|
||||
|
|
Ładowanie…
Reference in New Issue