嵌入式软件OTA升级固件,解析几种高效FLASH划分策略

嵌入式软件在执行OTA(Over-The-Air,空中升级)进行固件升级时,通常会采用以下几种Flash划分方式:
1. "镜像对方式": - "主镜像(Active Image)":当前正在运行的固件版本。 - "备份镜像(Backup Image)":未激活的备用固件版本。 - 当主镜像出现问题时,系统可以切换到备份镜像继续运行,完成升级后,备份镜像可以被设置为新的主镜像。
2. "双分区方式": - "主分区(Primary Partition)":存放当前激活的固件。 - "备用分区(Secondary Partition)":存放未激活的固件。 - 升级时,系统会将新固件写入备用分区,并在升级完成后切换到新分区。
3. "三分区方式": - "主分区(Primary Partition)":存放当前激活的固件。 - "升级分区(Upgrade Partition)":存放待升级的固件。 - "备份分区(Backup Partition)":作为额外的备份。 - 这种方式可以提供更多的冗余,以防升级失败或主分区损坏。
4. "循环冗余方式": - "当前激活分区(Active Partition)":存放当前激活的固件。 - "下一个激活分区(Next Active Partition)":存放即将激活的固件。 - 当当前

相关阅读延伸:嵌入式软件OTA升级固件时,几种FLASH划分方式

    
嵌入式驱动工程师学习路线
Linux嵌入式知识点-思维导图-免费获取
一个可以写到简历的基于Linux物联网综合项目
简历模版
很多嵌入式硬件设备都集成了OTA功能,以便产品量产后可以通过远程OTA等方式下载的APP应用程序。

在使用带有OTA功能的固件之前,其实还需要提前下载BootLoader程序,才能进一步下载APP程序。
今天就来说说通过OTA方式升级固件时,几种Flash(闪存)划分方式。
独立型

所谓独立型就是专门划出一部分闪存(Flash)空间用来存储引导程序(BootLoader)。
如下图:
Firmware A区用来固定执行应用程序,当引导程序(BootLoader)将接收到的新固件存入到Firmware B区,并校验成功后,Firmware A区中的应用程序将被擦除,然后Firmware B区的新固件将写入到Firmware A区中。
这种方式是比较常见的有一种,有Firmware B备份区,使其下载更加安全。
嵌入型

嵌入型就是将引导程序(BootLoader)嵌入到应用程序中去。
当引导程序(BootLoader)将接收到的新固件存储到Firmware B区,在校验成功后,引导程序(BootLoader)将跳到Firmware B区去执行应用程序。
外挂型

外挂型就是外挂Flash或EEPROM用来存储新固件。
当MCU内置Flash较小时,可以选择外挂存储芯片用来缓存新固件。
引导程序(BootLoader)将新固件存储到外挂存储芯片中,当校验成功后,Firmware A中的应用程序将被擦除,并被写入外挂存储芯片中的新固件。
是不是根据需要,我们可以随意划分MCU的Flash空间呢?
当然不是,由于MCU的内置Flash是以块(Block)或者页(Page)为最小擦除单位,我们划分MCU内置Flash空间时必须考虑到实际MCU的块(Block)或者页(Page)的大小。
现在我们以TMPM3H6FWFG来举例说明“独立型”的Flash划分方式。
从以下规格书中的信息可知,这颗MCU的内置Flash大小为128KB,最小的擦除页(Page)为4KB,最小的擦除块(Block)为32KB。
根据以上信息,我们可以对这颗MCU的内置Flash进行如下划分:
以上只是对固件升级(OTA)中MCU的Flash空间划分简单探讨一下,实际哪种方式更适合,还需要用户自己去评估。
end

ARM
粉丝问答
所有原创
专辑linux入门
专辑计算机网络
专辑Linux驱动
嵌入式驱动工程师学习路线
Linux嵌入式所有知识点-思维导图
发布于 2025-07-24 08:12
收藏
1
上一篇:【ESP32/F03】揭秘ROM、Flash、RAM,存储器的定义与相互关系深度解析 下一篇:制造巨头加速转型,集中存储技术助力,服务器潜力榨干,效率与安全齐飞!