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

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

[复制链接]
STMCU小助手 发布时间:2024-2-29 16:53
一、前言0 {! s8 e  B& k, D' P1 h
STM32H5 是 ST 2023 年新推出的产品系列,与以往 MCU 不同的是, STM32H5 推出新的 product state 功能特性以替代以往的 RDP 功能。
8 ^% a6 U' I/ w) Y9 E
8 c- P" d8 d  z  ?7 y0 x 微信图片_20240229165316.png
6 M) w7 j! s# h% m9 ], G
0 s3 e# x: @9 u: g
如上图所示,product state 有如下状态 :
: s+ s7 j+ O* L- L3 t: G2 ]$ D

3 O4 \# `  r% G. dOpen(0xED) : 完全 open 状态,相当于以前的 RDP0。
2 t4 h. I. j0 t% N

3 z! e+ ?* \* y" E, \% `7 I3 DProvisioning(0x17) : 此状态是专门用来做预配置的。
/ ^' g9 U0 b% l0 y  @# `' P
: y. w# j7 U& e7 k9 s6 \8 BiROT-Provisioned(0x2E) : 用于 STiROT 或 OEMiROT。3 \9 {0 |7 K4 T
5 h' L7 C1 f; c) G1 q
TZ-Closed(0xC6): Secure 区域关闭, 相当于 RDP0.5(仅在 TZEN=0xB4 时有效)。
. S) W& M# T5 F& [
! R! u$ ?! T" J+ j+ f  |7 QClosed(0x72): S 和 NS 区域均受到保护,这点有些类似于 RDP1,此时调试口没法对其直接访问,但可通 过 DA 打开调试口或回退,这一点有点类似于 STM32U5 上的可带密码回退的 RDP2。
8 l8 P' e- {  L+ M/ U$ \& h& w! q; ?& g8 b2 [8 C6 B# k5 \! U( g) c
Locked(0x5C): 完全关闭芯片的外部访问,相当于以往 STM32 芯片的 RDP2 保护等级。# N7 }/ K7 b+ [% \
9 l0 h' j8 ?  g/ q  m( F
整体如下图所示:* e( _1 y+ s  p) m! p
( Q+ S  w+ p1 q* m3 D7 s* D% s
微信图片_20240229165313.png
: k+ @* r5 }+ {2 r* z1 i6 b

8 W8 B6 z& R; l& D) \其状态切换如下图所示 :
3 A4 z4 |, Q3 x% w
$ W/ q( n7 \6 s3 V' t$ w0 b! C+ [ 微信图片_20240229165309.png
+ i! A7 R2 j" h5 Y) I2 e; ?( e

1 D; j7 S9 m* V6 X1 w2 S/ Q3 r; W如上图所示,product state 从 open->provisioning->iROT-Provisioned->TZ-Closed->Closed 如此从左到右是可切换的,但是,要从右到左如此回退,则必须要经过 DA[Debug Authentication]过程。如上图所示,经过 DA 后,要么完全回退到 Open 状态,要么部分回退到 TZ-Closed 状态。
- q2 y- Y& n& p: Z9 a% S2 W, E# Q1 s: t+ G6 P2 _
所谓的 DA,就是通过向芯片提供证书(STM32H503 是提供密码),通过芯片的身份认证后,允许向 芯片发起 product state 状态回退,或者重新打开调试口请求(仅当 TZEN=0xB4 时)。
: L2 z1 U2 A9 n) h" E* v/ w

