几种嵌入式IAP/OTA升级方案对比!

strongerHuang 2025-09-08 20:00

 

关注+星标公众,不错过精彩内容

转自 | 大橙子疯嵌入式


嵌入式开发具备IAP/OTA功能,已经成为大多数产品的标配,今年来聊聊IAP和OTA几种方案并进行对比!


📖 前言

在嵌入式开发的世界里,IAP(In Application Programming,应用内编程) 技术是每个工程师都需要掌握的核心技能之一。与传统的 ISP(In System Programming,系统内编程) 不同,IAP 技术为我们提供了一种更加灵活和实用的固件更新方案。

🔍 技术对比

技术类型
ISP
IAP
编程方式
通过专业调试器/下载器
在应用中对其他分区编程
典型工具
JTAG、SWD等
Bootloader
灵活性
需要外部工具
可远程更新

OTA(Over The Air Technology,空中下载技术) 则是 IAP 技术的无线升级实现方式,通过蓝牙、WiFi等无线通信方式实现固件的远程更新,大大提升了产品的可维护性和用户体验。


🚀 IAP 技术方案深度解析

在实际产品开发中,IAP 技术的实现远比简单的"两个分区"复杂得多。我们需要考虑:

  • • ❓ 升级失败怎么办?
  • • ❓ 如何恢复出厂版本?
  • • ❓ 如何保证升级的可靠性?
  • • ❓ 如何优化存储空间使用?

📡 通信协议栈的重要性

开发 IAP 时,通信协议栈(用于接收固件程序)是最基础也是最重要的组件。下面我们来看看几种主流的实现方案:

🎯 一:Bootloader 集成通信协议栈

📋 方案特点

以下方案由 Bootloader 集成通信协议栈,所有编程操作均在 Bootloader 中实现,APP 程序基本不涉及编程操作。

✅ 优点

  • • 🛡️ 高可靠性:即使没有 APP 程序或 APP 程序异常时也能更新
  • • 🔧 独立性强:Bootloader 完全独立,不依赖 APP 状态

❌ 缺点

  • • 📦 占用空间大:Bootloader 相对复杂,Flash 占用空间较大
  • • 🔄 开发复杂:需要维护两套通信协议

🔄 方案一:直接覆盖式更新

工作流程:

  1. 1. 📨 发送升级指令 → MCU
  2. 2. 🔄 MCU 复位/跳转 → 进入 Bootloader
  3. 3. 🗑️ Bootloader 擦除当前 APP 程序
  4. 4. 📥 接收新 APP 程序 → 直接写入 APP 分区
┌─────────────────┬─────────────────┐
│   Bootloader    │      APP        │
│     Flash       │     Flash       │
└─────────────────┴─────────────────┘

⚠️ 风险提示:升级过程中断电可能导致设备变砖!


🔄 方案二:缓冲式更新

工作流程:

  1. 1. 📨 发送升级指令 → MCU
  2. 2. 🔄 MCU 复位/跳转 → 进入 Bootloader
  3. 3. 📥 接收新 APP 程序 → 写入空白 Flash
  4. 4. ✅ 校验成功后 → 擦除旧 APP → 写入新 APP
┌─────────────────┬─────────────────┬─────────────────┐
│   Bootloader    │      APP        │    空白Flash    │
│     Flash       │     Flash       │                 │
└─────────────────┴─────────────────┴─────────────────┘

✅ 优势:升级失败时原程序仍然可用,安全性更高!


🔄 方案三:双APP交替更新

工作流程:

  1. 1. 📨 发送升级指令 → MCU
  2. 2. 🔄 MCU 复位/跳转 → 进入 Bootloader
  3. 3. 📥 接收新 APP 程序 → 写入 APP2
  4. 4. ✅ 校验成功后 → 清除 APP1 有效标志 → 设置 APP2 有效标志
  5. 5. 🔄 下次更新时 → 擦除 APP1 → 写入新程序到 APP1 → 切换标志
┌─────────────────┬─────────────────┬─────────────────┐
│   Bootloader    │     APP1        │     APP2        │
│     Flash       │     Flash       │     Flash       │
└─────────────────┴─────────────────┴─────────────────┘

🎯 最佳实践:这是最安全可靠的方案,但需要双倍 Flash 空间!


🎯 二:APP 程序集成通信协议栈

📋 方案特点

以下方案由 APP 集成通信协议栈,编程操作在 Bootloader 和 APP 程序中都有涉及,且至少需要划分三块区域。

✅ 优点

  • • 💾 空间节省:Bootloader 程序 Flash 占用空间小
  • • 🚀 开发效率:APP 程序迭代快,功能丰富

