你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

优化使用STM32微控制器的闪存双存储区结构 - STM32Cube的软件扩展

[复制链接]
STMCU小助手 发布时间:2022-7-26 21:45
引言
+ `+ _7 f6 Q7 q% X8 e' O8 n双存储区功能是多款STM32微控制器的通用特性。本文档旨在描述如何在客户应用中使用此功能。
9 y. O! z0 `9 b. @" i本应用笔记中涉及的主要内容是现场升级,通过代码示例(X-CUBE-DBFU)介绍。
' a0 s  g- F' o7 C8 E4 C尽管本文档仅直接描述了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”
! V9 l% }8 Y4 M7 ^• AN2606应用笔记:“STM32微控制器系统存储器启动模式”
: X/ L' }% y  Z• AN4024应用笔记:“STM32安全固件升级(SFU)”
& c; ~2 r/ l0 [# U  H  ]1 f• AN4657应用笔记:“使用UART进行STM32L0应用内编程”! Q% f* t( K0 Y( [$ }7 p

* f6 g( ?3 K7 d2 x2 I0 ^% l

& v  E3 M2 B( x* q 1定义
1 ]# I( C% ?( g% r! d/ ?表1. 缩略语列表
9 S( ~9 o/ V- p& n6 f 2GUZQX)Z(Z98TV_@6J_MJXU.png
+ i9 `3 B7 M# W9 S' [7 k. c
9 l+ b6 }8 z% r( L6 a& E7 N. |! D3 b. e2 双存储区用例! i9 n1 H  E% x! @3 `  e( c
在设计使用双存储区设备的应用程序时,可以选择多种方法来使用程序存储器的后半部分。
. q6 ~5 P4 t& F# |6 T. P  ]& z
/ K, i  B0 P' }5 P7 K3 z
2.1 大代码( |' i8 x/ h, D* {8 J" P3 Q
第一种情况是具有代码的应用程序,该代码在单个程序实例中需要使用两个存储器。. U1 r8 O: x4 @6 G: U  L
即使在这种情况下,双存储区方法也可能具备优势。还可以考虑在两个存储区分别加载具有不同功能集的两个程序,实现两种工作模式(其中,主/从、录音机/播放器、发送器/接收器)。
% J8 |3 _* x3 S0 ], t6 P& @6 ]; M
/ m4 U( ?1 Z: @! v9 Q# `
2.2 ( I6 N3 H0 {' r) k( D- l1 `
数据存储$ y4 A$ h* N1 r' u$ }7 Z# K
第二存储区特别适用于数据存储(例如:数据记录)。
* J- g5 V, t( f, l0 R6 o% L此时,双存储区可用于使能“同时读写”特性,从而避免在将数据编程到另一存储区时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
如果不考虑固件升级场景(即设备不可访问),则第二存储区可用于代码备份。第二存储区可以存储相同的代码,并在闪存轻微损坏的情况下用作备份(例如通过辐射和加热)。
, T1 B, Q  Q, c  z/ T! R相对而言,通过后续代码完整性检查,响应未处理的异常,较易于执行存储区转换。- 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. 加载程序无法执行所有后台任务
& t$ c3 @) m( A( R) k# Z1 d- f+ C  [2. 加载程序无法升级或修复# H. a5 A* q& B
3. 如果在升级过程中发生故障,设备可能保存在加载程序模式+ F/ g3 B  W9 v4 `) R! M
4. 如果发生问题,无需回滚至之前的版本。
* a" ?$ }9 t8 Y通过正确使用双存储区方法,可以应对和解决所有这些问题。. B1 `3 S; u& v$ E' u' n
使用双存储区,所有与其他存储区的操作仅仅只是主程序的另一项任务。由于代码地址范围的内部重新映射,在正常操作期间,两个存储区的二进制码均可以保持相同。$ \7 n" G* n+ O9 y# A; [! C- l
执行现场升级的典型场景请参见 图 1。
8 f" R0 ]+ ?1 |, D' I3 \: v2 X5 Y) j2 ^
# n9 l  R# [* X  K
Z}IYG3K(VM6J3)7IAWU`9)8.png
! D$ ?- I6 T& `4 ^7 V+ J+ z! K. E; n9 _0 O+ k1 w
当存储区1中不存在代码时,务必保持BFB2标志设置,以确保在意外断电时也可保持安全。
  s$ F7 o9 C6 [* ^# I接下来,在复位之后,固件可使用多种方法检测到存储区1的代码必须替换,且程序从存储区2运行。务必执行此决定,即,只有一个二进制代码,且在每次启动时执行此代码。
& E! E! v# r  f9 V( \" {% M) `5 R; {- Q0 a9 g/ L8 V

& H  v0 I/ |0 Q3 i; n2 `1 n2 W! l, {$ B! X( \% C# J4 k) T
完整版请查看:附件/ O; j, F2 s3 L5 E. \( W

, G. W  g+ c) y- ^: h+ n/ a* `& d% w- t7 B

DM00230416_ZHV1(1).pdf

下载

280.08 KB, 下载次数: 1

赞 收藏 评论0 发布时间:2022-7-26 21:45

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版