我是老温,一名热爱学习的嵌入式工程师% G) e. @2 C& i# E
关注我,一起变得更加优秀!9 B9 Z& r/ B9 K2 V
很多嵌入式硬件设备都集成了OTA功能,以便产品量产后可以通过远程OTA等方式下载的APP应用程序。
3 E: s$ `, d3 @+ S在使用带有OTA功能的固件之前,其实还需要提前下载BootLoader程序,才能进一步下载APP程序,今天就来说说通过OTA方式升级固件时,几种Flash(闪存)划分方式。# f/ ]' z' r- x6 n( O
独立型
* X2 C' L/ j; n1 }6 f I所谓独立型就是专门划出一部分闪存(Flash)空间用来存储引导程序(BootLoader)。
) Z" E; ]$ D1 W( m0 P- {+ |3 I) E如下图:BootLoader:引导程序Firmware A:应用程序Firmware B:下载备份程序
# g+ G- Z5 G0 h, V2 K3 |5 R ]3 p; s- x$ s. Z) V9 w$ H9 `
log3h1usy2k64048968705.jpg
3 ^: V# T4 B% ~( h( PFirmware A区用来固定执行应用程序,当引导程序(BootLoader)将接收到的新固件存入到Firmware B区,并校验成功后,Firmware A区中的应用程序将被擦除,然后Firmware B区的新固件将写入到Firmware A区中。
$ O8 I3 n3 P% p6 G$ L! l0 _ t这种方式是比较常见的有一种,有Firmware B备份区,使其下载更加安全。, Q' f+ ^, d' [5 C) d$ r% _
嵌入型
7 i* a; z. x+ Y/ W5 }3 G+ U: g5 I* V! D嵌入型就是将引导程序(BootLoader)嵌入到应用程序中去。9 { E) l3 r0 Z2 O: F
ie3w4jbw2hv64048968805.jpg
0 ~* X2 ~! L0 w$ O
当引导程序(BootLoader)将接收到的新固件存储到Firmware B区,在校验成功后,引导程序(BootLoader)将跳到Firmware B区去执行应用程序。
, n, `# u7 t; U- v: Q0 b- f% Q/ w6 [外挂型
( r6 f6 n2 T7 v- Y外挂型就是外挂Flash或EEPROM用来存储新固件。0 F7 k4 b) [+ m. F, {- N( p9 Y
当MCU内置Flash较小时,可以选择外挂存储芯片用来缓存新固件。引导程序(BootLoader)将新固件存储到外挂存储芯片中,当校验成功后,Firmware A中的应用程序将被擦除,并被写入外挂存储芯片中的新固件。- q4 d1 J9 U( A- A, q) t
ezizfatwvzr64048968905.png
' f: A9 f! ^ E' y3 j
M& {0 P& e" F( `& G" u
是不是根据需要,我们可以随意划分MCU的Flash空间呢?2 r) F8 v5 C1 T, y9 w
当然不是,由于MCU的内置Flash是以块(Block)或者页(Page)为最小擦除单位,我们划分MCU内置Flash空间时必须考虑到实际MCU的块(Block)或者页(Page)的大小。' [0 w( g; d6 }: q `9 `
现在我们以TMPM3H6FWFG来举例说明“独立型”的Flash划分方式。从以下规格书中的信息可知,这颗MCU的内置Flash大小为128KB,最小的擦除页(Page)为4KB,最小的擦除块(Block)为32KB。# |: }& ^$ C, F- t4 n) |# [
ynzlmx0wptl64048969005.png
7 K8 V5 |# u. B t 根据以上信息,我们可以对这颗MCU的内置Flash进行如下划分:
0 u Y# X$ o2 E2 d4 C8 A/ F! f
cmbw33kswry64048969105.png
) W" P+ ?& {! U9 u' [, L$ X
以上只是对固件升级(OTA)中MCU的Flash空间划分简单探讨一下,实际哪种方式更适合,还需要用户自己去评估: c) d$ g3 O4 |" Y: \4 N
-- 文章来源于牛逼的工程师网友! q; R% Y# M0 Z1 N
v3 u+ @: G1 L% j; U
-END-& `1 x" ^% h9 _- F- m
往期推荐:点击图片即可跳转阅读
( h p/ ]9 X7 Q8 z+ J" L + s6 T$ G- T9 a4 x6 k
' r) V8 E" P" W8 {* j
' [0 v! v& V- a. y
, ]3 ]7 l6 H8 v
iplzwngeazi64048969205.jpg
* e: Z F5 e8 @5 o, m3 V* Y0 }' ?
9 b. s; c N# U" B; a5 h
2025年,抽屉里的嵌入式开发板,早就已经写满了岁月的痕迹!
4 Y# s r2 |) E
& T7 X6 q( y& h7 G$ J. a x7 q1 I# b) a( G. o
7 g6 x8 I$ \+ U0 p
6 N2 ]' ?0 E1 Y3 ?. }# A
2ixawlsyfg564048969305.jpg
; n" r0 x3 r. s# u. C+ v3 j
$ V' K+ t; G! D% d2 L3 ? 一些不太成熟的嵌入式系统设计观念!
0 m3 Q* @' \$ ]+ ?6 Q0 A4 a \2 a 2 E5 ^+ o3 z9 u# t
8 z0 o" Y( r/ t# X E4 G
9 o1 G8 O8 o6 m4 g% ?
ykcrxj5lvxw64048969406.jpg
( D3 z: d# d* R5 q' h! w. q/ j9 j4 K
1 E' l! O D! E 当嵌入式软件出现bug的时候,可以按照这种思路进行排查!
0 u7 L0 M# r( K T5 n4 j! j
- i- U3 |& H U$ C+ n8 }/ X
; \) S' b, b/ y* f , J7 L1 w4 x% o; r
我是老温,一名热爱学习的嵌入式工程师5 h3 L) p0 C5 v" l
关注我,一起变得更加优秀!, S" x$ C' [. p/ @0 A7 r
1e3l21wbnum64048969506.jpg
|