為了解決數(shù)字產(chǎn)品在升級程序時需要反復(fù)帶電插拔燒錄器,參考了網(wǎng)上很多BootLoader的程序例程,通過這個帖子記錄自己一步一步搭建BootLoader升級框架。設(shè)計構(gòu)思如下(控制芯片用的是STM32F103VE):
1、對flash劃分為三個區(qū)域:
2、Flash運行流程如下:
3、程序設(shè)計思路解釋:Flash區(qū)域劃分為BootLoader、UserCode、BackUp三個區(qū)域;通過燒錄器下載BootLoader程序后,即可通過串口通信升級程序;在對UserCode程序升級完成后,會在UserCode_Verfy的地址上寫上標識碼代表已經(jīng)有用戶程序,同時把用戶程序拷貝到BackUp區(qū)域;如此大費周章的設(shè)計BackUp備份區(qū)是非常有必要的,在升級UserCode區(qū)域代碼的時候,如果出現(xiàn)掉線,由于升級前會把UserCode的所有程序全部擦除才能進行升級,這時候就出現(xiàn)了UserCode的程序不完整無法運行,機器就會變成磚頭;增加了BackUp區(qū)域之后,BootLoader程序?qū)serCode_Verfy區(qū)域進行5次識別后,就會對BackUp_Verfy區(qū)域進行識別,識別到有備份程序后,就會主動將備份程序拷貝回UserCode區(qū)域,從而實現(xiàn)了即使在升級過程出現(xiàn)異常,機器仍然能退回上一次存儲的程序運行。
4、編程準備:
芯片型號
內(nèi)存地址分布
通過資料查詢,可以了解到STM32F103VE是一款100腳內(nèi)存512K的芯片;
考慮到我們的程序存儲量不會太大,對Flash劃分如下:
5、通過學(xué)習(xí)《STM32F10xxx閃存編程參考手冊》
對Flash擦除,程序如下:
對Flash編程,程序如下:
標識碼的寫入,程序如下:
程序的拷貝,程序如下:
BootLoader處理UserCode和BackUp的識別
BootLoader跳轉(zhuǎn)到UserCode的程序代碼:
主函數(shù)入口:
6、升級測試
A.正常燒錄升級流程:
下載BootLoader
在線串口升級
Loader程序正常跳轉(zhuǎn)到用戶程序
B.燒錄過程掉線測試:
升級掉線:
備份區(qū)程序拷貝,重新運行