前言
關(guān)于 IAP 技術(shù),做過 bootloader 的想必很熟悉(IAP全稱 In Application Programming,即應(yīng)用編程),和 ISP(全稱 In System Programming,即系統(tǒng)編程)不同,ISP 一般都是通過專業(yè)的調(diào)試器或者下載器對(duì)單片機(jī)內(nèi)部的 Flash 存儲(chǔ)器進(jìn)程編程(如JTAG等),而 IAP 技術(shù)是從結(jié)構(gòu)上將 Flash 儲(chǔ)存器映射分為兩個(gè)或者多個(gè)分區(qū),在一個(gè)分區(qū)中對(duì)其他分區(qū)進(jìn)行編程,這個(gè)分區(qū)通常稱為 bootloader。
OTA(全稱 Over The Air Technology,即云端下載技術(shù),也叫做“空中下載技術(shù)”),其基礎(chǔ)是 IAP 技術(shù), 可以簡(jiǎn)單理解為 IAP 的另一種實(shí)現(xiàn)方式,通常采用的是無線升級(jí)方式(串口、CAN 等屬于“直接線控升級(jí)”),如通過藍(lán)牙近距離無線升級(jí)、ESP8266 網(wǎng)絡(luò)升級(jí)等
IAP 技術(shù)方案
關(guān)于 ISP 技術(shù)這里不過多介紹,有興趣的朋友可以自己找資料看看。
在實(shí)現(xiàn) IAP 技術(shù)時(shí),針對(duì)通過 bootloader 更新 app 程序通常會(huì)有多種實(shí)現(xiàn)方式,可不僅僅只是 Flash 劃分兩個(gè)分區(qū),然后用 bootloader 對(duì) app 分區(qū)編程這一種方式。
劃分兩個(gè)分區(qū),只有bootloader和app分區(qū),這個(gè)是最簡(jiǎn)單也是最基本的功能;而在實(shí)際產(chǎn)品開發(fā)過程中,需要考慮多種因素和需求,如:升級(jí)失敗了該怎么辦?想恢復(fù)出廠的版本怎么辦?等等一系列的問題。
開發(fā)IAP時(shí),最基本的功能就是要有接收新程序的通信協(xié)議(用來接收固件程序,以下簡(jiǎn)稱通信協(xié)議棧),下面介紹幾種常見的實(shí)現(xiàn)方式:
bootloader 程序集成通信協(xié)議棧
以下方案是由 bootlodaer 集成通信協(xié)議棧,編程操作均在 bootloader 中實(shí)現(xiàn),APP 程序中基本不涉及編程操作。
優(yōu)點(diǎn):在沒有 APP 程序或者 APP 程序異常的時(shí)候也能更新程序
缺點(diǎn):bootloader 相對(duì)復(fù)雜,且程序 Flash 占用空間大
方案一:更新程序時(shí),發(fā)送升級(jí)指令給到 MCU ,MCU 通過復(fù)位或者跳轉(zhuǎn)的方式進(jìn)入 bootloader 中,bootloader 首先擦除當(dāng)前 APP 程序后,開始接收新的 APP 程序并直接寫入 APP 分區(qū)中。
| booloader Flash | app Flash |
方案二:更新程序時(shí),發(fā)送升級(jí)指令給到 MCU ,MCU 通過復(fù)位或者跳轉(zhuǎn)的方式進(jìn)入 bootloader 中,bootloader 不會(huì)擦除當(dāng)前 APP 程序,而是將接收到的新 APP 程序?qū)懭雱澐趾玫目瞻?Flash 中,等全部接收完成并校驗(yàn)成功時(shí),才開始擦除當(dāng)前 APP 程序,并將接收完成的新 APP 程序?qū)懭搿?/p>
| booloader Flash | app Flash | 空白Flash |
方案三:更新程序時(shí),發(fā)送升級(jí)指令給到 MCU ,MCU 通過復(fù)位或者跳轉(zhuǎn)的方式進(jìn)入 bootloader 中,bootloader 不會(huì)擦除當(dāng)前 APP 程序(APP1),而是將接收到的新 APP 程序?qū)懭胍巡脸?APP2 中,等全部接收完成并校驗(yàn)成功時(shí),將 APP1 程序有效標(biāo)志清除,設(shè)置 APP2 程序有效標(biāo)志,bootloader 根據(jù)有效標(biāo)志選擇需要進(jìn)入的 APP 程序 (同理:APP2下次更新程序時(shí),先擦除 APP1 的無效程序,然后將接收的程序?qū)懭?APP1,接收完成并互轉(zhuǎn)有效標(biāo)志)。
| booloader Flash | app1 Flash | app2 Flash |
App 程序集成通信協(xié)議棧
以下方案是由 app 集成通信協(xié)議棧,編程操作在 bootloader 程序中和 APP 程序中基本都涉及;且以下方案至少需要?jiǎng)澐秩龎K區(qū)域。
優(yōu)點(diǎn):bootloader 程序 Flash 占用空間小。
缺點(diǎn):在沒有 APP 程序的情況下無法實(shí)現(xiàn)更新,且 Flash 容量需求大;由于 APP 程序迭代快,可能容易出現(xiàn) bug,無法對(duì)程序進(jìn)行更新。
方案四:更新程序時(shí),app 開始接收新的 APP 程序并直接寫入劃分好的空白 Flash 中,等全部接收完成并校驗(yàn)成功時(shí),通過復(fù)位或者跳轉(zhuǎn)的方式進(jìn)入 bootloader 中,由 bootloader 開始擦除當(dāng)前 APP 程序(可能有朋友要問,為啥不能在 app 程序中實(shí)現(xiàn)呢?請(qǐng)問你能踩著左右腳上天嗎!),并將接收完成的新 APP 程序?qū)懭耄ù朔桨?APP 和 bootloader 均涉及編程操作)。
| booloader Flash | app Flash | 空白Flash |
方案五:更新程序時(shí),app 開始接收新的 APP 程序并直接寫入已擦除的 APP2 中,等全部接收完成并校驗(yàn)成功時(shí),將 APP1 程序有效標(biāo)志清除,設(shè)置 APP2 程序有效標(biāo)志,復(fù)位后,bootloader 根據(jù)有效標(biāo)志選擇需要進(jìn)入的 APP 程序 (同理:APP2下次更新程序時(shí),先擦除 APP1 的無效程序,然后將接收的程序?qū)懭?APP1,接收完成并互轉(zhuǎn)有效標(biāo)志)(此方案只有 APP 涉及編程操作)
| booloader Flash | app1 Flash | app2 Flash |
總結(jié)
其中:
方案三和方案五由于程序運(yùn)行地址不同,因此需要對(duì) APP 分別進(jìn)行編譯鏈接,可應(yīng)用性大打折扣。
OTA 升級(jí)由于采用的無線升級(jí)方式,因此相對(duì)于“直接線控升級(jí)”來說斷連的可能性較高,出錯(cuò)的情況也較高,不適合 MCU 每次接收完一幀數(shù)據(jù)后立馬寫入。
-
ISP
+關(guān)注
關(guān)注
6文章
492瀏覽量
52957 -
bootloader
+關(guān)注
關(guān)注
2文章
238瀏覽量
46547 -
IAP技術(shù)
+關(guān)注
關(guān)注
0文章
7瀏覽量
7032
發(fā)布評(píng)論請(qǐng)先 登錄
基于IAP和Keil MDK的遠(yuǎn)程升級(jí)設(shè)計(jì)
STM32 IAP在線升級(jí)
IAP升級(jí)的相關(guān)資料分享
如何為STM32寫bootloader實(shí)現(xiàn)IAP升級(jí)?
有線IAP用戶程序升級(jí)的一些心得分享
【應(yīng)用筆記】CS32L010 IAP 升級(jí)
【應(yīng)用筆記】CS32F03x IAP 升級(jí)
基于IAP遠(yuǎn)程升級(jí)技術(shù)在空間應(yīng)用系統(tǒng)解決方案

MCU之IAP升級(jí)

STM32F030芯片的IAP升級(jí)

STM32的IAP升級(jí)APP

評(píng)論