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

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

[复制链接]
STMCU小助手 发布时间:2024-2-29 16:53
一、前言1 O. g0 g8 w7 v
STM32H5 是 ST 2023 年新推出的产品系列,与以往 MCU 不同的是, STM32H5 推出新的 product state 功能特性以替代以往的 RDP 功能。
, y; C$ \* U( R: F# i
' z0 d) F0 v* P+ U2 S, D3 M1 c# n- s 微信图片_20240229165316.png
" K+ `5 i  A. O' |- N# C

( f( Y1 j* ^1 R5 X如上图所示,product state 有如下状态 :6 z# _; X1 t* `7 @; ~  }! P

. ^, j" S0 V! a7 p( DOpen(0xED) : 完全 open 状态,相当于以前的 RDP0。
8 _1 \/ o4 x! \0 d

8 |& f2 J( y; |% G+ H) ?7 L( I+ ~Provisioning(0x17) : 此状态是专门用来做预配置的。 8 g, |! |4 E. s; ^

) P1 _% ^0 C8 qiROT-Provisioned(0x2E) : 用于 STiROT 或 OEMiROT。
- |% g- W" s  u. `  M- U

: _; I4 k, L- i, YTZ-Closed(0xC6): Secure 区域关闭, 相当于 RDP0.5(仅在 TZEN=0xB4 时有效)。 2 M0 R' v& |3 e* A) T7 I  n

3 K, f  Y. h; sClosed(0x72): S 和 NS 区域均受到保护,这点有些类似于 RDP1,此时调试口没法对其直接访问,但可通 过 DA 打开调试口或回退,这一点有点类似于 STM32U5 上的可带密码回退的 RDP2。
! ?8 n$ r( m4 ?' S
  U6 ?6 z% f: _$ KLocked(0x5C): 完全关闭芯片的外部访问,相当于以往 STM32 芯片的 RDP2 保护等级。( Z: Z, [: \! H' Y; K4 n  e7 n

6 B) \4 g1 c. ?9 ^* J" R$ d8 B# X9 Z整体如下图所示:5 ^; d! Z' W: |4 q4 M$ ?

9 m0 z2 |& H2 O8 r 微信图片_20240229165313.png " l: P1 ]/ l. n6 ?0 P

1 j% Z2 a0 i# S( ^5 ?7 d4 @5 A其状态切换如下图所示 :$ [. H, q+ c$ i  b1 C; Y  f
/ m/ N$ a8 P$ k+ S( x) r
微信图片_20240229165309.png . d0 m: T, h; v& x4 X
& u" H$ L1 K# P; R6 j- |5 |5 G7 E
如上图所示,product state 从 open->provisioning->iROT-Provisioned->TZ-Closed->Closed 如此从左到右是可切换的,但是,要从右到左如此回退,则必须要经过 DA[Debug Authentication]过程。如上图所示,经过 DA 后,要么完全回退到 Open 状态,要么部分回退到 TZ-Closed 状态。* D$ q/ e5 r/ E6 V( L1 W) k' {

$ E! d/ d  M4 W' w  ?: g2 c所谓的 DA,就是通过向芯片提供证书(STM32H503 是提供密码),通过芯片的身份认证后,允许向 芯片发起 product state 状态回退,或者重新打开调试口请求(仅当 TZEN=0xB4 时)。
& i) ?, V( v$ d+ w! e7 S' q8 Q/ W6 a
; G( S2 v8 D8 f7 k$ \" U6 y: P! M
由于新的 product state 和 DA 的引入,所有 STM32H5 开发者都必须掌握 DA 的用法。因此,本 文档针对 STM32H5 初学者,演示当 TZEN=0xB4 时, 使用证书来完成 DA 过程。
3 e- H0 N, P8 T! x& Q5 R& c: Z

0 j5 `8 H' ]! y3 j二、准备工作
1 j4 b6 F; m' ]8 m9 T- U开发板 : NUCLEO-H563ZI
; r7 z  C4 p, }6 J
5 P* C4 S9 w, y& d  \. S% W
微信图片_20240229165305.jpg   U4 G6 g' F% _+ T0 w% |. Y) C" A
* e& u2 F' Q. M% k' n( L
软件包 : STM32Cube_FW_H5_V1.1.0; Q4 G. F7 X4 x' ~9 ^" J2 x

/ z' ?+ C7 A6 E  D' @/ H9 c# z" O工具:6 g  Z* O. w& ?" `
STM32CubeProgrammer v2.14.0
1 O9 |9 x% r9 \* A  cTera Term 串口终端显示
# l  k4 Y( e" Q7 |- f: D% i; P1 hTrust Package Creator(安装 STM32CubeProgrammer 时一并安装, 注意勾选)
  _4 m1 B  h$ s. ]4 BIDE: STM32CubeIDE v1.13.03 R9 v. x7 l5 k/ U" H. `
STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下,在本动手实验中,我们 默认将其放在路径 C:\workspace\目录下。/ h3 t6 o$ F# S7 t3 ?  e) O( `; P$ }

/ o6 ?1 \/ |6 `三、生成 OBK 并测试# {  u# i7 M. \+ e/ q8 i6 F  e* I3 f
在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA,在此目录下,已经包含了自带的默认 obk,密钥以及证书。其实 我们可以直接使用这些 obk 以及对应的证书和密钥,这里我们将重新生成一套,并测试它是否 OK。/ y; C2 G$ S5 P
/ P+ U: Y/ L6 E; h. w
3.1. 重新生成密钥对打开 TPC(TrustedPackageCreator)工具 2 ^6 l# g' ~! \: a

4 C& s/ O' i6 v0 f9 o8 X4 u 微信图片_20240229165302.png ! x$ V% D6 q6 f

) z0 h8 A. P2 E3 }! Z- k在 xml file 处,导入 DA_Config.xml 文件 :0 }& t2 ?0 t7 m1 H5 C1 C
C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml7 K8 q5 Q0 R3 b  K
如上图,在导入 DA_Config.xml 文件后,点击 Regenerate 按键后,将在 Keys 目录下重新生成公钥私钥对 :
+ k' d; [7 c8 R9 N+ }5 A3 F* Z7 k/ X4 @* L# f
微信图片_20240229165259.png
( N5 e* j# H$ r! s0 Z. _0 F- P
8 d8 q. z, j+ C% t
这组密钥对就是接下来需要使用到的密钥对了。4 {9 ^5 _  A# W7 ~' T4 j% @
其中 :
) ]# S& i/ k, h/ q  g# D/ FKey_1_root.pem 为私钥
6 _1 w! A* B3 C- P3 T- aKey_1_root_pub.pem 为公钥
4 l0 n) @, h  {4 d* A6 \8 H: {. U: M, |2 X
3.2. 生成 DA OBK 文件
, [( r* n+ ~& c$ y! K) _接下我们将创建 DA 的 obk 文件 :  _* v# @8 x% B3 A  c+ |) O

: p% P0 Y* F. j4 F6 L" g; D 微信图片_20240229165245.png ! r  y1 C9 N  `8 l% [; q. C- M

9 |/ y+ w0 K/ ?* P5 @+ f3 Q0 m8 I( o如上图所示,继续在 TPC 工具中,在 Permission Mask 下,激活允许的操作许可,被激活的就是 DA 认证通过后,允许的操作. 然后在 Output File 处选择输出文件。我们使用默认即可。然后点击 Generate OBKey 按键,则在 Binary 目录下生成 DA_Config.obk 文件 :: b6 |# ^* ]; M/ Q
# h- _0 H; [. s( g( r; C
微信图片_20240229165240.png ' n; i& W; R6 U2 ^7 f" V# Y

. h& H8 B9 g3 ~这个 obk 文件就是我们后续将来做 DA 预配置(provisioning)的 obk 文件了。7 ?7 Y$ ]5 N! ?

" x" o6 Z4 d# V: v1 Y4 n

! s' r2 i( q; \8 {3.3. 生成证书
" w6 f) o( [3 Y4 t. H接下来我们继续用 TPC 工具生成证书。
4 H) e# c; r+ _2 E; P/ G7 o' V" X; w6 p$ k
微信图片_20240229165237.png
" d  ]! D- h6 U
: @/ b2 M: K/ g8 f& }& F
如上图所示,在 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
" Z' D4 L+ a- C% |" n) X
( M' i' t1 A( V) W4 `
0 s- V! ^% q$ g6 T/ h
而在Root Public Key处则选择之前生成的公钥文件:C:/workspace/STM32Cube_FW_H5 _V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root_pub.pem7 _6 L! A  j4 ^7 f( q( R

7 n& J( y7 W# [: n9 {! ?9 z5 q8 w
然后在 Permission Mask 处选择此证书所允许的操作许可。我们将 Full 回退 to TZ,以及Secure/Non Secure 下的 Level 1~3 的 Debug 权限许可全部打开。
" N' N% h* w" B8 @/ A- |7 U' r5 l9 M1 X6 [: S
在 Certificate file 处选择输出文件,我们选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Certificates/cert_root.b64
3 c% t5 f! _7 u8 l即在 Certificates 目录下生成 cert_root.b64 文件,最后再点击右下角的 Generate Certificate 按键,最终在 Certificates 生成了 cert_root.b64 文件。
3 v0 j! s' Z6 Y% @5 z( _, L: o/ u$ a* M0 \* ^) w
微信图片_20240229165233.png 3 l+ r) e! R# y  E& R$ w6 U# {

; E8 ~& ]9 w* s& t1 m* `如上图所示,在 Certificates 目录下将同时生成两个文件 : cert_root.b64, cert_root.cert。* f# ^/ g# y* c3 q
其中 cert_root.b64 就是我们需要的证书文件了,它就是根证书。它将在后续步骤中进行 DA 时将会用到。而另一个生成的文件 cert_root.cert,我们并未用到它。: J$ Z- n9 z7 ~/ U* ^3 G# r" L- \
8 s8 y3 Z2 O8 P# w7 t0 Q

0 l  j1 r1 I  `3.4. DA 预配置 (provisioning)# U" G7 s1 U' }* n" w0 c
接下来我们将做 DA 预配置,在此之前我们确保使能 Trust Zone 功能,即 TZEN=0xB4。7 B/ C) z; p/ Z8 i- u

: O0 w% v/ s0 L3 _& j/ u5 {% Z 微信图片_20240229165229.png 4 d% _3 W* ~' J9 p
( M- p+ C2 L8 }
如上图所示,使用 STM32CubeProgrammer 连接芯片,并将 TrustZone 打开。2 K; h' Q5 _& I: P' _
然后将 Product State 切换到 Provisioning 状态 :4 F" a6 @. p' ?9 _+ z9 M+ a# U

% D3 s- t) m; ~1 M" G- k 微信图片_20240229165226.png
1 V' I* J4 J: f2 X
+ H. E9 V7 w# T; g1 a. |, r接下来正式做 DA 预配置…( k, K! o; Z% c, m8 c
) f; Z4 L+ R$ n. N( f8 v2 M
微信图片_20240229165223.png
7 h' |  X2 {6 s5 }3 w- d6 J
8 l% L( L8 `; }, t. @如上图所示,在 STM32CubeProgrammer 左边选择盾牌图标,然后在上方选项卡处选择PROV,接着在 OBKey file path 处选择之前生成的 DA_Config.obk 文件 :
5 ^+ e/ N, h/ V6 x& {, w* w6 j) t  ?
C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Binary\ DA_Config.obk
/ {5 F6 L, p0 M2 m0 S/ [8 {: f( C. u! v! E8 G

4 N" y) K( O" w最后点击 Start Provisioning 按键…1 ~1 h4 o; ^- u/ N
. X$ s- @  A2 x/ s3 s+ G' ^! p/ m
微信图片_20240229165219.png   X% k" E: N3 K4 s/ }5 z

; g1 z3 I. Z2 w+ m成功时,将弹出消息提示成功。此时表示,DA obk 文件已经预配置到芯片内部并且已经成功了。然后断开 STM32CubeProgrammer 的连接…4 o, d+ N; N# T" |8 j
5 I7 Z2 w. J3 e' W; r& R/ E+ B
微信图片_20240229165211.png
2 R5 ]4 ]/ Q2 E$ H
7 F* j- W: G5 _0 l' A8 S如上图所示,点击 Disconnect 按键,确保 STM32CubeProgrammer 已经断开连接。接下来我们将尝试用证书做 DA 回退…
" Z4 S8 f& p3 |2 n# o6 q/ M" M# S% W% L# a0 @

! \- M: J8 z* D3.5. DA 回退
0 [+ n, M% E  I3 [% a" S
% J) {9 P$ L# _  ^* ^ 微信图片_20240229165207.png
" v, K! R( I4 X: n( M0 H4 O
# D  I3 m' l' Z0 ]
如上图所示,在确保 STM32CubeProgrammer 断开连接的情况下,左边还是选择盾牌图标,上方选项卡处选择 DA,然后在界面中点击 Discover 按键… 1 b- _# `" D6 _' M* {5 u* B
. t  O! x  S9 [
微信图片_20240229165204.png , q. q; e( C  I

. N! l& H+ B  s0 j& H" X5 E- s如上图所示,在接下来的界面中,在 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.pe2 P: i4 Y0 A4 L% X$ z3 j8 B6 l1 o

* O% a) h/ h% X3 N. E  s+ q如上图所示,在接下来的界面中,在 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. Z* ]# U, ~2 t

% v4 |. w8 |8 x' r9 Y' W在 Certificate File Path 处选择之前生成的证书 cert_root.b64:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b6. G5 w0 W( s8 F: j, T; e2 P

7 R- K+ O) D( q' `6 d5 K3 c然后点击右边的 Continue 按键…
1 y+ E' U8 K9 Q; g# I* c0 T' p) S& j6 R' P% T4 r/ c: S# X7 B
微信图片_20240229165158.png ! j+ x+ M7 b8 s0 m
* N# F/ v3 H$ m# r  f5 N/ r
如上图所示,在下方新显示出来的界面内容中,在左边选择 Full Regression, 即你想要的操作,然后点击右边的 Execte 按键…
3 @6 s: }6 |2 m8 J2 u/ ?! ~0 T9 h# ^
" h) ]' }; C  m  |+ L* ^
微信图片_20240229165152.png
% M8 s' y( h1 X) k" m. W: y

! F; M" r$ m% y; `如上图所示,弹出界面显示 DA 成功。
9 T: Y8 P, N7 l& \% F: C' s
5 S. b& N+ j& l这也就表示,之前生成的私钥文件 key_1_root.pem + 证书文件 cert_root.b64 正是匹配之前生成的 obk 文件 DA_Config.obk 的。
3 T# H1 _/ \2 n) G9 H: ?1 B
* v% D/ W2 l1 U( n. U) \$ y/ P其中 DA_Config.obk 文件和固件 hex 文件是要给工厂烧录芯片用的。而私钥文件 key_1_root.pem + 证书文件 cert_root.b64 则是需要保留,将来工程师需要它们来做 DA 回退和 DA 调试用的。2 G# |% q+ G$ r$ m" P1 ^' H( D* B+ e

# b+ a! B3 d. ?( P: N这里需要注意地是,如果上述 DA 回退未成功,则表示证书+私钥与之前预配置的 DA obk 不匹配,需要重新执行 3.1~3.5 节。直到 DA 回退成功为止,否则切记不要进入到下一步骤,不然很可能会由于证书不对无法回退导致芯片废掉(除非用户代码可以执行回退)。# |( C1 A) b( x1 {

0 z7 z1 c7 w! E% @& p( m9 p

' j! l3 T7 R/ X$ T四、运行一个程序并 DA 调试* U+ \* P" ~- }* C) K, G% R
4.1. 在 Open 状态下运行一个示例程序
; [+ p" A, }7 ~/ F. y/ E
使用 STM32CubeProgrammer,确保 product state =Open, TZEN=0xB4:
- f: d3 D% U5 f8 ]' }! `  }( ?  h0 F3 e: Q4 C; q/ Q
微信图片_20240229165146.png 1 l# Q) m6 W! A. x% z7 V

: B" A4 A  u( a: D: O并确保:SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F, SECWM2_PSTRT=0x7F SECWM2_PEND=0x0:
. u# W4 y  d' G/ ~; x- i" o3 ?- E- @( A+ v" ?
微信图片_20240229165142.png 7 E5 Q1 n3 A" H% T" K: P  P
  q, Q# |. M% r5 l! B6 w/ Q2 U- |) k
然后使用 STM32CubeIDE 编译 STM32CubeH5 包下的示例工程:STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Examples\GPIO\GPIO_IOToggle_TrustZone\STM32CubeIDE 分别先后编译 S 和 NS 工程并烧录对应程序,并复位运行。正常情况下,可以看到板子上 LD5(橙色), LD6(绿色)两盏灯在来回闪动。即表示测试程序运行 OK。% |# u+ }' |/ K) w, c3 O# s

2 k. [- z5 Y3 [! N

4 X- _+ u6 h5 T* J- T4.2. DA 预配置2 d: q5 B8 [+ C" _/ s
接下来我们参照之前的 3.4 节,将 product state 切换到 provisioning 状态, 然后进行 DA 预配置。 2 g5 W$ A# T# a$ W
9 S/ ]' ?! b, e0 C$ I) h
微信图片_20240229165137.png
! d" X; P; n. v+ z$ U6 S
0 d7 @. x  c, J! B& b8 Q/ D# ]: D) p0 U如上图,切换到 provisioning 状态。
. L: N/ q5 @$ k2 t7 k( @4 \6 z, F3 z1 x! ]0 I
微信图片_20240229165132.png
0 S, _3 Y* Z+ \7 z
+ E( N# |( M6 q# i. `) c2 _* [如上图所示,导入之前生成的 DA_Config.obk 文件,然后点击 Start Provisioning 按键,进行预配置。
2 A( h9 U! k& Q! c* {5 Y# T
" m6 n2 @- H$ a8 f& N" ?: u 微信图片_20240229165128.png 9 C4 J% q5 h  F

! g! I  u# f# C/ d弹出上面显示模式,则表示预配置已经成功。- d9 q; a; ^$ v) W3 `2 ^) s, L9 V

- b" @% X% P& D" u" i$ O: ^

; g  c; f& Y# k- o4 B' [4.3. 修改状态到 Closed 状态
4 V- `) _0 K: h3 d
* c: \4 E( z' d+ d) M, V 微信图片_20240229165124.png
: E2 l' Y/ x- s6 J' d3 A7 }
7 u3 ?! r" C  ]# b4 U
如上图所示,接下来将 product state 修改为 Closed 状态。此时 ST-Link 连接会自动断开,表示芯片内部调试口已经自己关闭了。
' ]) b; W* A. p  U0 t/ m此时查看板子,LD5、LD6 两灯依旧来回闪烁,说明程序在 Closed 状态下运行正常。只不过此时调试口是连接不上了。+ O7 h; X8 G$ r5 }7 B) E

' o* C% A# M0 B# ?4.4. DA 调试
$ U4 T2 J+ f3 F$ x9 O% D; ~7 k+ q' ^( o4.4.1. 使用 STM32CubeIDE 调试 NS 工程
" v4 e2 N) y' I# J
在 STM32H563 处于 Closed 状态下时,SWD 口默认是关闭的,此时是无法调试代码的,若想调试代码,必须得通过 DA 认证重新打开调试端口,好在这一功能已经集成在 STM32CubeIDE 中了。接下来我们将使用 STM32CubeIDE 调试 NS 工程,在 NS 工程的 Debug Configuration 中, 在 Debugger 选项卡下 : / l- G1 e& b! b8 m3 R# J* n) K# h2 Y3 O

  n# D0 J$ A/ ?" z 微信图片_20240229165121.png
+ I8 ]1 d" w- m" z. [
+ w6 T0 H7 I  ]/ h! K- 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 按键…
3 q5 p) H; D+ f
+ X, ~: a* F) J" }- t7 N 微信图片_20240229165116.png ) C6 N" W% ?* {' z6 M
& n! H# v. h) g1 X: i3 J7 l
如上所示,程序在运行在 NS 工程的 main 函数开始处则停下来了,接下来你可以选择单步调试..., @! o/ V- J$ U4 _4 D7 P

3 m% ?6 p( }  X+ A8 n" Z
4.4.2. 使用 STM32CubeIDE 调试 S 工程+ L& W# r# F9 q
S 工程的调试配置有些许差异。
6 L& f. j, @. F5 p- U1 ^  q! Z+ @1 e+ j8 Z
微信图片_20240229163237.png
/ U6 C5 O/ w! b; K% K! u) z. K8 J* R
; r1 e, j  O0 W/ ~! I* _如上,Reset behaviour Type 为 None,同样在 Debug Authentication 下设置之前生成的私钥和证书,Permission 变为 Debug Secure L1。% o9 n. {) u+ w( j" `# w

7 h; ]: Z- \  T  I 微信图片_20240229163234.png   b2 w( G3 u" J- i
: T0 d3 L& @; E- B
然后拖下来将 Verify flash download 之前的勾去掉(如上图所示)。
/ o4 Q; ]/ n# x9 f3 h! o) ~$ R5 l/ E6 N- m" h1 c
微信图片_20240229163232.png
* X: C5 W$ m2 a  Y. u9 _8 L( ^9 j4 f; w6 }) f" m
如上图所示,在 Startup 选项卡下,在 Load Image and Symbols 列表中选择当前工程的 Image,然后点击右边的 Edit…按键,然后在弹出的对话框中将 Download 前的勾去掉。点击 OK、Apply、并 Closed、关闭当前窗口。接下来在 S 工程中的源文件中的 xxx_it.c 源文件中的 systick 中断入口处设置一个断点, 如下图所示:4 ]2 g" p! r" O6 W

) w3 @. k+ t6 y- B% W' D& @ 微信图片_20240229163228.png
; q0 ]1 `$ \, T7 |* k5 y0 `$ Y7 v( w. k' }' q2 R+ M
微信图片_20240229163225.png * H& y) |8 E" P# P9 i

8 o% _9 o2 b4 ?/ k# b8 w  _9 y 微信图片_20240229163222.png 5 e& a3 e  c3 j3 E. v% z
* O6 q8 q( V# @+ h" ^! J6 w
如上图所示,程序运行在断点处停下来了,接下来你可以单步调试 Secure 工程了。这是一种完全没有破坏现场的调试方法,适合当出现问题后,直接去查看出现问题的代码行。当然在调试 Non Secure 工程时,你也可以按此方法来配置。也可以达到不破坏现场的效果。2 X+ N( d1 O7 u  K
2 O7 T9 _5 T% W' e
4.4.3. 在其它 IDE 中进行 DA 调试; d( L) M) J+ b$ B
由于其它 IDE 当前最新版本还并未将 DA 过程集成到 IDE 中,因此,需要利用 STM32CubeProgrammer 进行 DA 认证通过之后,才可以用 IDE 进行调试。: c4 ?+ p9 d% A" o0 z

8 e/ ]8 e- t9 S
接下来我们将使用 STM32CubeProgrammer 通过 DA 来重新打开调试口。
" D2 u# i3 {9 y1 K* Z5 U
6 x* L( |, Q' t$ E 微信图片_20240229163219.png
. ]6 t, \/ q% n# I) ]9 g+ B) M- m' ]& i! z
在断开连接的情况下,在 STM32CubeProgrammer 中,选择 DA 选项卡,然后点击 Discover… ) D  u( P4 W% l. n" k
7 d7 s+ l3 q5 T" x
微信图片_20240229163215.png $ ?$ m, @" d8 G% h# n7 ~6 y/ Z# C

4 q; r- |! K; A, e% G0 |( W% w6 }与 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 按键… ( s) ]3 o" S$ y0 f" X$ C3 m1 B1 A! ], [

" `  M/ N$ y7 \8 @/ z 微信图片_20240229163212.png
1 n+ R, k5 ?. P  A" n- S0 |! ?+ O- q( \5 }
如上图所示,在下面新显示的内容中选择 Non-Secure Intrusive Debug(Level 1),然后点击 Execte 按键… ! B+ K+ `) I8 C: Z' ^
& A) x" l" c; A( J
微信图片_20240229163209.png
$ l- L' X" L& ^2 k" u9 c

% B! j6 K; U* M" n5 S; r! n. D如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接。
1 q' D0 c% ^( `
9 ^) S" O' X  X* _% H4 Q2 G# A: j1 w
接下来就可以选择你所使用的 IDE(如 Keil、IAR)调试 NS 工程了,如下图使用 IAR 调试 :
3 q3 H8 C; V; u* i
" K# s" W. ^( @4 B2 Q- u 微信图片_20240229163206.png
8 d& F, F, D4 X0 e4 E# S+ q
+ ~/ L# {  {" l& F7 V2 j如上图所示,选择 Attach to Running Target 可直接 attach 上去查看当前运行的代码行。当然在之前 DA 步骤中,你也可以选择调试 S 工程 …" Z  h  B% m5 A; `5 l7 T( S
, ^9 _1 b" O" |+ Q- ^
微信图片_20240229163203.png 8 K$ I! s  c* L6 G1 e6 _

& b* [: A9 [0 U% k/ q0 k如上图所示, 在下面新显示的内容中选择 Secure Intrusive Debug(Level 1), 然后点击 Execte 按键…8 k# e$ D9 G# [6 a# p! D1 S
' Q7 k- E* e$ L6 l6 F( D% o1 }
微信图片_20240229163158.png
8 w$ J. z8 K- D- {# U. x1 t
& p1 b9 w7 W; V: I& |如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接,接下来就可以选择你所使用的 IDE(如 Keil、 IAR)调试 NS 工程了。
8 o8 a0 W8 J% t/ b* M  U
/ A: x7 c& u6 e

3 H1 O( v) f  ?! `% U五、还原# s& X/ J  `; G1 M! [+ W
还原的过程参考 3.5 节,步骤完全一致。最终还原成功后,全片 Flash 内容已经擦除。最后,将 TZEN 直接修改为 0xC3。
4 W# }8 s& A- X0 O# S9 i4 r+ B7 ?/ o: `2 i$ u, U
微信图片_20240229163155.png
! [8 |/ f4 k/ a( r+ Z0 {% [5 J- [& a) E( h( m$ g2 H7 q- [: a) u
至此,芯片完全恢复成原始状态。另外,DA 回退过后,之前预配置的内容也自动清空了, 因此,后续还需要重新进行预配置 (provisioning)。
8 C. u3 @0 c' L7 ~0 n
# A, c, U% g! o8 C/ e; n
/ p( _8 o: P" y转载自: STM322 Z2 ^7 n; v' E! m6 _, F
如有侵权请联系删除  M  V0 y" o1 _- v+ s4 l1 V+ Q
8 m5 g! j7 J+ x0 @, \$ q' ?0 A

! z( ^# ]3 [$ u" p; M; |
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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版