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

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

[复制链接]
STMCU小助手 发布时间:2022-11-12 17:21
1、引言* [0 z9 w1 v; }3 c2 n3 X
9 L% q. P# T2 u4 g& K. t
客户使用 STM32G474 系列芯片,在烧录应用程序的同时要对 Option Bytes 中的 DBANK 进行修改,采用 STlink Utility 或是 CubeProgrammer 工具进行操作,并希望整个过程只用一次烧 录动作就完成,发现烧录的应用程序无法运行。- E" t0 }7 H1 [% `
' n- q6 x% f  e9 T' ]
3 V- Q7 l7 s/ O4 n* J' b/ k
2、问题产生及原因分析
$ r4 p2 k/ m  ^- D; P, e5 K/ \' y- F( }+ Y; c% A9 K
STM32G474 系列芯片具有双 Bank 功能,且默认情况下 Option Bytes 中的 DBANK =1,即双 Bank 使能。但客户实际的应用是单 Bank,所以需要将 DBANK 设置为 0,这样客户在使用 Utility 或是 CubeProgrammer 工具烧录应用程序时,同时设置 Option Bytes 中的DBANK 为 0。但是当烧录结束后,发现应用程序无法正常运行,需要再次烧录才能运行。
  s) R3 b3 W$ N4 G; J7 b" {5 |4 E% N# x( `% x
整个烧录的过程,在 Utility 中操作如下图所示,通过 Target ->Automatic Mode->Option bytes configuration 对 DBANK 进行修改,在 File 中选择应用程序文件,然后直接烧录。
& [  U' X! \0 z- ^" c0 ]! A) K  l! [7 @  U
微信图片_20221112172142.png
  b7 n6 c1 Z: X: E; ]9 t% D3 y8 Z$ a, p4 K
