我的芯片是ch32v208,根據(jù)我的需求,對設(shè)備進行了分區(qū),分別是164K,156K,156K,后分別是bootloader,app1與app2。
bootloader能正常通過藍牙對app1與app2進行更新,但是我的業(yè)務還有可能app1與app2相互更新(app1通過網(wǎng)線對app2進行更新,app2通過網(wǎng)線對app1進行更新)。根據(jù)分區(qū)情況來看,整個app1與app2都在非零等待區(qū)中。
現(xiàn)在現(xiàn)象是無論app1還是app2,只要對對方分區(qū)進行更新就會死機。但是如果把相同的代碼編譯到零等待區(qū)就能正常工作。
目前我做了如下實驗:
1.把相同的代碼編譯到零等待區(qū)就能正常工作。(修改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分頻,主動關(guān)閉增強讀模式以及將FLASH時鐘分頻,無效果,修改代碼如下:
FLASH_Enhance_Mode(DISABLE); RCC_HCLKConfig(RCC_SYSCLK_Div4); FLASH_Access_Clock_Cfg(FLASH_Access_SYSTEM_HALF); FLASH_Unlock(); FLASH_Unlock_Fast();
請問在非零等待區(qū)進行flash的操作到底要注意哪些細節(jié)?方不方便告知一下?這也太讓人絕望了。