多种适用于 MCU 固件的 OTA 升级方案

大家就当看个乐。

Bootloader + A区方案

设计说明

● 存储分区:

○ Bootloader区:存储引导加载程序,负责启动流程、固件验证和升级逻辑。

○ A区:存储应用程序固件,运行时由Bootloader跳转到A区执行。
● 升级流程:

a. Bootloader接收新固件(通过串口、CAN、OTA等方式)。

b. 新固件直接写入A区,覆盖原有固件。

c. Bootloader验证新固件(例如通过CRC或哈希校验)。

d. 验证通过后,重启并跳转到A区运行新固件。
优势

● 简单性:设计简单,存储分区少,Bootloader逻辑清晰,易于实现。

● 存储效率高:只需要Bootloader和A区,适合Flash空间有限的MCU。
劣势

● 无回滚机制:升级失败(如新固件损坏或不完整)会导致系统不可用,需通过外部工具恢复。

● 升级风险高:直接覆盖A区,若升级中断(掉电等),可能导致设备变砖。

Bootloader + A区 + 缓存区

设计说明

存储分区

○ Bootloader区:负责启动、固件验证和升级管理。

○ A区:存储当前运行的应用程序固件。

○ 缓存区:临时存储新固件,升级前进行完整性验证。
● 升级流程:

a. Bootloader接收新固件并存储到缓存区。

b. 在缓存区完成新固件的完整性验证(CRC、MD5等)。

c. 验证通过后,将缓存区内容复制到A区。

d. 重启并跳转到A区运行新固件。
优势

● 升级安全性提升:新固件先存储到缓存区,验证后再覆盖A区,降低升级失败风险。

● 支持完整性检查:缓存区允许在写入A区前进行完整性验证,减少无效固件覆盖风险。
劣势

● 存储开销大:需要额外的缓存区,占用Flash空间,通常需要Flash容量是固件大小的2倍以上。

● 无回滚机制:升级失败后仍无法回滚到旧固件,需外部恢复。

● 升级时间较长:需要先写入缓存区再复制到A区,增加了升级耗时。

Bootloader + A区 + B区

设计说明

● 存储分区:

○ Bootloader区:负责启动、固件验证、升级管理和分区切换逻辑。

○ A区:存储当前运行的应用程序固件。

○ B区:存储备用固件(新固件或旧固件),用于升级或回滚。
● 升级流程:

a. Bootloader接收新固件并写入B区(假设A区为当前运行固件)。

b. 在B区完成新固件的完整性验证。

c. 验证通过后,Bootloader更新启动标志,标记B区为活动分区。

d. 重启并跳转到B区运行新固件。

e. 若新固件运行失败,Bootloader可切换回A区(回滚)。
优势

● 支持回滚:A区和B区可互为备份,升级失败可回滚到旧固件,大幅提升可靠性。

● 高可靠性:新固件在B区验证通过后再切换,降低变砖风险。

● 支持无缝升级:升级过程不影响当前运行(A区),适合高可用性场景。
劣势

● 存储开销大:需要两倍应用程序大小的Flash空间,适合Flash容量较大的MCU。

● 开发复杂性高:Bootloader需实现分区切换、状态管理和回滚逻辑,开发和测试成本较高。

● 升级时间较长:需要完整写入B区并验证,耗时较多。

目前项目中使用的是第三种方式,已经实现,分区如下:

区域 起始地址 结束地址 大小 用途

Bootloader 0x08000000 0x08007FFF 32KB 引导程序

回退标志存储区 0x08008000 0x080087FF 2KB 集中回退标志

选择标志存储区 0x08008800 0x08008FFF 2KB 选择运行区域

A 区程序 0x08009000 0x08026FFF 120KB 应用程序 A(主版本)

B 区程序 0x08027000 0x08044FFF 120KB 应用程序 B(备份版本)

升级协议及代码后续慢慢更新,等我。

相关推荐
可爱的鸡仔18 小时前
STM32--------ADC转换
stm32·单片机·嵌入式
来生硬件工程师18 小时前
【STM32笔记】:P04 断言的使用
c语言·笔记·stm32·单片机·嵌入式硬件·硬件架构·硬件设计
江苏学蠡信息科技有限公司19 小时前
STM32中硬件I2C的时钟占空比
stm32·单片机·fpga开发
光子物联单片机19 小时前
STM32G474单片机开发入门(十七)DAC详解及输出电压和正弦波实战
stm32·单片机·嵌入式硬件·mcu
DIY机器人工房19 小时前
【嵌入式面试题】STM32F103C8T6 完整元器件解析 + 面试问题答案
stm32·单片机·面试·嵌入式·面试题·diy机器人工房
日更嵌入式的打工仔20 小时前
嵌入式入门:APP+BSP+HAL 三层分级架构浅析
笔记·单片机·嵌入式硬件·学习
优信电子1 天前
基于STM32F103驱动AS5600读取磁体旋转的模拟量/角度数据
stm32·单片机·嵌入式硬件·as5600·磁编码器·磁角度传感器
点灯小铭1 天前
基于单片机的PWM三基色LED灯控制器设计与无线调色系统
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
Vae_Mars1 天前
单片机中的TVS管
单片机·嵌入式硬件
hazy1k1 天前
51单片机基础-直流电机控制
stm32·单片机·嵌入式硬件·51单片机