当前位置: 首页 > news >正文

STM32F103_Bootloader程序开发01 - 什么是IAP?跟OTA有什么关系?

导言


这是一个做bootloader程序开发经常会遇到的疑问。IAP 和 OTA 都和固件升级相关,但不是同一个概念,它们之间有交集,但又各自有特定的应用场景。

一、什么是IAP(In-Application Programming)?


IAP,中文一般称为“应用程序内编程”或“在应用中自编程”。本质含义:MCU 在运行用户代码(App或Bootloader)时,通过自身的代码(而不是用外部编程器/仿真器)来擦写和更新片上 Flash 内容。 典型的应用场景:在系统上线后,通过串口、CAN、USB、以太网等接口下载新固件,并写入指定Flash区,完成固件升级。
在这里插入图片描述
实际场景:工程师用串口工具将固件下载到MCU,MCU通过IAP代码将固件烧写到App区。

二、 什么是OTA(Over-The-Air,空中下载/升级)?


OTA,直译就是“空中下载”或者“远程升级”。本质含义:利用无线通信(如WiFi、蓝牙、NB-IoT、4G/5G等),将新固件从服务器下载到设备,再进行固件升级。
在这里插入图片描述
实际场景:产品上线后,用户用手机APP或者设备自己通过WiFi下载新固件,MCU下载完成后,通过IAP流程将固件写入App区。

三、IAP跟OTA有什么关系?


  • IAP 是一种升级机制/技术,它是固件升级的基础能力,让MCU可以自我更新程序。
  • OTA 是一种升级方式/场景,它是一套“如何把新固件送到设备”+“触发升级流程”的完整解决方案,实现的底层依赖于IAP。
    在这里插入图片描述
    总的来说:
  • OTA = 固件无线传输 + 本地IAP写入
  • IAP 可以独立使用,比如通过串口/USB升级(有线IAP)。
  • OTA 一定要依赖IAP,否则固件即使下载下来,MCU也无法自我刷新。

四、Bootloader跟IAP又是什么关系?


4.1、Bootloader是什么?

Bootloader(引导加载程序),是上电后第一个运行的程序,主要负责以下几个任务:

  • 系统初始化(最小外设/时钟/内存等)
  • 判断启动条件(决定启动App,还是进入升级模式)
  • 稳定地加载、校验和跳转到主应用(App)
  • 实现固件升级流程(IAP)
  • 有时还提供如参数恢复、生产测试等功能

它是设备“最后一道自救保险”。只要Bootloader没被破坏,哪怕App区彻底损坏,仍然能远程/本地恢复设备,防止“变砖”。 在STM32系统里,Bootloader一般烧录在Flash的最前面一段区域(比如0x08000000~0x0800FFFF),具有独立的启动入口。

4.2、跟IAP的关系

Bootloader是IAP机制的载体,IAP功能一般是由Bootloader来实现的。 为什么不能在App上实现IAP?原因:

  • 安全性:Bootloader天然具备更高的安全级别,避免因App异常导致升级流程失控。
  • 健壮性:即使App区损坏,Bootloader仍可正常进入升级模式,保证设备可恢复。
  • 一致性:升级校验(如CRC、签名)由Bootloader统一处理,避免不同版本App间实现差异导致升级不兼容。
  • 启动机制:Bootloader能根据升级状态决定“升级 or 跳转App”,流程更清晰。
http://www.xdnf.cn/news/609607.html

相关文章:

  • 关于 Web 风险点原理与利用:6. 逻辑风险点
  • 跨平台三维可视化与图形库.VTK图形库.
  • CATIA高效工作指南——常规配置篇(三)
  • SAP在化工行业的数字化转型:无锡哲讯科技的赋能实践
  • 微气象在线监测装置:精准感知环境变化的科技之眼
  • win32相关(句柄表)
  • 【Mini-F5265-OB开发板试用测评】2、关于platform.c中的串口号初始化修改的建议
  • GO语言学习(九)
  • Flask项目打开总是上一个项目的网页
  • 短视频与直播场景下的美颜SDK优化方案:滤镜与特效如何平衡性能与美感?
  • 精益数据分析(80/126):病毒式传播系数实战计算与增长策略优化
  • 中电金信X中远海科推出“银航宝”解决方案,共绘航运金融新图景
  • Python Scikit-Learn核心流程
  • Vue3中的TSX:用函数式思维构建现代组件的实践指南
  • 基于vite构建的vue项目添加路由时注意要利用import.meta.glob映射构建生成后的路径
  • 计算机网络学习(三)——HTTP
  • 详解Mysql的快照读和当前读区别
  • 基于BERT预训练模型(bert_base_chinese)训练中文文本分类任务(AI老师协助编程)
  • 25年上半年五月之软考之设计模式
  • Linux基本指令(二)
  • 【Linux】基础开发工具(下)
  • Android正则表达式
  • Android中ServiceManager与Binder驱动的关系
  • java 进阶 1.0.3
  • 使用 Elasticsearch 和 Red Hat OpenShift AI 提升工作流程效率
  • C#日期和时间:DateTime转字符串全面指南
  • leetcode513.找树左下角的值:递归深度优先搜索中的最左节点追踪之道
  • Typescript学习教程,从入门到精通,TypeScript 集合类型语法知识点及案例代码(11)
  • 前缀和数组一文详解
  • Vue3.5 企业级管理系统实战(二十):角色菜单