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

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

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


同時(shí),在APP應(yīng)用程序的IAR工程文件中的Options中勾選生成bin文件:

使用SecureCRT作為上位機(jī),配置串口波特率為115200,Ymodem協(xié)議選擇1024bytes,選擇發(fā)送bin文件:



三、BootLoader主要代碼
在BootLoader程序中,如果檢查到需要IAP升級(jí),使用Ymodem協(xié)議接收發(fā)送過來的APP應(yīng)用程序的bin文件。對(duì)舊版本的APP應(yīng)用程序進(jìn)行備份,將新版本的APP應(yīng)用程序?qū)懭氲紸PP區(qū),最后執(zhí)行跳轉(zhuǎn)程序到APP區(qū)。
3.1地址宏定義

3.2 寫入到APP區(qū)
使用Ymodem協(xié)議接收SecureCRT發(fā)送過來的bin文件。接收成功之后,擦除Flash的APP區(qū),將接收到的bin文件數(shù)據(jù)重新寫入到APP區(qū)的Flash中。



3.3 跳轉(zhuǎn)到指定地址
我們先簡(jiǎn)單介紹AS32芯片的啟動(dòng)流程:從 ’_start’ 符號(hào)對(duì)應(yīng)的入口開始執(zhí)行,核心步驟依次為:初始化全局指針 ’gp’、配置棧指針 ’sp’、將data段從ROM拷貝到RAM、清空 ’bss’ 段,以及完成中斷相關(guān)的基礎(chǔ)初始化。所有我們只需要跳轉(zhuǎn)到 ‘_start’ 的地址即可。


新的應(yīng)用程序被完整寫入Flash的指定區(qū)域后,Bootloader 將執(zhí)行最后的跳轉(zhuǎn)操作,啟動(dòng)位于該區(qū)域入口地址的新程序,傳入的參數(shù)為 ‘_start’ 的地址,即APP區(qū)的首地址0x0108_0000。最后,跳轉(zhuǎn)之前要關(guān)閉全局中斷,防止程序跑飛。


跳轉(zhuǎn)之后要在APP應(yīng)用程序里面開啟全局中斷,使得能正常接收中斷。

3.4 增加相關(guān)安全性
升級(jí)之前,把舊版本的APP應(yīng)用程序復(fù)制到備份區(qū),方便進(jìn)行還原操作:

定義相關(guān)的IAP升級(jí)信息結(jié)構(gòu)體,用于保存跳轉(zhuǎn)狀態(tài)和升級(jí)狀態(tài),同時(shí)記錄接收到的bin文件名稱和文件大?。?/p>

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

三、實(shí)驗(yàn)結(jié)果
得到APP程序的.bin文件之后,將BootLoader程序下載進(jìn)單片機(jī),打開SecureCRT,選擇波特率,發(fā)送Ymodem文件,選擇.bin文件,傳輸文件,此時(shí)IAP升級(jí)成功,如下圖操作:

審核編輯 黃宇
-
芯片
+關(guān)注
關(guān)注
462文章
53623瀏覽量
460226 -
mcu
+關(guān)注
關(guān)注
147文章
18669瀏覽量
388879 -
IAP
+關(guān)注
關(guān)注
2文章
166瀏覽量
25837
發(fā)布評(píng)論請(qǐng)先 登錄
AS32A601車規(guī)級(jí)微控制器的應(yīng)用探索
基于AS32A601型MCU芯片的屏幕驅(qū)動(dòng)IC方案的技術(shù)研究
AS32S601型MCU芯片在商業(yè)衛(wèi)星電源系統(tǒng)伺服控制器中的性能分析與應(yīng)用解析
車規(guī)級(jí)MCU在特種車輛車身控制中的應(yīng)用研究
如何使用ISP功能對(duì)Nuvoton 8051 MCU系列進(jìn)行ISP升級(jí)?
AT32 MCU如何使用IAP
MCU芯片AS32S601在衛(wèi)星光纖放大器(EDFA)中的應(yīng)用探索
AT32 IAP using the USART
AS32A601在毫米波雷達(dá)AEB方案中的技術(shù)創(chuàng)新與應(yīng)用拓展
基于AS32A601的高可靠MCU在電動(dòng)汽車VCU系統(tǒng)中的應(yīng)用策略
AS32A601與ASM1042芯片在電力系統(tǒng)自動(dòng)化監(jiān)控中的應(yīng)用效能分析
RISC-V JTAG:開啟MCU 芯片調(diào)試之旅

AS32A601型MCU芯片如何進(jìn)行IAP升級(jí)?
評(píng)論