• 正文
  • 相关推荐
申请入驻 产业图谱

嵌入式IAP/OTA升级技术详解:从原理到实践

09/09 14:33
1392
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

 

嵌入式开发的世界里,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. 发送升级指令 → MCU2. MCU 复位/跳转 → 进入 Bootloader3. ? Bootloader 擦除当前 APP 程序4. 接收新 APP 程序 → 直接写入 APP 分区
┌─────────────────┬─────────────────┐
│ ? Bootloader ? ?│ ? ? ?APP ? ? ? ?│
│ ? ? Flash ? ? ? │ ? ? Flash ? ? ? │
└─────────────────┴─────────────────┘

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


方案二:缓冲式更新

工作流程:

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

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


方案三:双APP交替更新

工作流程:

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

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


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

方案特点

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

? 优点

空间节省:Bootloader 程序 Flash 占用空间小?

开发效率:APP 程序迭代快,功能丰富

? 缺点

依赖性强:没有 APP 程序时无法实现更新?

成本较高:Flash 容量需求大?

风险较高:APP 程序迭代快,容易出现 bug,影响更新功能


方案四:APP 接收 + Bootloader 写入

工作流程:

    1. 发送升级指令 → MCU2. APP 开始接收新程序 → 写入空白 Flash3. ? 校验成功后 → 复位/跳转进入 Bootloader4. ? Bootloader 擦除当前 APP 程序5. Bootloader 将新程序写入 APP 分区
┌─────────────────┬─────────────────┬─────────────────┐
│ ? Bootloader ? ?│ ? ? ?APP ? ? ? ?│ ? ?空白Flash ? ?│
│ ? ? Flash ? ? ? │ ? ? Flash ? ? ? │ ? ? ? ? ? ? ? ? │
└─────────────────┴─────────────────┴─────────────────┘

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


方案五:APP 完全自主更新

工作流程:

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

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


方案对比总结

方案选择建议

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

?? 重要注意事项

编译链接问题

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

OTA 升级特殊考虑

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

断连风险高:网络不稳定可能导致升级中断?

出错概率大无线传输更容易出现数据错误?

不适合实时写入:不建议 MCU 每接收一帧数据就立即写入

最佳实践建议

1.?? 安全第一:优先选择双APP方案(方案三/五)

2.? 空间优化:根据产品需求平衡安全性和成本

3.? 容错设计:实现断点续传和校验机制

4.? 状态监控:添加升级进度和状态反馈


结语

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

产品定位:消费级 vs 工业级

成本预算:Flash 容量 vs 功能需求

安全要求:可靠性 vs 开发复杂度

用户体验:升级成功率 vs 操作便利性

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

相关推荐