STMCU小助手
发布时间:2022-7-26 21:45
|
引言 双存储区功能是多款STM32微控制器的通用特性。本文档旨在描述如何在客户应用中使用此功能。 本应用笔记中涉及的主要内容是现场升级,通过代码示例(X-CUBE-DBFU)介绍。 尽管本文档仅直接描述了STM32L0系列Cat5设备和STM32L4系列的入门系列和USB OTG设备,但具有两个半独立存储器区的其他STM32 MCU也可以共享部分所述属性并采用类似的使用方式。9 O: O' C G' g 下列文件可在www.st.com获取,可作为参考:) b2 V% A! ~ ~1 F1 Q* K& O' a • 参考手册RM0367:“超低功耗STM32L0x3高级的基于ARM®的32位MCU”6 h) ~% d% o+ Y& p( ] • 参考手册RM0376:“超低功耗STM32L0x2高级的基于ARM®的32位MCU”* D$ H5 ~, ]5 k/ y5 Z. e+ K • 参考手册RM0377:“超低功耗STM32L0x1高级的基于ARM®的32位MCU” • AN2606应用笔记:“STM32微控制器系统存储器启动模式” • AN4024应用笔记:“STM32安全固件升级(SFU)” • AN4657应用笔记:“使用UART进行STM32L0应用内编程”! Q% f* t( K0 Y( [$ }7 p 1定义 表1. 缩略语列表
2 双存储区用例! i9 n1 H E% x! @3 ` e( c 在设计使用双存储区设备的应用程序时,可以选择多种方法来使用程序存储器的后半部分。 2.1 大代码( |' i8 x/ h, D* {8 J" P3 Q 第一种情况是具有代码的应用程序,该代码在单个程序实例中需要使用两个存储器。. U1 r8 O: x4 @6 G: U L 即使在这种情况下,双存储区方法也可能具备优势。还可以考虑在两个存储区分别加载具有不同功能集的两个程序,实现两种工作模式(其中,主/从、录音机/播放器、发送器/接收器)。 2.2 ( I6 N3 H0 {' r) k( D- l1 ` 数据存储$ y4 A$ h* N1 r' u$ }7 Z# K 第二存储区特别适用于数据存储(例如:数据记录)。 此时,双存储区可用于使能“同时读写”特性,从而避免在将数据编程到另一存储区时CPU失速。 此方法还可以更轻松、更快速地批量擦除存储在第二存储区的数据。: }; r" l! i3 ^2 ^- q! [/ @ 4 Z z9 a2 ]; w' K) i 2.3 代码备份2 N/ g- L8 C9 ~* a) e2 j" b& ?& b4 j 如果不考虑固件升级场景(即设备不可访问),则第二存储区可用于代码备份。第二存储区可以存储相同的代码,并在闪存轻微损坏的情况下用作备份(例如通过辐射和加热)。 相对而言,通过后续代码完整性检查,响应未处理的异常,较易于执行存储区转换。- Q( ^# ?: m* { W( [2 V/ o# v8 _ 作为预防措施,可以定期检查两个副本的完整性,并且,在发生故障的情况下,可以用正确的副本重写有故障的副本。# {7 w! k' ]; Y8 A) i4 e; A) v . x3 |6 N4 o8 | ! p2 M. C* v. s% Y j- Y 2.4 双存储现场升级* s, g6 b5 b: w# I9 G/ q 本应用笔记主要讨论现场升级的目的。0 U/ o* r" |0 \4 o7 I 除了AN4657所述的应用内编程标准功能之外,还存在多种优势。使用双存储区方法,所有代码均保存在一个项目中,从而得到单一的二进制码。如此一来,这消除对于那些在应用程序编程期间必须依赖加载程序的设备在有限功能的应用程序中需要加载程序的需要。( R% I7 s% m7 ^0 U' Q! _0 {: w1 T3 C- V 传统IAP的典型缺点在于:- p6 b5 p( ~5 ^" q8 l* S' e0 r 1. 加载程序无法执行所有后台任务 2. 加载程序无法升级或修复# H. a5 A* q& B 3. 如果在升级过程中发生故障,设备可能保存在加载程序模式+ F/ g3 B W9 v4 `) R! M 4. 如果发生问题,无需回滚至之前的版本。 通过正确使用双存储区方法,可以应对和解决所有这些问题。. B1 `3 S; u& v$ E' u' n 使用双存储区,所有与其他存储区的操作仅仅只是主程序的另一项任务。由于代码地址范围的内部重新映射,在正常操作期间,两个存储区的二进制码均可以保持相同。$ \7 n" G* n+ O9 y# A; [! C- l 执行现场升级的典型场景请参见 图 1。 ' I3 \: v2 X5 Y) j2 ^ # n9 l R# [* X K
+ J+ z! K. E; n9 _0 O+ k1 w 当存储区1中不存在代码时,务必保持BFB2标志设置,以确保在意外断电时也可保持安全。 接下来,在复位之后,固件可使用多种方法检测到存储区1的代码必须替换,且程序从存储区2运行。务必执行此决定,即,只有一个二进制代码,且在每次启动时执行此代码。 ) `5 R; {- Q0 a9 g/ L8 V ! l, {$ B! X( \% C# J4 k) T 完整版请查看:附件/ O; j, F2 s3 L5 E. \( W * `& d% w- t7 B |
DM00230416_ZHV1(1).pdf
下载280.08 KB, 下载次数: 1
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版