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