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

MCU之IAP升級

STM32F030芯片的IAP升級

STM32的IAP升級APP

評論