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

基于STM32H5的DA之初体验经验分享(带 Trust Zone)

[复制链接]
STMCU小助手 发布时间:2024-2-29 16:53
一、前言, @- u+ Y6 Q: O
STM32H5 是 ST 2023 年新推出的产品系列,与以往 MCU 不同的是, STM32H5 推出新的 product state 功能特性以替代以往的 RDP 功能。
  Y) R5 e; G9 S4 U! `7 m5 [5 N2 \1 c' T( G! r! {& w
微信图片_20240229165316.png
- P, \/ @" q1 M! l, J
2 ~7 j- u! \, O7 ^: t' D0 h5 T
如上图所示,product state 有如下状态 :* z8 u# }- z! n; `% k' Q( Z6 r$ z
% K% k5 ?9 t" Y
Open(0xED) : 完全 open 状态,相当于以前的 RDP0。( C* F2 X) I5 |4 J: D

( k2 J# I0 A2 y, ?Provisioning(0x17) : 此状态是专门用来做预配置的。 $ K. N. L' e/ p! f/ V5 m
" {) b1 p8 i7 m( |
iROT-Provisioned(0x2E) : 用于 STiROT 或 OEMiROT。% V+ [6 b5 O4 ^& a

4 ~& z7 ]9 H3 T! s4 wTZ-Closed(0xC6): Secure 区域关闭, 相当于 RDP0.5(仅在 TZEN=0xB4 时有效)。 $ h' W8 k3 b6 C0 D/ o

, ~1 Z2 `5 a, p  kClosed(0x72): S 和 NS 区域均受到保护,这点有些类似于 RDP1,此时调试口没法对其直接访问,但可通 过 DA 打开调试口或回退,这一点有点类似于 STM32U5 上的可带密码回退的 RDP2。 2 h8 m5 V3 ~. H; N% S- n

4 _+ m' i! I$ W2 m% X  wLocked(0x5C): 完全关闭芯片的外部访问,相当于以往 STM32 芯片的 RDP2 保护等级。
) n/ h" h0 F: F# |# T4 J; B; t; C& W! E
整体如下图所示:0 ^2 d3 M6 ]; u3 Q3 B& j
) ^7 e0 |) A4 k" H
微信图片_20240229165313.png * J! D& p9 T! p( z9 ~

! `# i1 p% b' S  j其状态切换如下图所示 :
- D2 i. N6 ?& `) u& O$ X$ Z
9 i7 ^1 W  [: \) m7 B 微信图片_20240229165309.png
: \2 j; M1 W0 R1 @
6 [7 X  _6 S3 S4 Z6 h
如上图所示,product state 从 open->provisioning->iROT-Provisioned->TZ-Closed->Closed 如此从左到右是可切换的,但是,要从右到左如此回退,则必须要经过 DA[Debug Authentication]过程。如上图所示,经过 DA 后,要么完全回退到 Open 状态,要么部分回退到 TZ-Closed 状态。
- Q# v6 g( O6 B3 D6 j/ d8 x  I4 X% ?' H& K( U& o; A# T
所谓的 DA,就是通过向芯片提供证书(STM32H503 是提供密码),通过芯片的身份认证后,允许向 芯片发起 product state 状态回退,或者重新打开调试口请求(仅当 TZEN=0xB4 时)。
; i2 q6 k. y$ _* G" j

7 {4 m* ]/ R4 {由于新的 product state 和 DA 的引入,所有 STM32H5 开发者都必须掌握 DA 的用法。因此,本 文档针对 STM32H5 初学者,演示当 TZEN=0xB4 时, 使用证书来完成 DA 过程。" h. f. |7 x: S! V

% ]; |8 ~' F% X3 p' T二、准备工作9 `, Q  Z: {' T- V+ l
开发板 : NUCLEO-H563ZI
8 S! `* s* c9 @8 R' g4 j6 i" s0 U( p7 O1 v, U' k
微信图片_20240229165305.jpg
0 s. Y/ K2 Y) j& m3 y" C) `' D8 H# u1 u
软件包 : STM32Cube_FW_H5_V1.1.0
9 l% E( e9 g' `" @# W7 A7 D6 I  s4 k2 Z/ L" B6 E4 l( [# P6 m& F5 j- y1 P
工具:' i2 \+ Q* Z5 {3 ?- ~- `
STM32CubeProgrammer v2.14.0; x0 [8 v9 W0 B% o$ _8 B
Tera Term 串口终端显示5 B0 D- j% q# z0 U7 f& `5 U
Trust Package Creator(安装 STM32CubeProgrammer 时一并安装, 注意勾选)
% k9 H: V6 _9 l! y: J$ K! _IDE: STM32CubeIDE v1.13.06 b5 {' G/ `) o( x# p
STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下,在本动手实验中,我们 默认将其放在路径 C:\workspace\目录下。/ A, p$ O# l2 V4 \' y5 Y
( A& j* u) L( c. z; N5 N  r
三、生成 OBK 并测试5 u9 P2 y  b& F) r9 G0 T+ Z
在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA,在此目录下,已经包含了自带的默认 obk,密钥以及证书。其实 我们可以直接使用这些 obk 以及对应的证书和密钥,这里我们将重新生成一套,并测试它是否 OK。
8 d1 ]- F7 L3 z
. }2 C8 c3 y# J, R6 y
3.1. 重新生成密钥对打开 TPC(TrustedPackageCreator)工具
! b( d( y( _6 q2 d  h
# Y! H  c. o$ G* h/ ?4 |2 V 微信图片_20240229165302.png
; N5 ^/ T! {4 B0 n, @8 B7 |* ~7 n4 _7 B( b
在 xml file 处,导入 DA_Config.xml 文件 :
# a' @! c% v( l7 H5 G" |6 K% OC:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml8 k# N+ D& U9 m& ?/ S% g
如上图,在导入 DA_Config.xml 文件后,点击 Regenerate 按键后,将在 Keys 目录下重新生成公钥私钥对 :% y" V& i* ^4 F4 F# T
* y: x$ h. F" A( u" J; L5 `
微信图片_20240229165259.png - X) c7 t2 `' J( T8 |  w
" O  s" n3 m9 n" {/ v5 H
这组密钥对就是接下来需要使用到的密钥对了。
- t4 n- V8 d/ ~! p* C其中 :4 t# `: S  B( y
Key_1_root.pem 为私钥1 Z/ O4 h3 ]7 D2 |( A9 I" u
Key_1_root_pub.pem 为公钥* m: w3 l0 w) q' X

, `* k4 {/ @* y5 ]3.2. 生成 DA OBK 文件
4 }* w- a0 |9 v% ~, |: P接下我们将创建 DA 的 obk 文件 :- k6 w% P: I" Y

% K0 t3 D3 ]4 w8 A 微信图片_20240229165245.png
8 E% ]. p# r- F) B/ Y0 c
( M7 P8 ~& b8 o8 @
如上图所示,继续在 TPC 工具中,在 Permission Mask 下,激活允许的操作许可,被激活的就是 DA 认证通过后,允许的操作. 然后在 Output File 处选择输出文件。我们使用默认即可。然后点击 Generate OBKey 按键,则在 Binary 目录下生成 DA_Config.obk 文件 :/ f+ |8 k9 _  R8 \4 r

" U# m& D8 ~  M* r# { 微信图片_20240229165240.png : V5 _" C7 ?( Y

- Z9 v% p* @1 O+ F' n- S这个 obk 文件就是我们后续将来做 DA 预配置(provisioning)的 obk 文件了。8 j6 D9 w5 T8 j5 @3 t
: f$ D2 ]0 Q1 m2 k9 r

* X7 c2 C- W8 M; B2 A% A1 G3 Q9 F  f, A3.3. 生成证书
- W; M& ^6 N2 l5 A' ?接下来我们继续用 TPC 工具生成证书。" o; r" o& S6 Q" T. E
/ ?, e% e% \! i) m
微信图片_20240229165237.png
7 b: N6 }; P  ?- D8 e/ x) N
7 O4 s2 l$ w5 [8 o- ]+ W
如上图所示,在 Microcontroller 处选择 STM32H5-2M,在 Root Private Key 处我们选择之前生成的私钥文件 : C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root.pem) ?/ X1 ?6 Y- i! `* ^
' |! P7 b- _8 C) ]1 o
' x" m9 p7 H, H! Y6 X1 Z
而在Root Public Key处则选择之前生成的公钥文件:C:/workspace/STM32Cube_FW_H5 _V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root_pub.pem
$ x6 s1 H+ D% j5 c
/ ?* U- \- ~& x5 h
然后在 Permission Mask 处选择此证书所允许的操作许可。我们将 Full 回退 to TZ,以及Secure/Non Secure 下的 Level 1~3 的 Debug 权限许可全部打开。/ c" T" m" V) X; B# D' \2 z4 }" n

" h' c2 n) M0 m6 t0 ?& _! S6 ^# [3 a+ I
在 Certificate file 处选择输出文件,我们选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Certificates/cert_root.b64$ d- }' [& t% x; V1 h2 T$ y
即在 Certificates 目录下生成 cert_root.b64 文件,最后再点击右下角的 Generate Certificate 按键,最终在 Certificates 生成了 cert_root.b64 文件。
/ U+ Y: _4 X7 i' ]- `+ X
  s. P  x% W/ Z2 n$ U3 n 微信图片_20240229165233.png % q1 V' ~3 ]' a3 ]8 v4 W
' [; q( p  `( ]0 S' e/ @& I2 a9 Z
如上图所示,在 Certificates 目录下将同时生成两个文件 : cert_root.b64, cert_root.cert。
7 v  a5 ~% g! y4 H3 ?. O: I其中 cert_root.b64 就是我们需要的证书文件了,它就是根证书。它将在后续步骤中进行 DA 时将会用到。而另一个生成的文件 cert_root.cert,我们并未用到它。2 G/ d0 {* `' F" M! z

$ n0 O! T0 w" ^
. t7 h) ~' {2 U6 B2 T
3.4. DA 预配置 (provisioning)
! g8 H) y$ Q; x# X6 b7 y接下来我们将做 DA 预配置,在此之前我们确保使能 Trust Zone 功能,即 TZEN=0xB4。
$ u6 K: q: c2 a+ y' W+ Q
2 v; i9 s' N. f1 P  Y" N" X' u- l0 b 微信图片_20240229165229.png ( N8 @0 A' _( G7 M' P$ K+ U

) ?0 Q5 D: W! V. |( l如上图所示,使用 STM32CubeProgrammer 连接芯片,并将 TrustZone 打开。4 M4 i$ j- u. G: r4 M! i! d9 D
然后将 Product State 切换到 Provisioning 状态 :$ b- Z' y4 S5 O& t  D: q* \9 A1 w7 _

; k" I' `  B  Z4 q# r 微信图片_20240229165226.png ; O7 m- ^2 g, ~3 n$ }7 w

; G  g$ E& c. q/ {2 f9 K接下来正式做 DA 预配置…6 ~* q% q. [. Y" N! B9 i3 r
' k+ g3 W) _- i1 @2 q$ [* D% _
微信图片_20240229165223.png 7 n& E- M5 N# T2 a+ u0 }  h. \
& U: K# I4 }* ]% _
如上图所示,在 STM32CubeProgrammer 左边选择盾牌图标,然后在上方选项卡处选择PROV,接着在 OBKey file path 处选择之前生成的 DA_Config.obk 文件 :) S( c  Y. q5 J* Y4 |. a2 u

+ S0 K. G  B7 F9 z6 @6 x, g7 `
C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Binary\ DA_Config.obk* x! z7 M. [: l5 }' `6 n& T# J

8 f5 q! y4 T5 S. C% w' ]
! ~+ j7 E+ ]  X) }0 Y2 N; a
最后点击 Start Provisioning 按键…
* E  g# `; t" `
3 G  a8 N$ \+ A9 n- z! x- r6 Q  p 微信图片_20240229165219.png
& d* c0 T# x* }1 l& g0 y3 ?* \, E) @- {( R* J* h
成功时,将弹出消息提示成功。此时表示,DA obk 文件已经预配置到芯片内部并且已经成功了。然后断开 STM32CubeProgrammer 的连接…
3 C2 @, |7 u4 W/ Y: B! h
( X- q$ ?; ~& Q+ t 微信图片_20240229165211.png / z3 V: v# [  e. a; T8 x5 O7 p
+ j/ c! }8 o0 L& d0 {
如上图所示,点击 Disconnect 按键,确保 STM32CubeProgrammer 已经断开连接。接下来我们将尝试用证书做 DA 回退…
0 t2 S5 n/ B1 [" H8 \
6 S1 [( }8 @" p' Z) n/ K5 X

  R& C* P) r  |/ d$ B3.5. DA 回退! W% p+ k- o3 `
) B7 E2 @# T0 I1 F1 x* S  D9 O5 b; ^
微信图片_20240229165207.png
- g1 h4 \* m1 N) `% X
! ~) T% a* q- b5 B3 Z1 K( [# [/ P
如上图所示,在确保 STM32CubeProgrammer 断开连接的情况下,左边还是选择盾牌图标,上方选项卡处选择 DA,然后在界面中点击 Discover 按键…
, X; T( A; P% C/ G; F6 w$ e$ R2 o. z8 p# ]" G, M2 L
微信图片_20240229165204.png " O  c* C. E7 U1 U1 w) I9 A# W

/ ]8 u2 j7 l1 h1 M- e; l如上图所示,在接下来的界面中,在 Key File Path 处选择之前生成的私钥文件 key_1_root.pem:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Keys\key_1_root.pe
; g  p6 M% l! V# n2 s! l1 y
5 j6 H- ^$ X$ c3 Y1 S' X3 b+ v如上图所示,在接下来的界面中,在 Key File Path 处选择之前生成的私钥文件 key_1_root.pem:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Keys\key_1_root.pe7 g! E7 I/ A3 @( O, t0 d
1 }7 h# |+ M1 f5 S4 P
在 Certificate File Path 处选择之前生成的证书 cert_root.b64:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b6
" [5 H. ^2 x( x7 e; o% ~+ n+ }: m( }
3 |) J& R4 {* x( l/ x" |3 _+ Q
然后点击右边的 Continue 按键…
: j7 a$ r. w: a( M- i0 y/ p2 Z+ F  a- Z8 U" V4 p
微信图片_20240229165158.png
6 Q) V, T0 Y5 i% V  l) j% G* I5 g6 ^; r: K
如上图所示,在下方新显示出来的界面内容中,在左边选择 Full Regression, 即你想要的操作,然后点击右边的 Execte 按键…
- V6 h/ g* T0 @( e1 R% L& |. s9 b3 B* e! D% R4 o& w. C
微信图片_20240229165152.png   o9 w8 i/ S7 y' o% h7 U! G
, f! O' H9 x2 F0 h- I' B: M
如上图所示,弹出界面显示 DA 成功。
; Z- G$ V6 l$ f' @
6 ]6 y( O; W5 e这也就表示,之前生成的私钥文件 key_1_root.pem + 证书文件 cert_root.b64 正是匹配之前生成的 obk 文件 DA_Config.obk 的。, _6 F6 }; _( g- a6 S1 `
/ k0 z3 V0 B; Q1 `: |5 i9 ^4 @
其中 DA_Config.obk 文件和固件 hex 文件是要给工厂烧录芯片用的。而私钥文件 key_1_root.pem + 证书文件 cert_root.b64 则是需要保留,将来工程师需要它们来做 DA 回退和 DA 调试用的。
, z  b. S4 s8 [9 T$ U5 C" J
) [% O0 U! E4 f: z, G1 x这里需要注意地是,如果上述 DA 回退未成功,则表示证书+私钥与之前预配置的 DA obk 不匹配,需要重新执行 3.1~3.5 节。直到 DA 回退成功为止,否则切记不要进入到下一步骤,不然很可能会由于证书不对无法回退导致芯片废掉(除非用户代码可以执行回退)。- p& ~1 z- b; r3 x
) L6 `/ c: |- v: E5 Z

9 ~; ~! `0 q: e3 W' Q+ X四、运行一个程序并 DA 调试& z+ p9 d! ?% w) {
4.1. 在 Open 状态下运行一个示例程序

7 G' S! V% n- r4 `, I/ c' q4 A4 K使用 STM32CubeProgrammer,确保 product state =Open, TZEN=0xB4:& i8 r4 n0 G6 _3 f; z0 U
6 g' V+ E7 L4 L
微信图片_20240229165146.png : z" @+ p6 S9 f% v! m
% x, M0 x) F9 s% E4 l: C5 o0 k
并确保:SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F, SECWM2_PSTRT=0x7F SECWM2_PEND=0x0:
6 W3 c  c6 k9 ?' P+ \- D; v
. M4 _6 F% {: ~, [* z2 R5 M( [ 微信图片_20240229165142.png 2 @: s! k5 E/ v# |
* L" R: U$ D2 U5 q' D
然后使用 STM32CubeIDE 编译 STM32CubeH5 包下的示例工程:STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Examples\GPIO\GPIO_IOToggle_TrustZone\STM32CubeIDE 分别先后编译 S 和 NS 工程并烧录对应程序,并复位运行。正常情况下,可以看到板子上 LD5(橙色), LD6(绿色)两盏灯在来回闪动。即表示测试程序运行 OK。7 _* A' q0 |! n2 i" q5 T5 o& D
. _( _, L3 a+ w! E' E8 x

- e5 q- z! I7 k$ b4.2. DA 预配置
" P2 ^: q7 A- i接下来我们参照之前的 3.4 节,将 product state 切换到 provisioning 状态, 然后进行 DA 预配置。
8 y3 \: e- N' s% K5 B
- f% O/ q: I  _9 ~ 微信图片_20240229165137.png # f5 D- x- s: E- L7 s
' Q- A% X0 [3 V9 ?' Q
如上图,切换到 provisioning 状态。
' [0 `5 V& q. o/ p1 U. m
* h7 K$ G/ I3 R, `- E 微信图片_20240229165132.png
5 Q/ e9 E9 x1 ~# G9 F2 V! X, C' s- l$ V( Q6 Z' ?: q* F1 F
如上图所示,导入之前生成的 DA_Config.obk 文件,然后点击 Start Provisioning 按键,进行预配置。
* o! ^9 k6 j9 _+ D! O( c0 j6 {4 t0 k7 c; e  a
微信图片_20240229165128.png
+ Q1 M. Z; h- y' c& O9 Y# g* L. y  m- ]0 ]6 T( Q0 p: B. v8 t- l  J0 g
弹出上面显示模式,则表示预配置已经成功。
7 T% V7 E/ e+ R0 h- Q: m5 R9 {# V5 I# k; @4 r& c6 |+ O

4 g0 w* P* ]- b8 H& s' H% B, L1 p: H" {6 M4.3. 修改状态到 Closed 状态
( h- F( V! A2 u2 L/ }
! r! Q6 h$ o+ Q 微信图片_20240229165124.png
6 \* p8 s5 t3 q

, u) P1 V! q- k" s如上图所示,接下来将 product state 修改为 Closed 状态。此时 ST-Link 连接会自动断开,表示芯片内部调试口已经自己关闭了。5 W. E( }* p  ^4 r' ]) Y1 ~; `' V
此时查看板子,LD5、LD6 两灯依旧来回闪烁,说明程序在 Closed 状态下运行正常。只不过此时调试口是连接不上了。; J0 l' s& n) n+ p8 y8 ?1 u6 S+ F

# p2 C$ K# {2 R% R7 c4.4. DA 调试 & t) W& i' S1 a) X
4.4.1. 使用 STM32CubeIDE 调试 NS 工程

$ E. F" G6 l7 S+ i在 STM32H563 处于 Closed 状态下时,SWD 口默认是关闭的,此时是无法调试代码的,若想调试代码,必须得通过 DA 认证重新打开调试端口,好在这一功能已经集成在 STM32CubeIDE 中了。接下来我们将使用 STM32CubeIDE 调试 NS 工程,在 NS 工程的 Debug Configuration 中, 在 Debugger 选项卡下 :
+ o0 a) x, ^4 U% d+ x0 n- g, _' k5 }1 U
微信图片_20240229165121.png * G( q( K7 N, j

( h; s' g% M2 m/ u6 g如上图所示,在 Reset behaviour 的 Type 下,选择 software system reset, 然后在 Debug Authentication 下勾上 Enable,在 Key path 后面选择之前生成的私钥文件 : C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Keys\key_1_root.pem,在 Certification path 后面选择之前生成的证书 : C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b64, 然后 Permission 后边选择 Debug Non Secure L1,然后点击 Debug 按键…
1 V5 ~+ [  y9 i  G; ~' s
; y7 I7 ~& @1 [ 微信图片_20240229165116.png - ]0 P. B  e: H0 t3 h2 [

* i" d+ m0 P$ j; y$ ]# \. O如上所示,程序在运行在 NS 工程的 main 函数开始处则停下来了,接下来你可以选择单步调试...
0 \* g0 p0 ]8 B8 ?6 a% [- }( q+ S( R
4.4.2. 使用 STM32CubeIDE 调试 S 工程+ ?0 J/ O- G$ o1 v# e7 `# C1 K' N
S 工程的调试配置有些许差异。
# p5 s4 D$ d4 a( {+ y3 @6 _" v
1 c/ Q3 j/ L) v$ h 微信图片_20240229163237.png
. b2 C# P0 {$ C2 g; O
. R3 y; b3 y7 r3 t3 Z如上,Reset behaviour Type 为 None,同样在 Debug Authentication 下设置之前生成的私钥和证书,Permission 变为 Debug Secure L1。
1 k& v9 T2 e* G$ S) ~5 s; u0 O' I) R3 c+ L- P5 i
微信图片_20240229163234.png & H" `+ Q/ q% j3 x
; z( ?" Z6 d# G- Y" D
然后拖下来将 Verify flash download 之前的勾去掉(如上图所示)。$ A5 f8 C% q+ O  ~5 G7 h) ~" j

* }& _7 v. t% I" ^* T( i4 U 微信图片_20240229163232.png
& ~; L8 ^& g) |1 ~/ F  d+ y
2 d& u! _1 A: w8 M/ @; w1 u% d如上图所示,在 Startup 选项卡下,在 Load Image and Symbols 列表中选择当前工程的 Image,然后点击右边的 Edit…按键,然后在弹出的对话框中将 Download 前的勾去掉。点击 OK、Apply、并 Closed、关闭当前窗口。接下来在 S 工程中的源文件中的 xxx_it.c 源文件中的 systick 中断入口处设置一个断点, 如下图所示:
6 g, Z$ z( x' g( i4 [% [- r5 C/ D/ s" y* `- C; k+ t- U2 Y
微信图片_20240229163228.png
  P/ b$ H* q# Y& y2 x; X0 Q# H: k; {
微信图片_20240229163225.png 7 x) `0 ?1 ]8 m" k* Q
2 y% j7 }+ m7 s" `8 w& D
微信图片_20240229163222.png " t1 F+ g# Y$ w5 Z' ?1 W: _
$ {1 {6 u" t0 [" p
如上图所示,程序运行在断点处停下来了,接下来你可以单步调试 Secure 工程了。这是一种完全没有破坏现场的调试方法,适合当出现问题后,直接去查看出现问题的代码行。当然在调试 Non Secure 工程时,你也可以按此方法来配置。也可以达到不破坏现场的效果。! b4 m4 ?( V9 M1 o# k8 r
8 k) F. L, b, L8 @" _% V, H$ R  i
4.4.3. 在其它 IDE 中进行 DA 调试" |. T' u4 m2 V2 ~! w6 d& D1 z4 M
由于其它 IDE 当前最新版本还并未将 DA 过程集成到 IDE 中,因此,需要利用 STM32CubeProgrammer 进行 DA 认证通过之后,才可以用 IDE 进行调试。
6 m( V/ H) i9 ~) g' u6 d' {* q- o
# |  [* [% _1 c+ H& d( \2 B1 \
接下来我们将使用 STM32CubeProgrammer 通过 DA 来重新打开调试口。
; M2 i" r5 W4 d( r- d/ ~9 Z: _! u1 G- ?7 G$ Q! ?! A$ X
微信图片_20240229163219.png
. o- l9 S* L+ [2 s% n+ c8 w. k
9 c( l* c* L1 j2 B- a1 P在断开连接的情况下,在 STM32CubeProgrammer 中,选择 DA 选项卡,然后点击 Discover…   W6 {$ {# d" _2 }+ i' q" X
" J' W. l9 [6 w+ K1 r- O) }8 i
微信图片_20240229163215.png
( w0 ~* T; G4 ?6 U9 [, ^5 t" I# k6 t; ~) ^, y, D- [! v1 t
与 3.5 节类似,在上图中,选择之前生成好的私钥文件 C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Keys\key_1_root.pem,以及证书文件 C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b64,然后点击 Continue 按键… 0 b$ y% N- @; s! x
& G& [! `- y% v6 \
微信图片_20240229163212.png
3 q; z; @) q) H; [& K. I: T' E8 [% i- T6 P8 I5 S
如上图所示,在下面新显示的内容中选择 Non-Secure Intrusive Debug(Level 1),然后点击 Execte 按键… 7 t( ]- q% M: y9 K6 Z% q  l
* M" B; |- k* h, [1 U
微信图片_20240229163209.png
0 m# H# Y6 z6 ~; x: E* I

& u' y$ |" ]& d+ \( v如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接。
4 @! D/ t" \- R9 e; n5 K; [+ V" |+ q5 x4 a
接下来就可以选择你所使用的 IDE(如 Keil、IAR)调试 NS 工程了,如下图使用 IAR 调试 :
( Z/ J2 q+ l8 l9 {% A" ?8 o* w3 L9 A+ Q0 s- p/ c) B
微信图片_20240229163206.png 3 j* Q" s) l( J3 L  H% U

# o- w5 S6 Z8 D3 l, {& ~2 k如上图所示,选择 Attach to Running Target 可直接 attach 上去查看当前运行的代码行。当然在之前 DA 步骤中,你也可以选择调试 S 工程 …# \% g- u6 l& w! ^8 y
6 E) I: G3 s7 P
微信图片_20240229163203.png   j! k' t' u  T$ p
, w& x: ^, R2 R, j' @) m8 n( [
如上图所示, 在下面新显示的内容中选择 Secure Intrusive Debug(Level 1), 然后点击 Execte 按键…* Q5 D: B" c" L  J6 w5 k5 m

3 ~* _3 |7 R2 J1 S( L 微信图片_20240229163158.png 1 V2 U8 Y- {1 s' U. t# R

; E4 W/ `/ @1 t# T如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接,接下来就可以选择你所使用的 IDE(如 Keil、 IAR)调试 NS 工程了。8 h' @, c/ F. A( M0 p2 ~2 O$ b
2 D/ E0 r4 y; ~9 V: I

1 f4 d4 T/ k- s五、还原5 h+ T  D2 q6 ^, @/ \& \7 O
还原的过程参考 3.5 节,步骤完全一致。最终还原成功后,全片 Flash 内容已经擦除。最后,将 TZEN 直接修改为 0xC3。
# y* i0 ~% T$ I' t: n0 a5 F
( X+ d( W# V" Q) H# _0 o6 A* G 微信图片_20240229163155.png ) d5 k- ^0 P+ l

7 }. H+ O& W, _( U% F* p2 A6 G6 V至此,芯片完全恢复成原始状态。另外,DA 回退过后,之前预配置的内容也自动清空了, 因此,后续还需要重新进行预配置 (provisioning)。% ?/ T* b' i) v. G

" K' z- j0 j1 J3 v6 E; n+ b
& ~& C1 A' o9 D: t- ]转载自: STM32
" Z! @: ]% s; I如有侵权请联系删除. [+ n, y7 e5 E
$ j6 p' }8 b# q
$ a* G" C& Y# g+ X
1 收藏 评论1 发布时间:2024-2-29 16:53

举报

1个回答
xu@xupt 回答时间:2024-3-3 12:31:34

值得收藏

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版