一文读懂OTA差分升级
出处:网络整理 发布于:2026-06-03 14:33:57

Bootloader 单区升级
单区 bootloader 通常会将芯片内部的 Flash 主要划分为 bootloader 区、APP 区和参数区。bootloader 用于引导程序,APP 扇区用于存放升级后的应用程序,参数区则用于存储特殊的参数。具体的扇区大小可以根据实际使用情况进行合理划分。单区升级的典型模型如下:

芯片上电后,首先从首地址即 bootloader 开始执行,当参数校验无误后,程序跳转到 APP 扇区。若有升级请求,程序会跳转到首地址,在 bootloader 中接收新的固件,然后将 APP 区擦除。在新固件参数校验成功后,程序将从 bootloader 跳转到 APP 区执行应用程序,从而完成固件的升级。
【应用场景】
在擦除 APP 区的过程中,如果设备突然断电,会导致 APP 区的应用程序无法启动。此时,虽然可以重新跳转到 bootloader 接收新的固件,进而完成固件的升级,但这也会带来一些不必要的麻烦,比如设备需要多次写入固件。因此,这种升级算法只适用于本地升级,不能在程序正常运行的过程中进行升级,通常适用于 Flash 容量较小的场景。
Bootloader 双区升级
【双区升级模型】
以 ZLG116 芯片为例,该芯片内部主 Flash 大小为 64K (0x0800_0000 - 0x0800_FFFF),主要将 Flash 划分为四个部分:bootloader 段扇区、应用段扇区、升级扇区(备份区)、升级标志扇区。其中,bootloader 用于引导程序;应用扇区用于存放升级后的应用程序;升级扇区用于存储新的固件,作为备份;升级标志扇区用于存储特定的标志等。用户可以根据自身的实际应用情况合理划分各区的大小,双区升级的典型模型如下所示:

按照上述的 ZLG116 Flash 划分,程序首先从地址为 0x08000000,即 bootloader 开始执行,参数校验通过后,跳转到应用区。在接收到升级需求后,先将新的固件写入起始地址为 0x0800FC00 的备份区,并擦除 APP 扇区。接着将备份区存储的新固件写入到 bootloader 中,从而完成新固件的写入。若在擦除 APP 区的过程中受到其他因素的干扰,用户可以再次将备份区的固件写入 bootloader。新固件的参数校验通过后,程序从 bootloader 跳转到起始地址为 0x08003C00 的 APP 区执行应用代码。
【应用场景】
相比于单区升级,双区升级的模型增加了一块备份扇区,用于存放新的固件。因此,即使在擦除 APP 的时候设备发生断电,双区升级也无需再次在 bootloader 中接收新固件,只需将备份区存储的固件传入到 bootloader 即可。不过,这种升级方式虽然可以避免单区升级只能在本地升级的困扰,但无法降低传输固件的流量,不适用于开发板内存空间较小的场景。并且,双区升级需要对整个 APP 进行升级,这给产品升级带来了一些不便。
Bootloader 差分升级
【差分包原理】
差分升级是将新老固件具有差异的部分剥离出来。例如,固件从 V1.1.0 升级到 V1.1.1,两个固件相比只修改了 1K 的内容,如下图红色部分为不同部分,将该部分剥离出来生成差分包 Diff_V1.1.0~V1.11,通过云端将差分包推送到设备端,设备端接收完成之后,先解压差分包,再通过差分恢复算法,根据差分包中的数据标志,将新老固件进行融合,变成新的固件,从而完成升级。

以基于华大 HC32L196 芯片设计差分升级为例,该芯片 Flash 为 256K(0x000_0000~0x0003_FFFF),首先需要对 Flash 进行划分,主要划分为 4 个部分:BootLoader 区、应用区、download 区、参数区。BootLoader 区用于引导升级,应用区为升级后的应用程序,download 区为差分包存储区间,参数区用于存储特定参数。各区大小按照实际使用情况进行合理划分。差分升级的典型模型如下所示:

按照图 5 所示的升级模型,设备上电后首先从 bootloader 开始执行,参数无误后跳转到应用区。当有升级的需求时,先擦除 APP 区,并将新老固件进行分包,然后按顺序对分包后的新老固件对应的每个小块进行差分压缩,将所有的压缩包合并成一个文件,形成了升级的固件。将新的升级固件存放在 download 扇区,然后将该固件写入 bootloader 中,若固件参数校验无误,则跳到应用区执行后续的程序,进而完成产品的升级。
【应用场景】
差分升级的优点十分显著,它的升级固件更小、速度更快,也更加节省内存空间。然而,相对于整包升级方式(单区升级 / 双区升级),其缺点是依赖特定固件。例如,某一差分包为 V1.0 固件升级到 V1.1 固件的差分包 Diff_V1.0~V1.1,则该差分包只能用于升级版本号是 V1.0 固件的设备;对于其他版本号固件的设备不能用它升级。差分升级一般适用于希望降低传输固件的流量,或者开发板内存不足,不依靠特定升级固件的场景中。
版权与免责声明
凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
- 探秘芯片设计 Design Rule 的诞生奥秘2026/7/16 16:11:42
- 一款车规级高集成度、多通道、宽频的数字电容传感芯片 - MC1081A2026/7/10 16:49:33
- 集成 Silent Switcher 与输入断开功能,升压转换器展现卓越性能与可靠防护2026/7/1 15:40:21
- 噪声敏感应用:快速瞬态负电压轨的创新解决方案2026/6/30 16:30:30
- ACM8815:内置 DSP 的 200W 单声道 I2S 数字 D 类功放芯片2026/6/30 16:20:04









