如何为STM32F4微控制器的闪存库实现OTA更新故障转移方案?

问题描述 投票:1回答:1

我正在为我的项目使用32位ARM STM32F439ZI微控制器。微控制器具有2兆字节的闪存,分为2个1兆字节的存储区,用于同步读取和写入/擦除,如数据表所示。

我想介绍微控制器的Over The Air(OTA)固件更新。

我使用大约200-400 KB的闪存存储器作为固件。

当然,我只能使用引导加载程序刷新下载更新二进制文件。但是,我想通过使用两个1兆字节闪存库作为故障安全功能来介绍安全网。

例如:

  1. 应用程序将新的OTA固件包下载到外部存储器。
  2. 应用程序将内部闪存(模拟EEPROM)的标志设置为引导加载程序的信息,以从外部存储加载OTA固件包。
  3. 引导加载程序检查哪个“分区”(闪存库A或B)处于活动状态,切换状态并将OTA固件包闪存到刚刚激活的闪存库中。
  4. 引导加载程序重置微控制器。
  5. 引导加载程序检测到存储体B是活动存储体并将其作为固件加载。
  6. 当存在监视程序事件或崩溃时,引导加载程序会检测到寄存器标志并切换到包含先前固件版本的闪存库。

如果使用STM32F4可以实现“双启动”,我找不到资源(有一些关于STM32F7系列的东西,但这被宣传为专用的“功能”)。

STM32F4系列是可行的还是推荐的?有更好的方法吗?以及启动加载程序调度调用(到活动闪存库的主要功能)的方式如何(Ansi C)?

microcontroller stm32 bootloader stm32f4 ansi-c
1个回答
0
投票

我不确定,如果我完全理解“双启动”,但如果它是关于在闪存中有两个版本的固件(当前工作一个要更换和新固件),那么最简单的方法是让在启动OTA之前,bootloader会在闪存的单独区域中备份应用程序固件,但这会减少可用闪存的总量。我的硕士论文(Fail-proof over the air firmware upgrade for embedded systems)是一个非常相似的主题。你可能想看看。

© www.soinside.com 2019 - 2024. All rights reserved.