目前我們是使用兩款MCU,CH32V307RTC6? 和 CH32V203C8T6。
都在研究如何實(shí)現(xiàn)遠(yuǎn)程升級(jí),剛開始開發(fā),還沒有完全弄明白。
計(jì)劃是如此:
CH32V307RTC6 - 通過網(wǎng)絡(luò)下載
CH32V203C8T6 - 通過串口下載
思路:1)先把生成的bin文件,在User系統(tǒng)下分塊下載放至儲(chǔ)存區(qū)(user2),每塊CRC檢驗(yàn)
? ? ? ? ?2)然后寫入升級(jí)標(biāo)識(shí),通過
????//soft - 0x00 run t0 BootLoader
????NVIC_SystemReset();
? ? ? ? ?3)在boot狀態(tài)把 儲(chǔ)存區(qū)的 user2 復(fù)制至 運(yùn)行區(qū)(User1)
? ? ? ? ?4)通過下面的代碼跳至 User1 區(qū)啟動(dòng)
? ??????????// 進(jìn) 機(jī)器模式 跳轉(zhuǎn)到 0x5000;
? ? ????????NVIC_EnableIRQ(Software_IRQn);
? ? ????????NVIC_SetPendingIRQ(Software_IRQn);
有3點(diǎn)疑問:
IPA的LD文件的設(shè)置如此的:
MEMORY
{
????FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 20K
????RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
}
USER的LD文件的設(shè)置如此的:
MEMORY
{
????FLASH (rx) : ORIGIN = 0x00005000, LENGTH = 44K
????RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
}
但在DEMO文件內(nèi),描述寫入地址分別是
/*@Note
?*bootloader:0x08000000 - 0x08005000? 20K
?*UserCode:? 0x08005000 - 0x08010000? 44K
?*
?*/
----------------------------------
疑問1:USER的起始位置: LD文件的是寫 0x00050000,但DEMO代碼是0x08005000,兩者為什么不一樣的?
疑問2:除LD的文件配置寫入位置偏移外,還有哪些地方配置才能區(qū)分 IAP 和 user 的兩個(gè)啟動(dòng)入口?
? ? ? ? ? ?就是它怎么知道?
? ? ? ? ? ? ? ?通過?NVIC_SystemReset() 是進(jìn)入 boot 區(qū)
? ? ? ? ? ? ? ?通過?NVIC_EnableIRQ 和?NVIC_SetPendingIRQ 就是進(jìn)入user 區(qū)。
? ? ? ? ? ?DEMO說(shuō)的注釋【進(jìn) 機(jī)器模式 跳轉(zhuǎn)到 0x5000】,除了LD設(shè)備外,哪個(gè)還要修改?
疑問3:通過MounRiver生成的BIN文件,可以直接下載后,直接寫入user區(qū),然后啟動(dòng)嗎? 中間需要做什么轉(zhuǎn)換不?