❌ 缺点

  • • ⚠️ 依赖性强:没有 APP 程序时无法实现更新
  • • 💰 成本较高:Flash 容量需求大
  • • 🐛 风险较高:APP 程序迭代快,容易出现 bug,影响更新功能

🔄 方案四:APP 接收 + Bootloader 写入

工作流程:

  1. 1. 📨 发送升级指令 → MCU
  2. 2. 📥 APP 开始接收新程序 → 写入空白 Flash
  3. 3. ✅ 校验成功后 → 复位/跳转进入 Bootloader
  4. 4. 🗑️ Bootloader 擦除当前 APP 程序
  5. 5. 📝 Bootloader 将新程序写入 APP 分区
┌─────────────────┬─────────────────┬─────────────────┐
│   Bootloader    │      APP        │    空白Flash    │
│     Flash       │     Flash       │                 │
└─────────────────┴─────────────────┴─────────────────┘

🤔 为什么不能在 APP 中直接写入?
就像你不能"踩着左右脚上天"一样,程序无法在运行的同时修改自己!


🔄 方案五:APP 完全自主更新

工作流程:

  1. 1. 📨 发送升级指令 → MCU
  2. 2. 📥 APP 接收新程序 → 写入 APP2
  3. 3. ✅ 校验成功后 → 清除 APP1 有效标志 → 设置 APP2 有效标志
  4. 4. 🔄 复位后 → Bootloader 根据标志选择启动 APP
┌─────────────────┬─────────────────┬─────────────────┐
│   Bootloader    │     APP1        │     APP2        │
│     Flash       │     Flash       │     Flash       │
└─────────────────┴─────────────────┴─────────────────┘

💡 特点:只有 APP 涉及编程操作,Bootloader 只负责启动选择!


📊 方案对比总结

🎯 方案选择建议

方案
适用场景
Flash需求
安全性
开发复杂度
方案一
简单应用
⭐⭐
方案二
一般产品
⭐⭐⭐
⭐⭐
方案三
高可靠性产品
⭐⭐⭐⭐⭐
⭐⭐⭐
方案四
成本敏感产品
⭐⭐⭐
⭐⭐⭐
方案五
高端产品
⭐⭐⭐⭐
⭐⭐⭐⭐

⚠️ 重要注意事项

🔧 编译链接问题

方案三 和 方案五 由于程序运行地址不同,需要对 APP 分别进行编译链接,可应用性大打折扣

📡 OTA 升级特殊考虑

OTA 升级采用无线方式,相比"直接线控升级":

  • • 📶 断连风险高:网络不稳定可能导致升级中断
  • • 🐛 出错概率大:无线传输更容易出现数据错误
  • • ⏱️ 不适合实时写入:不建议 MCU 每接收一帧数据就立即写入

💡 最佳实践建议

  1. 1. 🛡️ 安全第一:优先选择双APP方案(方案三/五)
  2. 2. 📦 空间优化:根据产品需求平衡安全性和成本
  3. 3. 🔄 容错设计:实现断点续传和校验机制
  4. 4. 📊 状态监控:添加升级进度和状态反馈

🎉 结语

IAP/OTA 技术是现代嵌入式产品不可或缺的功能,选择合适的方案需要综合考虑:

  • • 🎯 产品定位:消费级 vs 工业级
  • • 💰 成本预算:Flash 容量 vs 功能需求
  • • 🛡️ 安全要求:可靠性 vs 开发复杂度
  • • 📱 用户体验:升级成功率 vs 操作便利性

💬 互动话题:你在项目中用过哪种 IAP 方案?遇到过哪些坑?欢迎在评论区分享你的经验!

------------ END ------------


资讯配图

●专栏《嵌入式工具

●专栏《嵌入式开发》

●专栏《Keil教程》

●嵌入式专栏精选教程


关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

点击“阅读原文”查看更多分享。

声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。 
嵌入式
more
RTOS与Linux融合,是嵌入式行业的大趋势
2025年全球嵌入式MPU市场规模、未来潜力及应用前景
下周二开幕|《观展攻略》一键收藏!深圳国际电子展暨嵌入式展8月26-28日福田会展中心盛大启幕!
90个嵌入式工程师需要掌握的基本概念
嵌入式代码参数管理框架(C语言)
嵌入式项目,你用现成软硬件模块,还是从0造轮子?
2025嵌入式开发前景的几个方向!
HDI技术爆发!嵌入式设备为何越做越小却越来越强?
听众抢票|高通、瑞萨、火山引擎、研华、雷赛智能等30+技术专家共聚嵌入式大会,热议嵌入式AI、边缘智能与具身智能
【北京 西安】TI嵌入式实验室免费培训:AI加速ADAS、AI DSP、多协议无线、精密电机控制等 | 即将开讲,预报从速!)
Copyright © 2025 成都区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号