" _+ X( ?; g# M9 n" s" x6 y) ]由于新的 product state 和 DA 的引入,所有 STM32H5 开发者都必须掌握 DA 的用法。因此,本 文档针对 STM32H5 初学者,演示当 TZEN=0xB4 时, 使用证书来完成 DA 过程。
0 K1 F; D( p' R4 N+ b
# T) E" Q' s6 d0 j8 f' U
二、准备工作) M0 V# i, a' _7 Q6 P) u/ N+ N
开发板 : NUCLEO-H563ZI
& R' w- h, l( ^2 k6 ]2 l' H$ N2 S; C0 V( G0 P, C' a: P: d
微信图片_20240229165305.jpg , e6 T) T, k/ @. S1 d
8 q& T- B  l& n" M! q$ N" r( U
软件包 : STM32Cube_FW_H5_V1.1.0
6 u) X( S  a3 E) O2 N- g1 a
, O: m0 p* P# Z# A3 f工具:
: @4 Z: x7 x+ GSTM32CubeProgrammer v2.14.0$ P# j. x7 u- _# H) C9 V
Tera Term 串口终端显示6 ?$ u. ?" Z7 y! M
Trust Package Creator(安装 STM32CubeProgrammer 时一并安装, 注意勾选)( x  j' Z: Y: e3 W) t9 ^6 M
IDE: STM32CubeIDE v1.13.0# w0 w8 f) \$ |
STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下,在本动手实验中,我们 默认将其放在路径 C:\workspace\目录下。
0 O+ l( N6 f8 T) u7 ~) B! {+ i9 D+ L; E& Q  F: c# b# ~3 D
三、生成 OBK 并测试
4 Q  ?& c4 f1 F在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA,在此目录下,已经包含了自带的默认 obk,密钥以及证书。其实 我们可以直接使用这些 obk 以及对应的证书和密钥,这里我们将重新生成一套,并测试它是否 OK。4 v9 [" }7 v" H( F2 |! D! |; u8 U

3 j* C" S' e- l3 S; S. ?3.1. 重新生成密钥对打开 TPC(TrustedPackageCreator)工具
, j: i- d1 D* _; ?2 a9 \% g/ H7 P$ z  q9 X( H$ f
微信图片_20240229165302.png
1 [* [7 i' u# H4 V" c6 w9 o' }6 m1 d6 `) I' v% N
在 xml file 处,导入 DA_Config.xml 文件 :
. ^5 }6 e& g6 h  m. P  |C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml( L8 U- l) P0 _1 H4 @3 c- o
如上图,在导入 DA_Config.xml 文件后,点击 Regenerate 按键后,将在 Keys 目录下重新生成公钥私钥对 :: U  Z/ D5 `/ t
- K( t3 ]  R, R3 n8 V
微信图片_20240229165259.png
  }, c; M6 B$ P4 W. V$ y: |
" K  E" S7 {: [; n
这组密钥对就是接下来需要使用到的密钥对了。2 Z: i8 x6 V2 f) u& X; m9 z, W
其中 :- w* y" K; o, E* o* O
Key_1_root.pem 为私钥
( Z" w5 T% ?) [3 D$ b1 y$ qKey_1_root_pub.pem 为公钥
) p/ r) U3 J, y0 U
- b. H; C3 O3 ~3.2. 生成 DA OBK 文件
% l5 {9 t: ?. j& b  P1 }接下我们将创建 DA 的 obk 文件 :1 l' p1 D: d  b5 P

7 o* g& B% y: d, `' y+ o$ f 微信图片_20240229165245.png ; o* O2 M) I4 t8 O& l
# |- C; w7 A+ q, m- ~0 ]$ K
如上图所示,继续在 TPC 工具中,在 Permission Mask 下,激活允许的操作许可,被激活的就是 DA 认证通过后,允许的操作. 然后在 Output File 处选择输出文件。我们使用默认即可。然后点击 Generate OBKey 按键,则在 Binary 目录下生成 DA_Config.obk 文件 :
7 [+ @. v1 n! V: I1 D) x; @) K" t
微信图片_20240229165240.png
. e! x: |# Q. F: J8 h
0 A/ V4 ]5 i+ d% U9 z这个 obk 文件就是我们后续将来做 DA 预配置(provisioning)的 obk 文件了。
! b) ~+ x: E' a* Q6 V% {" q
' a: a8 P: a) u0 M: a3 q; u% o
; e" y: q  T3 K2 I) c2 y1 {6 c
3.3. 生成证书
5 `4 Y- `2 ?2 P$ C0 I5 v$ w, Z8 v接下来我们继续用 TPC 工具生成证书。6 e* e7 e1 A& c9 O
/ b" A' s! J* x( x- E
微信图片_20240229165237.png
1 g! [+ I) t1 \3 C
: D9 E! m$ L/ u  x  D- j
如上图所示,在 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
/ W$ A/ h- u: r8 j+ I& r. j$ z5 S$ {* |; }

% l7 n4 Y4 p4 N2 j' j而在Root Public Key处则选择之前生成的公钥文件:C:/workspace/STM32Cube_FW_H5 _V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root_pub.pem
. v3 A' {1 L6 U% q9 d) F/ v
9 J4 y" Q! o* ^+ F/ d* ?# B
然后在 Permission Mask 处选择此证书所允许的操作许可。我们将 Full 回退 to TZ,以及Secure/Non Secure 下的 Level 1~3 的 Debug 权限许可全部打开。1 N0 P% e3 B/ V5 A

7 L* {+ u  n$ k9 f  a9 t: h  |
在 Certificate file 处选择输出文件,我们选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Certificates/cert_root.b64
$ _- W- E- z& X- m4 s& f即在 Certificates 目录下生成 cert_root.b64 文件,最后再点击右下角的 Generate Certificate 按键,最终在 Certificates 生成了 cert_root.b64 文件。
9 r+ L& b2 W) u2 a
! B' n$ I8 s- G# P4 d, ~' l 微信图片_20240229165233.png 3 {' ], F" k0 {0 f; d% O

0 s+ Y9 [+ P; `1 S9 b' E如上图所示,在 Certificates 目录下将同时生成两个文件 : cert_root.b64, cert_root.cert。
7 {) Q9 E. ?, v: s. @5 H5 u" `其中 cert_root.b64 就是我们需要的证书文件了,它就是根证书。它将在后续步骤中进行 DA 时将会用到。而另一个生成的文件 cert_root.cert,我们并未用到它。
& R( E9 _' D5 o- G, V! t8 g, d# E$ _) ~" V6 k
$ @# J+ B; E8 R% U, Q
3.4. DA 预配置 (provisioning)2 n9 E% b* J9 i3 F" {
接下来我们将做 DA 预配置,在此之前我们确保使能 Trust Zone 功能,即 TZEN=0xB4。
( i9 F" X  L0 e0 O. I( g0 l% q" @# o  }; D7 [# g6 U% s
微信图片_20240229165229.png - p/ f- b, f5 o8 Y

* A; ]8 s$ ]) a( G# m# S0 a如上图所示,使用 STM32CubeProgrammer 连接芯片,并将 TrustZone 打开。
4 e- y3 h7 _; Y然后将 Product State 切换到 Provisioning 状态 :: h3 e- ?: F* [: g* a$ r
6 \6 y6 Y2 H: N2 i! _* X
微信图片_20240229165226.png + n6 Z$ a$ L8 k/ [* u+ r4 x/ Q
( b+ ?$ F8 a5 n3 q
接下来正式做 DA 预配置…
! R$ i+ ^) t' E$ m1 }3 s* R& t, A7 M2 i8 o& n$ R
微信图片_20240229165223.png ! ~% j; A" Y5 S: Q' P
  {  T# Z! `# j* K' w
如上图所示,在 STM32CubeProgrammer 左边选择盾牌图标,然后在上方选项卡处选择PROV,接着在 OBKey file path 处选择之前生成的 DA_Config.obk 文件 :" \' p  y1 }! h3 l* H+ ?
( M9 @6 U, I; E
C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Binary\ DA_Config.obk
! \. p3 ^) @! d4 R5 G/ Q
6 r; L) G1 T  T+ g8 \: @" y
! G5 q6 I; c; g' D5 m  W* d0 h2 [
最后点击 Start Provisioning 按键…) M" X+ w% E" \% L& j9 b5 V1 |

/ y/ K/ _4 S. [( V( H2 Q5 J 微信图片_20240229165219.png
2 r6 ?9 n: o/ z3 B5 E- U, z& b8 ]) d& k/ s
成功时,将弹出消息提示成功。此时表示,DA obk 文件已经预配置到芯片内部并且已经成功了。然后断开 STM32CubeProgrammer 的连接…0 V2 a3 z4 T4 G0 w3 n
+ R2 z% |. Q' S2 }8 H
微信图片_20240229165211.png + A0 Y' {$ @+ B& n

  D  \) U4 v7 r& t2 G如上图所示,点击 Disconnect 按键,确保 STM32CubeProgrammer 已经断开连接。接下来我们将尝试用证书做 DA 回退… & H7 s) A8 o9 @  [5 R

9 i* m0 R7 a5 E& t0 {! `+ Z4 }# M
! \0 c+ }' K" V, q
3.5. DA 回退& Z0 K" k4 C1 a4 K% i
6 f) |, D' i* b. {
微信图片_20240229165207.png 8 [8 @: S9 O: `6 h4 C( _

3 X6 F! o/ |) k. @如上图所示,在确保 STM32CubeProgrammer 断开连接的情况下,左边还是选择盾牌图标,上方选项卡处选择 DA,然后在界面中点击 Discover 按键…
2 n2 R6 o* |3 u0 X5 a. a3 C- U% b; E$ L2 g) s2 H
微信图片_20240229165204.png
3 q# x2 m6 C2 x) ~3 }
. L* P6 X4 T) ?2 y$ Y9 j
如上图所示,在接下来的界面中,在 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.pe5 d8 \  E: D( X# Z) P" P
/ d" d, W5 n6 z* {' a
如上图所示,在接下来的界面中,在 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
& y: U9 P) u* i4 i; N
9 }- V  i6 M) T4 H; O  N在 Certificate File Path 处选择之前生成的证书 cert_root.b64:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b6
! ]$ k2 |1 @7 W/ C
3 _# h' y. u3 q$ L% |# z% O7 g
然后点击右边的 Continue 按键…
  D# P) [1 c% F6 i  }1 Y: D
7 r0 k' ]' V. [! t* p' o
微信图片_20240229165158.png
! a* T$ Z  q' ~8 ^+ J( k& _+ r# U5 P+ z/ Z
* D; O+ h1 c3 F& Z. ]" `; z如上图所示,在下方新显示出来的界面内容中,在左边选择 Full Regression, 即你想要的操作,然后点击右边的 Execte 按键…
( \9 {# \4 h' v- U9 {, r% q% A. l; t. U' O, E$ n
微信图片_20240229165152.png
4 k; t4 L* w. j$ [( Y4 s, r
+ j" V& i  L6 K& G3 A
如上图所示,弹出界面显示 DA 成功。
0 {! |# v) Q& t7 e
$ h! \$ d2 ?" b( z! n$ L这也就表示,之前生成的私钥文件 key_1_root.pem + 证书文件 cert_root.b64 正是匹配之前生成的 obk 文件 DA_Config.obk 的。
& h* N" X5 s- r* v, U9 X% g" L- P% v$ w! N( c
其中 DA_Config.obk 文件和固件 hex 文件是要给工厂烧录芯片用的。而私钥文件 key_1_root.pem + 证书文件 cert_root.b64 则是需要保留,将来工程师需要它们来做 DA 回退和 DA 调试用的。) _3 Y0 {: ]* B. K
+ y( y  v& b& P$ M
这里需要注意地是,如果上述 DA 回退未成功,则表示证书+私钥与之前预配置的 DA obk 不匹配,需要重新执行 3.1~3.5 节。直到 DA 回退成功为止,否则切记不要进入到下一步骤,不然很可能会由于证书不对无法回退导致芯片废掉(除非用户代码可以执行回退)。. e3 I. F  a$ Q# a4 q0 T

# M% c. b0 s: z" N* r- `
; Y& `& _( |5 J. {
四、运行一个程序并 DA 调试
" B$ h7 u: A) l7 R" Z2 B4.1. 在 Open 状态下运行一个示例程序
+ X; S9 R6 V" i( t5 F  t4 @
使用 STM32CubeProgrammer,确保 product state =Open, TZEN=0xB4:+ G& Q8 C3 I. j5 M! l' t8 V

% N+ `8 ]' a2 H 微信图片_20240229165146.png 3 I' p# P9 c& _
3 `& U1 y* Q" [, ~3 Q* p6 X
并确保:SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F, SECWM2_PSTRT=0x7F SECWM2_PEND=0x0:4 s+ K6 L: p2 \

4 c- o1 C6 c, |: p4 i 微信图片_20240229165142.png % A; r+ E$ u& C' G* ?

3 g! J, s+ c5 J然后使用 STM32CubeIDE 编译 STM32CubeH5 包下的示例工程:STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Examples\GPIO\GPIO_IOToggle_TrustZone\STM32CubeIDE 分别先后编译 S 和 NS 工程并烧录对应程序,并复位运行。正常情况下,可以看到板子上 LD5(橙色), LD6(绿色)两盏灯在来回闪动。即表示测试程序运行 OK。
7 Y% W/ O+ D: k0 H) j$ C1 R
3 U" R1 s+ d8 j; Y# q' d
5 S! u; ~- x# O1 p* J$ o3 b  {
4.2. DA 预配置7 J  J( e- L: j# G
接下来我们参照之前的 3.4 节,将 product state 切换到 provisioning 状态, 然后进行 DA 预配置。
$ j' ]( I8 M* d! I9 k/ l6 F
- \/ s0 x, S9 S* P' X" @- A 微信图片_20240229165137.png ) ^5 t4 v/ k) K# [7 y( r
4 |4 [( g0 i9 r; |( g, ?3 U& X
如上图,切换到 provisioning 状态。
. y1 I' M2 u, z/ z; b
) ?# l" |( J4 |' N! @, }2 B 微信图片_20240229165132.png
. \  \9 k% M# i% r3 a# |$ J8 R9 f" Z
如上图所示,导入之前生成的 DA_Config.obk 文件,然后点击 Start Provisioning 按键,进行预配置。
) ]% w: x9 D' g
/ ?( Y9 n: d3 ^5 y9 r 微信图片_20240229165128.png " d$ P0 J% ~2 N' Q' K

# D& v+ b+ |. i& P0 K0 n9 k) E7 T( W弹出上面显示模式,则表示预配置已经成功。) G- ?- |/ y4 J5 r$ t+ s

7 R  u8 s1 v4 W3 V6 v$ T
- _: r& g! n8 ~8 K2 n
4.3. 修改状态到 Closed 状态 ' S" d, w2 j& W% F& Y0 _' d, V

. g# L& X# B/ u$ G% O; Y7 A* d1 M 微信图片_20240229165124.png 8 J4 B3 p1 g/ q  K; p+ y4 L, [

- P" |6 d1 D& M9 o如上图所示,接下来将 product state 修改为 Closed 状态。此时 ST-Link 连接会自动断开,表示芯片内部调试口已经自己关闭了。
+ l3 ~4 W, [) L  T此时查看板子,LD5、LD6 两灯依旧来回闪烁,说明程序在 Closed 状态下运行正常。只不过此时调试口是连接不上了。
$ M3 S# S" @7 Y3 O6 Y0 q" g9 P
5 X: e. v9 v# o7 m5 n' i4.4. DA 调试
& m' k& d+ t3 \4.4.1. 使用 STM32CubeIDE 调试 NS 工程
4 {4 E  q5 o- F5 @( N, L2 h
在 STM32H563 处于 Closed 状态下时,SWD 口默认是关闭的,此时是无法调试代码的,若想调试代码,必须得通过 DA 认证重新打开调试端口,好在这一功能已经集成在 STM32CubeIDE 中了。接下来我们将使用 STM32CubeIDE 调试 NS 工程,在 NS 工程的 Debug Configuration 中, 在 Debugger 选项卡下 : ! j/ f+ V, K, J7 i( A

- j# t7 q/ D( ~! w! w" X 微信图片_20240229165121.png + |* ^5 I9 P, Q
, n+ A( S$ @4 g+ s
如上图所示,在 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 按键…
7 v. d( d8 z" b! i' P: r! K2 U( ^. Q/ }8 n3 r/ p
微信图片_20240229165116.png
, K5 A, ?/ W$ j* E) j: ~( E
( T2 O6 E3 C/ Y5 C8 A6 W如上所示,程序在运行在 NS 工程的 main 函数开始处则停下来了,接下来你可以选择单步调试...
( N8 h) v# R- V/ j7 A$ a' d/ N) }' s' }) q2 X7 v* f
4.4.2. 使用 STM32CubeIDE 调试 S 工程$ }& }/ X- e1 O! [# h
S 工程的调试配置有些许差异。0 X8 w4 W' S% D- a! \4 o
: L, ^: w) V# @
微信图片_20240229163237.png
4 X5 H& L# I: Z2 O6 L/ G5 v( U# N, ~: ?* V
如上,Reset behaviour Type 为 None,同样在 Debug Authentication 下设置之前生成的私钥和证书,Permission 变为 Debug Secure L1。
! @6 N) a- F1 l' m1 r; z+ E3 x; M+ k% I$ _
微信图片_20240229163234.png & }* q7 X! G1 ]; ]* @

  w8 y/ j3 D4 g然后拖下来将 Verify flash download 之前的勾去掉(如上图所示)。# M: p6 r/ E. }

1 a) v+ D, @# G7 N) R" M5 a 微信图片_20240229163232.png $ Q7 q+ w: ]" M7 q8 z5 }' _
3 Q* a( E/ h9 \: O
如上图所示,在 Startup 选项卡下,在 Load Image and Symbols 列表中选择当前工程的 Image,然后点击右边的 Edit…按键,然后在弹出的对话框中将 Download 前的勾去掉。点击 OK、Apply、并 Closed、关闭当前窗口。接下来在 S 工程中的源文件中的 xxx_it.c 源文件中的 systick 中断入口处设置一个断点, 如下图所示:# L/ u2 m# J/ V8 ?6 I% a

: E) |3 Z/ i7 X0 b- @0 \9 Y  _ 微信图片_20240229163228.png 7 a6 a# Z* B3 a0 F( t& B1 z
1 F- P) @+ z* i3 Z  f' o
微信图片_20240229163225.png . @9 N( ^- s  F$ e
6 o, G! Q* ^0 E, q4 q# Q/ e
微信图片_20240229163222.png
3 A! `- |( P( g0 L$ y7 w
) v+ o' S; \! B* E) z- j如上图所示,程序运行在断点处停下来了,接下来你可以单步调试 Secure 工程了。这是一种完全没有破坏现场的调试方法,适合当出现问题后,直接去查看出现问题的代码行。当然在调试 Non Secure 工程时,你也可以按此方法来配置。也可以达到不破坏现场的效果。, b* b- Q3 U3 N5 M  I

& j7 p3 g, ~* M7 ~5 c4.4.3. 在其它 IDE 中进行 DA 调试
+ W4 l" |" F3 V, P! ~+ c& X由于其它 IDE 当前最新版本还并未将 DA 过程集成到 IDE 中,因此,需要利用 STM32CubeProgrammer 进行 DA 认证通过之后,才可以用 IDE 进行调试。
/ O7 [1 p9 ~) Z* R$ f0 w5 i6 b6 I/ |& U% d6 `2 M
接下来我们将使用 STM32CubeProgrammer 通过 DA 来重新打开调试口。
& W, Q4 ^4 g+ y+ }2 _- k4 S. X5 K# F  S: Q
微信图片_20240229163219.png
7 Q# W7 g% w$ i5 P
. O  L# _0 D3 \9 r- A* x# b在断开连接的情况下,在 STM32CubeProgrammer 中,选择 DA 选项卡,然后点击 Discover… 9 c5 {0 G2 Z5 U& U4 o
: [; T) j& l- q" N! w$ g; x
微信图片_20240229163215.png
- v* n: }1 f' @, w, B( O$ B1 i& \$ F: G; f2 ?+ F3 U
与 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 按键…
8 w- O( U7 d$ N8 z, v  {% ^% N7 I- Z4 X; p0 N7 j2 h; R. F
微信图片_20240229163212.png
! ~, I* w  p, {. {. Q- u6 m% x
: ^: S6 q3 o1 D# U$ z; Q如上图所示,在下面新显示的内容中选择 Non-Secure Intrusive Debug(Level 1),然后点击 Execte 按键…
" h( p% D. ?  M0 I3 a+ `
0 l6 s( a% j; S- E  j0 q 微信图片_20240229163209.png ! R9 D( j& L3 l% Z
4 d, h) |2 @  k, c2 O
如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接。
5 L3 q9 I: D9 p* j8 I, K
$ }/ q# r0 ^- T0 R1 j; V
接下来就可以选择你所使用的 IDE(如 Keil、IAR)调试 NS 工程了,如下图使用 IAR 调试 :
' `- K& h) V, }( v. F+ t
$ p" s  r3 N9 a6 K* c" X 微信图片_20240229163206.png ' g% {+ F# [" N( _
$ Y8 b: B* r$ k1 U, p( k3 f
如上图所示,选择 Attach to Running Target 可直接 attach 上去查看当前运行的代码行。当然在之前 DA 步骤中,你也可以选择调试 S 工程 …  N- F$ c$ [. F' i8 y( F, `

2 e% M4 {0 i9 Z1 j1 z3 E 微信图片_20240229163203.png
  b7 A+ h: }7 `/ q# @
$ P  G$ A8 k0 o; ]如上图所示, 在下面新显示的内容中选择 Secure Intrusive Debug(Level 1), 然后点击 Execte 按键…
7 Q3 s4 g+ E# p) a; D) z
' p5 ~" f$ x9 H6 |, Z; j: V7 a 微信图片_20240229163158.png
! h: ^$ m$ ?7 ]3 d# v1 a3 ?3 K5 z
如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接,接下来就可以选择你所使用的 IDE(如 Keil、 IAR)调试 NS 工程了。
0 X+ l* h$ h/ U4 w( r2 p9 Z
1 O+ Z1 T! l4 @& a, L( _

1 L4 H% x/ V% ?5 M/ e# D五、还原
; G, J9 F' v) x7 r/ N还原的过程参考 3.5 节,步骤完全一致。最终还原成功后,全片 Flash 内容已经擦除。最后,将 TZEN 直接修改为 0xC3。
- f1 J) C  m9 c, l5 }. V, _5 F6 P
( W) V& C9 c# F$ x6 _7 w 微信图片_20240229163155.png 7 Z. A- Q( B7 l; M: ^8 ?

" n% J) j$ w2 @5 n; S至此,芯片完全恢复成原始状态。另外,DA 回退过后,之前预配置的内容也自动清空了, 因此,后续还需要重新进行预配置 (provisioning)。# V! K" T# i" M

/ c; X' m; b0 \  K
8 s3 O! ?3 f5 k, U4 Z: ^转载自: STM32! C# |/ a. L- V& U, P; S
如有侵权请联系删除& G# G7 I$ k5 H0 J
  e& w: W; U8 r. B
+ L% a8 ?3 a1 q7 P8 \- m3 S5 H
赞 1 收藏 评论2 发布时间:2024-2-29 16:53

举报

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

值得收藏

小可s 回答时间:2024-8-30 15:03:11

按照操作指南操作,disconver后卡死无法disconver使用DA回退,这可能是什么原因导致的

所属标签

相似技术帖

官网相关资源

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