从下图的datasheet上看,Code FLASH地址应该是从0x0800 0000开始的区间,但是从IAP的demo程序代码看,自己编写的Bootloader应该是向0x0000 3000跳转去运行固件,也就是Code FLASH地址好像是从0x0000 0000开始的区间。
void SW_handler(void)
{
//jump UserCode
__asm("li a6, 0x3000");
__asm("jr a6");
while(1);
}
我的问题是:我在自己编写的Bootloader程序中,从外部SPI Flash读取的固件数据应该写在哪个地址区间(假设Bootloader占用0x3000也就是12K的空间)?是0x0800 3000开始还是0x0000 3000开始?我现在发现如果往0x0000 3000开始的地址去写,调用FLASHStatus = FLASH_ErasePage(0x0000 3000)函数根本就擦除不了,虽然获得的FLASHStatus值是等于FLASH_COMPLETE。而如果我换成FLASHStatus = FLASH_ErasePage(0x0800 3000),擦除完后我读数据发现都是0xE339……之类的值,并不是预期的0xFFFFFFFF,所以也不知道这种情况正不正常。还望指教,谢谢!