
引言 双存储区功能是多款STM32微控制器的通用特性。本文档旨在描述如何在客户应用中使用此功能。 本应用笔记中涉及的主要内容是现场升级,通过代码示例(X-CUBE-DBFU)介绍。 尽管本文档仅直接描述了STM32L0系列Cat5设备和STM32L4系列的入门系列和USB OTG设备,但具有两个半独立存储器区的其他STM32 MCU也可以共享部分所述属性并采用类似的使用方式。 下列文件可在www.st.com获取,可作为参考: • 参考手册RM0367:“超低功耗STM32L0x3高级的基于ARM®的32位MCU” • 参考手册RM0376:“超低功耗STM32L0x2高级的基于ARM®的32位MCU” • 参考手册RM0377:“超低功耗STM32L0x1高级的基于ARM®的32位MCU” • AN2606应用笔记:“STM32微控制器系统存储器启动模式” • AN4024应用笔记:“STM32安全固件升级(SFU)” • AN4657应用笔记:“使用UART进行STM32L0应用内编程 1 定义 ![]() 2 双存储区用例 在设计使用双存储区设备的应用程序时,可以选择多种方法来使用程序存储器的后半部分。 2.1 大代码 第一种情况是具有代码的应用程序,该代码在单个程序实例中需要使用两个存储器。即使在这种情况下,双存储区方法也可能具备优势。还可以考虑在两个存储区分别加载具有不同功能集的两个程序,实现两种工作模式(其中,主/从、录音机/播放器、发送器/接收器)。 2.2 数据存储 第二存储区特别适用于数据存储(例如:数据记录)。 此时,双存储区可用于使能“同时读写”特性,从而避免在将数据编程到另一存储区时CPU失速。 此方法还可以更轻松、更快速地批量擦除存储在第二存储区的数据。 2.3 代码备份 如果不考虑固件升级场景(即设备不可访问),则第二存储区可用于代码备份。第二存储区可以存储相同的代码,并在闪存轻微损坏的情况下用作备份(例如通过辐射和加热)。 相对而言,通过后续代码完整性检查,响应未处理的异常,较易于执行存储区转换。 作为预防措施,可以定期检查两个副本的完整性,并且,在发生故障的情况下,可以用正确的副本重写有故障的副本。 2.4 双存储现场升级 本应用笔记主要讨论现场升级的目的。 除了AN4657所述的应用内编程标准功能之外,还存在多种优势。使用双存储区方法,所有代码均保存在一个项目中,从而得到单一的二进制码。如此一来,这消除对于那些在应用程序编程期间必须依赖加载程序的设备在有限功能的应用程序中需要加载程序的需要。 传统IAP的典型缺点在于: 1. 加载程序无法执行所有后台任务 2. 加载程序无法升级或修复 3. 如果在升级过程中发生故障,设备可能保存在加载程序模式 4. 如果发生问题,无需回滚至之前的版本。 通过正确使用双存储区方法,可以应对和解决所有这些问题。 使用双存储区,所有与其他存储区的操作仅仅只是主程序的另一项任务。由于代码地址范围的内部重新映射,在正常操作期间,两个存储区的二进制码均可以保持相同。 执行现场升级的典型场景请参见 图 1。 ![]() 当存储区1中不存在代码时,务必保持BFB2标志设置,以确保在意外断电时也可保持安全。 接下来,在复位之后,固件可使用多种方法检测到存储区1的代码必须替换,且程序从存储区2运行。务必执行此决定,即,只有一个二进制代码,且在每次启动时执行此代码。 完整版请查看:附件 |
DM00230416_ZHV1.pdf
下载280.08 KB, 下载次数: 0
STM32 GUI LTDC 最大像素时钟评估方法
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南