一、什么是IAP?
IAP(In Application Programming,在應用編程)是一種技術,旨在實現用戶應用程序的動態更新,而無需使用專門的編程工具或硬件。IAP升級對于物聯網設備、嵌入式系統等非常重要,因為它允許在產品部署后進行功能更新或修復錯誤。
二、怎么使用IAP升級?
在單片機上電時,系統首先進入引導加載程序(BootLoader)。BootLoader會檢測是否需要進行IAP升級。如果條件未被觸發,BootLoader將直接跳轉到APP應用程序執行。如果條件被觸發,BootLoader將執行以下步驟:
1.備份APP應用程序:BootLoader會將舊版本的APP應用程序復制至備份區域,以便在需要時進行還原操作。
2.擦除APP程序區域:隨后,BootLoader將清除當前APP程序存儲區域,確保該區域完全為空。
3.重新寫入APP應用程序:BootLoader將通過外部接口(如串口)接收新版本的APP應用程序數據,并將其完整寫入已擦除的APP程序存儲區域。
4.更新IAP升級信息:等待成功寫入APP應用程序之后,更新IAP升級信息結構體,并將其保存到Flash中,防止丟失。
2.1 分區
我們寫的代碼最終都會被編譯成二進制文件并保存在Flash中,那么我們就需要進一步對內部Falsh劃分為幾個區域:BootLoader區、APP應用程序區、數據區、備份區。
1.BootLoader區:存放BootLoader程序,負責啟動過程和固件更新。
2.APP應用程序區:存放應用程序,即實際的功能代碼。
3.數據區:用于存儲IAP升級關鍵信息和安全相關數據
4.備份區:用于保存舊版本的應用程序或作為失敗更新的回退選項。

2.2 地址分配
AS32A601片內Flash共包含兩個存儲器,分別為程序存儲器(PFlash)和數據存儲器(DFlash)。其中PFlash共2M的Flash大小,我們主要對PFlash進行分區。將它分成四個區,BootLoader區、APP區、數據區、備份區,具體劃分如下表:

2.3 APP生成bin文件和上位機
Bootloader的IAR工程文件不用修改。只需要在APP應用程序的IAR工程文件中的Options中修改.icf文件,修改APP區的起始地址為0x0108_0000,控制APP應用程序在 Flash 中的存儲布局。


同時,在APP應用程序的IAR工程文件中的Options中勾選生成bin文件:

使用SecureCRT作為上位機,配置串口波特率為115200,Ymodem協議選擇1024bytes,選擇發送bin文件:



三、BootLoader主要代碼
在BootLoader程序中,如果檢查到需要IAP升級,使用Ymodem協議接收發送過來的APP應用程序的bin文件。對舊版本的APP應用程序進行備份,將新版本的APP應用程序寫入到APP區,最后執行跳轉程序到APP區。
3.1地址宏定義

3.2 寫入到APP區
使用Ymodem協議接收SecureCRT發送過來的bin文件。接收成功之后,擦除Flash的APP區,將接收到的bin文件數據重新寫入到APP區的Flash中。



3.3 跳轉到指定地址
我們先簡單介紹AS32芯片的啟動流程:從 ’_start’ 符號對應的入口開始執行,核心步驟依次為:初始化全局指針 ’gp’、配置棧指針 ’sp’、將data段從ROM拷貝到RAM、清空 ’bss’ 段,以及完成中斷相關的基礎初始化。所有我們只需要跳轉到 ‘_start’ 的地址即可。


新的應用程序被完整寫入Flash的指定區域后,Bootloader 將執行最后的跳轉操作,啟動位于該區域入口地址的新程序,傳入的參數為 ‘_start’ 的地址,即APP區的首地址0x0108_0000。最后,跳轉之前要關閉全局中斷,防止程序跑飛。


跳轉之后要在APP應用程序里面開啟全局中斷,使得能正常接收中斷。

3.4 增加相關安全性
升級之前,把舊版本的APP應用程序復制到備份區,方便進行還原操作:

定義相關的IAP升級信息結構體,用于保存跳轉狀態和升級狀態,同時記錄接收到的bin文件名稱和文件大小:

每次IAP升級跳轉之前,需要先從Flash中讀取信息結構體,然后進行更新(記錄接收到的bin文件名稱和文件大小),最后重新寫入到Flash中:

三、實驗結果
得到APP程序的.bin文件之后,將BootLoader程序下載進單片機,打開SecureCRT,選擇波特率,發送Ymodem文件,選擇.bin文件,傳輸文件,此時IAP升級成功,如下圖操作:

審核編輯 黃宇
-
芯片
+關注
關注
463文章
54007瀏覽量
465923 -
mcu
+關注
關注
147文章
18924瀏覽量
398010 -
IAP
+關注
關注
2文章
169瀏覽量
26056
發布評論請先 登錄
基于納芯微實時控制MCU NS800RT5039的IAP固件升級指南(2)
基于納芯微實時控制MCU NS800RT5039的IAP固件升級指南(1)
AS32A601車規級微控制器的應用探索
基于AS32A601型MCU芯片的屏幕驅動IC方案的技術研究
AS32S601型MCU芯片在商業衛星電源系統伺服控制器中的性能分析與應用解析
車規級MCU在特種車輛車身控制中的應用研究
AT32 MCU如何使用IAP
MCU芯片AS32S601在衛星光纖放大器(EDFA)中的應用探索
AT32 IAP using the USART
AS32A601在毫米波雷達AEB方案中的技術創新與應用拓展
基于AS32A601的高可靠MCU在電動汽車VCU系統中的應用策略
AS32A601與ASM1042芯片在電力系統自動化監控中的應用效能分析
RISC-V JTAG:開啟MCU 芯片調試之旅
AS32A601型MCU芯片如何進行IAP升級?
評論