+ A3 a! ^# o% {' d! p
在 CubeProgrammer 中操作如下图所示,通过 Erasing & Programming->Automatic Mode->Option bytes commands,写入修改 DBANK 的命令行,在 File 中选择应用程序文件,然后直接烧录。
7 P4 o9 y4 ?' C" j2 ]; N# `/ e0 \' ?3 e/ V! a
微信图片_20221112172139.png 9 Z5 |  ]( A& z3 @$ I

( S( D  i3 J0 X# h, @& {3 W# B: d整个操作流程是正确的,以 CubeProgrammer 为例,整个操作的日志如下,显示所有操作正常完成。9 C5 X+ ^9 m. \
, t# t+ n; o; _: w* X) M8 R6 i6 U
微信图片_20221112172135.png
) K* j: m8 T9 t+ |
4 I' p& E" M  X$ Z4 |0 j但是仔细阅读日志,可以发现整个操作,首先烧录的是应用程序,然后再进行 Option Bytes 的修改,也就是说,在烧录应用程序的时候,MCU 依旧是工作在双 bank 模式下,待程序烧录完成,将双 Bank 修改为单 Bank,注意 DBANK 的修改将会改变 Flash 的取指方式,如下:
+ s& B9 n9 Y& E+ ~( N: T+ D) g; R- I6 i6 h- f
• Single bank mode DBANK=0: read access of 128 bits
* \( x( l9 m" T, p( t0 p* `1 c( n
9 o6 b& E  q5 O+ g" k& F8 r" j  O• Dual bank mode DBANK=1: read access of 64 bits7 \6 z6 s9 ^& f, K$ N9 ]$ A6 j( G
* p9 {9 z6 a% R8 ?! u
可以通过单步操作的方式来查看 Flash 中内容的区别。在双 Bank 模式下烧录程序后,读出Flash 内容如下:, ~1 Q: I4 G* s# g8 u! A
2 x# c( U0 E8 ?6 H2 H, W+ @& k
微信图片_20221112172114.png
4 I" F, j7 t3 m' w2 {8 h7 ^
2 \1 F2 W* \# E. O% G1 I0 ?对比以上的内容,可以发现由于取指方式的改变,读取的 Flash 中内容发生了变化,后者出现了大片的空白空间,这也就是此前客户操作方式在完成烧录后程序无法运行的原因。
' ^8 T' K$ ~) e, O# r; f+ U* K
1 t! u* z2 L/ E# L  d3、解决方案
1 n5 U6 {: a1 X* t0 d* Q- J5 @' w" m9 f* o4 H! @1 z2 b' H
通过以上的分析,要实现客户的要求,必须首先对 Option Bytes 进行修改,将 Flash 配置为单 Bank 模式后,才能进行应用程序的烧录,但是在 Utility 或是 CubeProgrammer 中无法修改其本身的操作时序,无法通过一次操作的方式完成,必须分成两步来完成,即:/ ]- e/ W. Q. K0 f& y& J, J
- r: J" |7 a# j  m: Y- X$ ~0 i  r- `
• 修改 Option Bytes 中的 DBANK
- N. U$ `* P) Y8 x' d8 d- A• 烧录应用程序7 e* y$ o- L$ q  C
6 G. L2 m3 _1 m5 h

$ V5 i9 w4 b. \7 ]$ B那么客户最希望的只用一个步骤完成所有的操作是不是没法实现了?别急,ST 还提供了另一个工具,ST_LINK CLI, 它的操作完全通过命令行的方式来完成。其路径位于 ST_LINK Utility在安装目录下,如下:- [; S: \. m% i& f% U3 E
/ P, R, j% Y( x: ~) I- \4 i
微信图片_20221112172111.png 6 P3 e: M% V& E7 E
* Q7 g$ y( D6 M7 m# b! s
微信图片_20221112172107.png
, I$ W: J4 L" O' K: x; h# f
7 A; H9 |' o  M: x可以通过 cmd 窗口中直接调用该工具,举个例程如下:# M; B6 w' a: [1 v& {  P
1 ~! n: Z' _4 L+ D5 Q7 X* m
D:\ST-LINK Utility>st-link_cli.exe -c SWD -OB DBANK=0 -Rst -ME -P d:\test.hex -V while_programming- P) o0 T  Q! w" j) d7 a: l3 W8 _; N
5 h: G1 H6 E: z0 b5 K
微信图片_20221112172103.png
" Y$ E- s7 r  g- s1 r4 a. V
4 M# ~( |' P$ K, e以上可以看到 Option Bytes 首先完成修改,然后让芯片进行 reset,保证新的 Option Bytes重新加载并生效,最后完成应用程序的烧录。: G! }6 M, n3 U# n; i* j( M. I

4 l0 N- Q; K: P8 w/ y4、 小结& w1 f9 f9 b7 K; B, r8 J; I
这里分析了客户使用烧录工具 ST Link Utility 和 STM32CubeProgrammer 同时烧录 Option Bytes 中的 DBANK 设置和应用程序后程序无法正常运行的问题,给出了采用 ST-LINK_CLI.exe 工具一次性操作完成 Option Bytes 与应用程序烧录的解决方案。7 f4 Q) [$ e8 h7 V6 V
# |9 E, e7 Y8 n
微信图片_20221112172117.png
赞 收藏 评论4 发布时间:2022-11-12 17:21

举报

4个回答
y369369 回答时间:2022-11-14 14:41:27
论坛还有G474可以申请吗?, H6 D9 H9 ?5 L
STMWoodData 回答时间:2022-11-14 14:43:18
不错不错,学习到了9 Y/ b& f% q$ B9 N. F3 r* M
lospring 回答时间:2022-11-14 14:57:37
学习了,下次也试试。6 @6 p. `6 f9 S7 l5 n/ |- R& U
sumoon 回答时间:2022-11-14 14:59:29
还有这个窍门在里边, 学习了!
8 B# {5 E% A3 U- w5 r6 D$ h. O( J& i

所属标签

相似技术帖

官网相关资源

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