我的芯片是ch32v208,根据我的需求,对设备进行了分区,分别是164K,156K,156K,后分别是bootloader,app1与app2。
bootloader能正常通过蓝牙对app1与app2进行更新,但是我的业务还有可能app1与app2相互更新(app1通过网线对app2进行更新,app2通过网线对app1进行更新)。根据分区情况来看,整个app1与app2都在非零等待区中。
现在现象是无论app1还是app2,只要对对方分区进行更新就会死机。但是如果把相同的代码编译到零等待区就能正常工作。
目前我做了如下实验:
1.把相同的代码编译到零等待区就能正常工作。(修改Link.ld文件)
2.操作flash前手动主动开启hsi,无效果,开启代码如下:
RCC_HSICmd(ENABLE); temp = 0; while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET && temp < 250) { temp++; Delay_Ms(20); } if (temp >= 250) { return -2; }
3.操作flash前手动将hclk改为1/4分频,默认是1/2分频,主动关闭增强读模式以及将FLASH时钟分频,无效果,修改代码如下:
FLASH_Enhance_Mode(DISABLE); RCC_HCLKConfig(RCC_SYSCLK_Div4); FLASH_Access_Clock_Cfg(FLASH_Access_SYSTEM_HALF); FLASH_Unlock(); FLASH_Unlock_Fast();
请问在非零等待区进行flash的操作到底要注意哪些细节?方不方便告知一下?这也太让人绝望了。