7.4日BootlLoad總結

小智001發表於2024-07-04

最近在研究微控制器遠端升級方法,看了網上許多資料後瞭解到,遠端升級就是用IAP方法去燒寫flash區,而IAP方法在EEPROM中有用到,也就是所說的掉電記憶,掉電不丟失的情況,而相較於51微控制器,網上的資料大多是有關STM32微控制器的,且使用作業系統,適合於晶片記憶體較大的晶片,分割槽成3-4塊,首先是BOOT引導區,在此判斷是否需要升級程翠,不需要則跳轉到正常程式入口處執行,需要則跳轉到升級程式處執行(正常程式和升級程式分別儲存,需要兩塊FLASH區域,防止升級過程中失敗變磚),其次就是這兩個程式區,最後是掉電記憶區(EEPROM),也可以記錄些程式區的狀態,如校驗和值,長度等。
查閱晶片手冊後發現SC系列51微控制器晶片可以用IAP方法燒寫整個FLASH區,而某些晶片沒有開放,只能用IAP去燒寫EEPROM區,且與FLASH獨立出來,所以考慮用SC晶片實現BootLoad方法,用WIFI模組串列埠傳送資料,去升級主控晶片程式。
由於我使用的晶片記憶體較小,不適合雙分割槽去儲存程式,故只將flash分成boot引導區和程式區,BootLoad實現方法大致如下




其中最主要的步驟是分配FLASH空間和設定中斷重對映,分配空間在keil設定裡

在啟動檔案STARTUP.A51插入跳轉指令(中斷重對映),keil配置裡配置相關地址



設定跳轉地址時注意加上重對映後的中斷地址,600H+100H=700H才是最後的boot載入程式跳轉到的使用者程式的執行地址。