此芯片共64K Flash,分区如下:
//0x08000000 - 0x08007800 : IAP - 30K - bootloader
//0x08007800 - 0x0800F800 : APP - 32K - 储存本ROM运行内容
//0x0800F800 - 0x08010000 : DAT - 2K - 用户数据
在IAP的程序里面,在下载之前会先清掉原来的APP部分程序:
//save to the location
FLASH_Unlock_Fast();
FLASH_EraseBlock_32K_Fast(0x08007800);
FLASH_Lock_Fast();
------------------------
非常奇怪,一运行到这行 FLASH_EraseBlock_32K_Fast(0x08007800)就死机了。
而且下面的回调没有被执行,只能强制断电才能恢复。
void HardFault_Handler(void)
{
printf("mepc :%08x\r\n", __get_MEPC());
printf("mcause:%08x\r\n", __get_MCAUSE());
printf("mtval :%08x\r\n", __get_MTVAL());
while(1);
}
注:IAP的编辑的信息
IAP的fd信息
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
IAP设置跳转的信息:
void SW_Handler(void)
{
printf("start user APP\r\n");
__asm("li a6, 0x7800");
__asm("jr a6");
while(1);
}