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

STM32G4 应用程序与 Option Bytes 同时烧录问题

[复制链接]
STMCU小助手 发布时间:2022-11-12 17:21
1、引言
/ k& z! _! c) l" l, T5 B
9 s1 Q( F+ u- b7 J6 a客户使用 STM32G474 系列芯片,在烧录应用程序的同时要对 Option Bytes 中的 DBANK 进行修改,采用 STlink Utility 或是 CubeProgrammer 工具进行操作,并希望整个过程只用一次烧 录动作就完成,发现烧录的应用程序无法运行。" e8 ?+ Y# m1 }

+ ]3 e1 t1 b0 J- c. p/ u8 O6 y
: |. R# N6 A5 V+ T1 {) ?2、问题产生及原因分析
: n7 h$ J( U, [# A. T9 |% {# W2 j- T3 g3 Q
STM32G474 系列芯片具有双 Bank 功能,且默认情况下 Option Bytes 中的 DBANK =1,即双 Bank 使能。但客户实际的应用是单 Bank,所以需要将 DBANK 设置为 0,这样客户在使用 Utility 或是 CubeProgrammer 工具烧录应用程序时,同时设置 Option Bytes 中的DBANK 为 0。但是当烧录结束后,发现应用程序无法正常运行,需要再次烧录才能运行。
; X* X9 `7 M, _& \
( ?: G. j6 F2 ?$ b整个烧录的过程,在 Utility 中操作如下图所示,通过 Target ->Automatic Mode->Option bytes configuration 对 DBANK 进行修改,在 File 中选择应用程序文件,然后直接烧录。# \1 ^. B" t3 S

" L2 s, o0 \0 g; ~3 y 微信图片_20221112172142.png
! P  [* m" w5 C" @3 h
; J/ y( t" ?5 i5 l: i8 \' ~
: f! @! I; n4 g: h9 \0 {2 w在 CubeProgrammer 中操作如下图所示,通过 Erasing & Programming->Automatic Mode->Option bytes commands,写入修改 DBANK 的命令行,在 File 中选择应用程序文件,然后直接烧录。8 j9 O! j" c, A+ ^  k" g7 {7 X7 y
) ~. z3 v' U+ o; n- z, \4 |$ v% E* x4 n7 [
微信图片_20221112172139.png : F" T3 s- f( y5 ]4 y: A3 v! U

. O5 L! a: U& K! x整个操作流程是正确的,以 CubeProgrammer 为例,整个操作的日志如下,显示所有操作正常完成。6 j/ N. H% c' X/ ]4 {6 ^
- V; h0 a4 M: Z) Y. A9 k9 D6 j+ F
微信图片_20221112172135.png 1 {* Y, l& y' C

5 Q) t6 I+ F* J1 D, R, R8 b8 T但是仔细阅读日志,可以发现整个操作,首先烧录的是应用程序,然后再进行 Option Bytes 的修改,也就是说,在烧录应用程序的时候,MCU 依旧是工作在双 bank 模式下,待程序烧录完成,将双 Bank 修改为单 Bank,注意 DBANK 的修改将会改变 Flash 的取指方式,如下:
9 g  \. P1 h4 g/ X+ v, [9 h. w& E) w( ?3 y
• Single bank mode DBANK=0: read access of 128 bits. l4 r' [! b& V: `, j5 p  _+ T
2 N9 v" `  y* K; L
• Dual bank mode DBANK=1: read access of 64 bits
' J" i0 j- ?! o8 y) w
# H, h6 P* c3 ^1 [. L可以通过单步操作的方式来查看 Flash 中内容的区别。在双 Bank 模式下烧录程序后,读出Flash 内容如下:
4 W5 @( W8 E) a2 ~4 K$ w# K4 E+ \+ k# n0 |# G
微信图片_20221112172114.png
6 ^) R6 Y) S: I9 \
6 ?. G( s9 a; d6 ~* I对比以上的内容,可以发现由于取指方式的改变,读取的 Flash 中内容发生了变化,后者出现了大片的空白空间,这也就是此前客户操作方式在完成烧录后程序无法运行的原因。+ ?9 z3 m* R0 E$ f/ y7 ~* c( i
% Q2 S7 j3 O( ]+ t. ?7 o  O* I
3、解决方案
+ x5 |0 p; D1 f' {: _( k; Z
8 R& B( d' d" X通过以上的分析,要实现客户的要求,必须首先对 Option Bytes 进行修改,将 Flash 配置为单 Bank 模式后,才能进行应用程序的烧录,但是在 Utility 或是 CubeProgrammer 中无法修改其本身的操作时序,无法通过一次操作的方式完成,必须分成两步来完成,即:
0 {) V7 |  |$ r3 R8 @0 `0 s
2 X+ h* f% v* b• 修改 Option Bytes 中的 DBANK$ ^" c% k! s) E+ g) p
• 烧录应用程序- }0 _. W  S4 t5 [- P$ |

  m7 V- R) \6 V- ]1 q  V& o# \8 M
0 n- G& T8 p5 o" j0 v那么客户最希望的只用一个步骤完成所有的操作是不是没法实现了?别急,ST 还提供了另一个工具,ST_LINK CLI, 它的操作完全通过命令行的方式来完成。其路径位于 ST_LINK Utility在安装目录下,如下:: T, D$ o0 d! K! f' D7 M

( D5 @0 b$ v9 l& h$ l/ |: u 微信图片_20221112172111.png
2 @: k7 m$ d3 r& a: j
1 Y1 }' {. Y% p 微信图片_20221112172107.png 2 }- L9 w* h' K$ p0 _& }2 \

: c1 s# Q! K7 z6 @可以通过 cmd 窗口中直接调用该工具,举个例程如下:, k  \/ i+ P: b: m

0 P/ |- P8 C3 C9 X. E% ^. AD:\ST-LINK Utility>st-link_cli.exe -c SWD -OB DBANK=0 -Rst -ME -P d:\test.hex -V while_programming# v# C/ n, M) K! K$ q* u6 n( V+ V: c

9 a7 C7 Q; k$ U! M  } 微信图片_20221112172103.png ' ?. t1 g8 i5 x( W$ V% {& P! q

  {! b0 e0 h( t% F& A以上可以看到 Option Bytes 首先完成修改,然后让芯片进行 reset,保证新的 Option Bytes重新加载并生效,最后完成应用程序的烧录。
" y& ]; [1 U, g
9 W5 t- q! ~/ R6 V& y4、 小结- B! V# ]9 j$ c4 J
这里分析了客户使用烧录工具 ST Link Utility 和 STM32CubeProgrammer 同时烧录 Option Bytes 中的 DBANK 设置和应用程序后程序无法正常运行的问题,给出了采用 ST-LINK_CLI.exe 工具一次性操作完成 Option Bytes 与应用程序烧录的解决方案。& Y7 k5 J1 e; I2 }  O% v( d0 c

) G2 o7 L- `  F3 v& q
微信图片_20221112172117.png
收藏 评论4 发布时间:2022-11-12 17:21

举报

4个回答
y369369 回答时间:2022-11-14 14:41:27
论坛还有G474可以申请吗?* R' a) d7 U- W( R( z$ T
STMWoodData 回答时间:2022-11-14 14:43:18
不错不错,学习到了
; o+ D2 V: r' N9 u  f( _* ?5 i6 P& h
lospring 回答时间:2022-11-14 14:57:37
学习了,下次也试试。6 X: G' c/ ?# l- Z3 @8 C
sumoon 回答时间:2022-11-14 14:59:29
还有这个窍门在里边, 学习了!- I0 S  O. N! X- n, n0 c' T, m' T

所属标签

相似技术帖

官网相关资源

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