?? 技術干貨分享 | 點擊上方藍色字體了解更多的嵌入式編程實用技能
?? 如果覺得該文章對你有幫助,歡迎點贊+關注
在嵌入式開發的世界里,IAP(In Application Programming,應用內編程) 技術是每個工程師都需要掌握的核心技能之一。與傳統的 ISP(In System Programming,系統內編程) 不同,IAP 技術為我們提供了一種更加靈活和實用的固件更新方案。
| 編程方式 | ||
| 典型工具 | ||
| 靈活性 |
OTA(Over The Air Technology,空中下載技術) 則是 IAP 技術的無線升級實現方式,通過藍牙、WiFi等無線通信方式實現固件的遠程更新,大大提升了產品的可維護性和用戶體驗。
在實際產品開發中,IAP 技術的實現遠比簡單的"兩個分區"復雜得多。我們需要考慮:
開發 IAP 時,通信協議棧(用于接收固件程序)是最基礎也是最重要的組件。下面我們來看看幾種主流的實現方案:
以下方案由 Bootloader 集成通信協議棧,所有編程操作均在 Bootloader 中實現,APP 程序基本不涉及編程操作。
工作流程:
┌─────────────────┬─────────────────┐
│ Bootloader │ APP │
│ Flash │ Flash │
└─────────────────┴─────────────────┘?? 風險提示:升級過程中斷電可能導致設備變磚!
工作流程:
┌─────────────────┬─────────────────┬─────────────────┐
│ Bootloader │ APP │ 空白Flash │
│ Flash │ Flash │ │
└─────────────────┴─────────────────┴─────────────────┘? 優勢:升級失敗時原程序仍然可用,安全性更高!
工作流程:
┌─────────────────┬─────────────────┬─────────────────┐
│ Bootloader │ APP1 │ APP2 │
│ Flash │ Flash │ Flash │
└─────────────────┴─────────────────┴─────────────────┘?? 最佳實踐:這是最安全可靠的方案,但需要雙倍 Flash 空間!
以下方案由 APP 集成通信協議棧,編程操作在 Bootloader 和 APP 程序中都有涉及,且至少需要劃分三塊區域。
工作流程:
┌─────────────────┬─────────────────┬─────────────────┐
│ Bootloader │ APP │ 空白Flash │
│ Flash │ Flash │ │
└─────────────────┴─────────────────┴─────────────────┘?? 為什么不能在 APP 中直接寫入?
就像你不能"踩著左右腳上天"一樣,程序無法在運行的同時修改自己!
工作流程:
┌─────────────────┬─────────────────┬─────────────────┐
│ Bootloader │ APP1 │ APP2 │
│ Flash │ Flash │ Flash │
└─────────────────┴─────────────────┴─────────────────┘?? 特點:只有 APP 涉及編程操作,Bootloader 只負責啟動選擇!
| 方案一 | ||||
| 方案二 | ||||
| 方案三 | ||||
| 方案四 | ||||
| 方案五 |
方案三 和 方案五 由于程序運行地址不同,需要對 APP 分別進行編譯鏈接,可應用性大打折扣。
OTA 升級采用無線方式,相比"直接線控升級":
IAP/OTA 技術是現代嵌入式產品不可或缺的功能,選擇合適的方案需要綜合考慮:
?? 互動話題:你在項目中用過哪種 IAP 方案?遇到過哪些坑?歡迎在評論區分享你的經驗!
如果這篇文章對你有幫助,請點贊?? + 關注?? + 轉發??
你的支持是我持續分享的動力!