kopia lustrzana https://github.com/stlink-org/stlink
flash_loader: improved handling errors
rodzic
7cfab876e7
commit
c0653f6595
|
@ -31,7 +31,7 @@ stm32vl.o: stm32f0.s
|
||||||
$(CC) stm32f0.s $(CFLAGS_ARMV7_M) -o stm32vl.o
|
$(CC) stm32f0.s $(CFLAGS_ARMV7_M) -o stm32vl.o
|
||||||
|
|
||||||
# generic rule for all other ARMv7-M
|
# generic rule for all other ARMv7-M
|
||||||
%.o: *.s
|
%.o: %.s
|
||||||
$(CC) $< $(CFLAGS_ARMV7_M) -o $@
|
$(CC) $< $(CFLAGS_ARMV7_M) -o $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|
|
@ -154,6 +154,7 @@ static const uint8_t loader_code_stm32f7_lv[] = {
|
||||||
|
|
||||||
int stlink_flash_loader_init(stlink_t *sl, flash_loader_t *fl) {
|
int stlink_flash_loader_init(stlink_t *sl, flash_loader_t *fl) {
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
|
uint32_t dfsr, cfsr, hfsr;
|
||||||
|
|
||||||
// allocate the loader in SRAM
|
// allocate the loader in SRAM
|
||||||
if (stlink_flash_loader_write_to_sram(sl, &fl->loader_addr, &size) == -1) {
|
if (stlink_flash_loader_write_to_sram(sl, &fl->loader_addr, &size) == -1) {
|
||||||
|
@ -165,6 +166,20 @@ int stlink_flash_loader_init(stlink_t *sl, flash_loader_t *fl) {
|
||||||
fl->buf_addr = fl->loader_addr + (uint32_t)size;
|
fl->buf_addr = fl->loader_addr + (uint32_t)size;
|
||||||
ILOG("Successfully loaded flash loader in sram\n");
|
ILOG("Successfully loaded flash loader in sram\n");
|
||||||
|
|
||||||
|
/* Clear Fault Status Register for handling flash loader error */
|
||||||
|
if (!stlink_read_debug32(sl, STLINK_REG_DFSR, &dfsr) && dfsr) {
|
||||||
|
ILOG("Clear DFSR\n");
|
||||||
|
stlink_write_debug32(sl, STLINK_REG_DFSR, dfsr);
|
||||||
|
}
|
||||||
|
if (!stlink_read_debug32(sl, STLINK_REG_CFSR, &cfsr) && cfsr) {
|
||||||
|
ILOG("Clear CFSR\n");
|
||||||
|
stlink_write_debug32(sl, STLINK_REG_CFSR, cfsr);
|
||||||
|
}
|
||||||
|
if (!stlink_read_debug32(sl, STLINK_REG_HFSR, &hfsr) && hfsr) {
|
||||||
|
ILOG("Clear HFSR\n");
|
||||||
|
stlink_write_debug32(sl, STLINK_REG_HFSR, hfsr);
|
||||||
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -348,7 +363,7 @@ int stlink_flash_loader_run(stlink_t *sl, flash_loader_t* fl, stm32_addr_t targe
|
||||||
// check written byte count
|
// check written byte count
|
||||||
stlink_read_reg(sl, 2, &rr);
|
stlink_read_reg(sl, 2, &rr);
|
||||||
|
|
||||||
if (rr.r[2] != 0) {
|
if ((int32_t)rr.r[2] > 0) {
|
||||||
ELOG("Write error\n");
|
ELOG("Write error\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
@ -364,7 +379,7 @@ error:
|
||||||
stlink_read_all_regs(sl, &rr);
|
stlink_read_all_regs(sl, &rr);
|
||||||
|
|
||||||
WLOG("Loader state: R2 0x%X R15 0x%X\n", rr.r[2], rr.r[15]);
|
WLOG("Loader state: R2 0x%X R15 0x%X\n", rr.r[2], rr.r[15]);
|
||||||
if (dhcsr != 0x3000B || dfsr != 0x3 || cfsr || hfsr) {
|
if (dhcsr != 0x3000B || dfsr || cfsr || hfsr) {
|
||||||
WLOG("MCU state: DHCSR 0x%X DFSR 0x%X CFSR 0x%X HFSR 0x%X\n",
|
WLOG("MCU state: DHCSR 0x%X DFSR 0x%X CFSR 0x%X HFSR 0x%X\n",
|
||||||
dhcsr, dfsr, cfsr, hfsr);
|
dhcsr, dfsr, cfsr, hfsr);
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue