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