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

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

[复制链接]
STMCU小助手 发布时间:2024-2-29 16:53
一、前言. P1 j8 o) E, Q& s  J1 R. f
STM32H5 是 ST 2023 年新推出的产品系列,与以往 MCU 不同的是, STM32H5 推出新的 product state 功能特性以替代以往的 RDP 功能。
! P: N- B+ k$ }8 ], t2 Y4 a* k& n+ b& E
微信图片_20240229165316.png $ _. J! x' T1 R" B: B" }9 h

" @4 V* _+ ~1 ^) l" P4 Y如上图所示,product state 有如下状态 :
, p! |0 G. m- g6 ~/ Y/ B

6 n3 Z2 C, x7 j8 F' U" h, oOpen(0xED) : 完全 open 状态,相当于以前的 RDP0。7 f# i' \7 _' ?9 W+ ?, A+ q
7 j6 D- Q# Y( e0 a8 L* O
Provisioning(0x17) : 此状态是专门用来做预配置的。
& c3 U8 M4 F5 t3 T5 R9 \; V
3 ?* D4 C1 q5 r. WiROT-Provisioned(0x2E) : 用于 STiROT 或 OEMiROT。2 ^+ b& n5 j; |, K) j6 t
! n0 A: d% g  t
TZ-Closed(0xC6): Secure 区域关闭, 相当于 RDP0.5(仅在 TZEN=0xB4 时有效)。
# ?0 n4 z: m' ?: w. w% N8 s
$ ~2 a  j, ^) s3 iClosed(0x72): S 和 NS 区域均受到保护,这点有些类似于 RDP1,此时调试口没法对其直接访问,但可通 过 DA 打开调试口或回退,这一点有点类似于 STM32U5 上的可带密码回退的 RDP2。 ; e, ^; y: I( _2 {: h& k; G

9 H$ g! {/ O& A9 SLocked(0x5C): 完全关闭芯片的外部访问,相当于以往 STM32 芯片的 RDP2 保护等级。
4 h4 z1 N0 \  Q# t+ p- H( E, d0 O* w+ _, t8 t! t# A2 o, H# r  n
整体如下图所示:, E2 B4 B' E: y( y3 O1 M5 H) X

2 z% m; M) N  J 微信图片_20240229165313.png # \: Q: |+ {' B7 ?
4 R" w. \9 S$ y- V/ O' F/ N8 T7 T" h) [
其状态切换如下图所示 :  @, g' p. Q; z
& p; Z2 Q% p! v, M) t% G
微信图片_20240229165309.png 9 H' G. {1 a% a7 v- W1 {9 W) }
9 \  ?7 h7 `" f+ Q( y6 m5 c  o
如上图所示,product state 从 open->provisioning->iROT-Provisioned->TZ-Closed->Closed 如此从左到右是可切换的,但是,要从右到左如此回退,则必须要经过 DA[Debug Authentication]过程。如上图所示,经过 DA 后,要么完全回退到 Open 状态,要么部分回退到 TZ-Closed 状态。
3 z  r, Q  v0 [5 t' ~% n6 B1 \, B
所谓的 DA,就是通过向芯片提供证书(STM32H503 是提供密码),通过芯片的身份认证后,允许向 芯片发起 product state 状态回退,或者重新打开调试口请求(仅当 TZEN=0xB4 时)。# h4 o4 t0 ?* ]2 e  d3 v- `

' \" J1 Y9 @! Z6 ~2 S由于新的 product state 和 DA 的引入,所有 STM32H5 开发者都必须掌握 DA 的用法。因此,本 文档针对 STM32H5 初学者,演示当 TZEN=0xB4 时, 使用证书来完成 DA 过程。& ]6 U' L& M" e& F* D

8 s& Q* I' h* U( [* @二、准备工作
5 A7 P3 k) g  k开发板 : NUCLEO-H563ZI
5 K2 Q6 Q: a- o1 p5 N& p) m9 s1 W2 j1 i
微信图片_20240229165305.jpg . ]# S3 A+ G/ N! D3 O1 ~
; c6 b, v! i, W- S$ M
软件包 : STM32Cube_FW_H5_V1.1.0
/ K4 A) d( [& _. B% X8 W( |, H& n! ]0 W8 d% Y
工具:& N# {  o& k1 D+ V8 B
STM32CubeProgrammer v2.14.0
) ^6 X9 t( M: L; t8 ^3 {Tera Term 串口终端显示) E7 {, e. _+ D/ j
Trust Package Creator(安装 STM32CubeProgrammer 时一并安装, 注意勾选)
0 H7 C9 K: D% Q8 d  O- b# KIDE: STM32CubeIDE v1.13.0; D+ {' W6 q4 p
STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下,在本动手实验中,我们 默认将其放在路径 C:\workspace\目录下。# c2 Q+ k& |, N, L" G+ @
0 Q! [3 X4 C2 \. |! _. S8 R8 H
三、生成 OBK 并测试
  V  N, M) P- `4 P在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA,在此目录下,已经包含了自带的默认 obk,密钥以及证书。其实 我们可以直接使用这些 obk 以及对应的证书和密钥,这里我们将重新生成一套,并测试它是否 OK。* |3 }3 A: r3 X0 o. f

8 u1 p* O, M# M5 d6 L  h3.1. 重新生成密钥对打开 TPC(TrustedPackageCreator)工具
; y% ?( g+ K  c  o: _! k) l
! W5 I3 H3 C1 w+ v( M$ p, l 微信图片_20240229165302.png
- F2 Z4 d2 D3 r! L3 B2 o
/ m  K# G, f! G) k" M, }在 xml file 处,导入 DA_Config.xml 文件 :3 q4 q6 N4 x6 o9 `' e$ t
C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml
/ I- {# i4 n  |如上图,在导入 DA_Config.xml 文件后,点击 Regenerate 按键后,将在 Keys 目录下重新生成公钥私钥对 :
6 Y4 s7 N* Z; b! `+ Z! W( J  l
# S) J7 Y' u5 d/ g0 z# ~ 微信图片_20240229165259.png ; K: e& ~5 M3 g5 E, s$ r' g8 l

& C5 i% f+ w7 }% o( m这组密钥对就是接下来需要使用到的密钥对了。; R2 V6 B' A% y6 {6 m
其中 :
  N1 S) @% X4 K; P, d- ZKey_1_root.pem 为私钥! I6 W, m: |; v/ U) J* h
Key_1_root_pub.pem 为公钥
$ x: p0 O% i  J) [
6 }! ?& U8 d  ^, y3.2. 生成 DA OBK 文件
4 y( {4 t% y  `2 P接下我们将创建 DA 的 obk 文件 :# X+ C( r2 s# n+ C- l* ]2 \8 ~

$ O7 M6 B, R  ]' `" |2 i+ ] 微信图片_20240229165245.png ! I1 c6 z  R8 c+ |& q
. K4 C& o, g' g" r
如上图所示,继续在 TPC 工具中,在 Permission Mask 下,激活允许的操作许可,被激活的就是 DA 认证通过后,允许的操作. 然后在 Output File 处选择输出文件。我们使用默认即可。然后点击 Generate OBKey 按键,则在 Binary 目录下生成 DA_Config.obk 文件 :: x0 `0 |/ i/ M7 P$ }  q
1 G  Y: P$ t) e
微信图片_20240229165240.png 1 H3 q0 A' E* M/ \
( a: o2 b% R! E* w' R9 ?
这个 obk 文件就是我们后续将来做 DA 预配置(provisioning)的 obk 文件了。* l7 F7 Z, m9 U" ^( ]( K/ T
( a- ~% ]; J1 h- ]+ ~" U

5 P6 _5 b7 q2 Y( a2 ~3.3. 生成证书
* Z1 m/ x, J: ^* O0 Z$ z5 F2 v9 }2 E3 Z接下来我们继续用 TPC 工具生成证书。
! k- v! F  e9 |! T/ `% v
, R9 o& r; ~  Z: q3 N
微信图片_20240229165237.png
9 N& e% o( S# r' m* I) \
. W/ u, y4 X% Y2 ]5 p
如上图所示,在 Microcontroller 处选择 STM32H5-2M,在 Root Private Key 处我们选择之前生成的私钥文件 : C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root.pem7 x0 B' K/ e2 u% U; x% h- F
9 v$ c# @( R% D; U

* ?" @. ~3 n+ ^; F  h  W而在Root Public Key处则选择之前生成的公钥文件:C:/workspace/STM32Cube_FW_H5 _V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root_pub.pem
; m1 x6 f# g8 e- U! j% s
4 }" H/ w, O3 p( R% R, ]
然后在 Permission Mask 处选择此证书所允许的操作许可。我们将 Full 回退 to TZ,以及Secure/Non Secure 下的 Level 1~3 的 Debug 权限许可全部打开。
4 q0 |# d- B3 o2 @& u3 i% I$ ?0 p
在 Certificate file 处选择输出文件,我们选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Certificates/cert_root.b64
& g! A& B9 g# W( f即在 Certificates 目录下生成 cert_root.b64 文件,最后再点击右下角的 Generate Certificate 按键,最终在 Certificates 生成了 cert_root.b64 文件。: Q3 X0 T- I6 r% ^3 Z4 P2 ^
2 ^" q# K- ]5 W% _
微信图片_20240229165233.png ) E! |1 K4 x* K+ C; b  E
8 L( V- J  Q# c3 f: C
如上图所示,在 Certificates 目录下将同时生成两个文件 : cert_root.b64, cert_root.cert。3 a# ]& w  A" H* q4 Y/ i0 g
其中 cert_root.b64 就是我们需要的证书文件了,它就是根证书。它将在后续步骤中进行 DA 时将会用到。而另一个生成的文件 cert_root.cert,我们并未用到它。, O/ m3 d- U/ J& |7 F

0 `' R9 R/ }" h' w

1 N8 k6 k5 I; {! A0 N3.4. DA 预配置 (provisioning)& H, Z& X( ]% r" T9 a& w
接下来我们将做 DA 预配置,在此之前我们确保使能 Trust Zone 功能,即 TZEN=0xB4。
/ z8 F5 o( A+ N5 y$ e
5 U# t: B; d% u5 G) H 微信图片_20240229165229.png 5 L# _& `6 R4 o- W* u8 m
  Q/ X! H! W( T* B7 d
如上图所示,使用 STM32CubeProgrammer 连接芯片,并将 TrustZone 打开。, j( N  f! @' @  p. {: Y
然后将 Product State 切换到 Provisioning 状态 :& [' D2 X' w2 J( l, g. Y; g- Q% Y
  Y6 F7 U$ v. ]' C. H
微信图片_20240229165226.png 4 k. D4 l4 [9 X1 g' ?% k

$ R% Q- E% ]4 J  e& {接下来正式做 DA 预配置…* x! d0 _2 H* j, T7 Y  v
6 L$ I; k4 S2 d" u' y6 b1 p6 u# s
微信图片_20240229165223.png + G; f8 i" }. x: E

; V: A9 @& T+ @如上图所示,在 STM32CubeProgrammer 左边选择盾牌图标,然后在上方选项卡处选择PROV,接着在 OBKey file path 处选择之前生成的 DA_Config.obk 文件 :; G* }& i+ `- F& b
+ I+ Z" M' d2 m% u6 P3 {& W# Q
C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Binary\ DA_Config.obk
4 O. }6 {+ ]; w# l! b% c
- X2 A, j) G6 x. b/ }8 _5 a. [: ]

4 ]2 X3 _! ~8 W0 V" F, D  H* d. L最后点击 Start Provisioning 按键…
- j+ i( p4 O5 I) `' B/ G* v
, [7 _# L; \1 v( Z; ~  y 微信图片_20240229165219.png
' P, }+ q# s! K4 z. i/ \: I
8 z1 v4 H1 y' \1 A( b( u成功时,将弹出消息提示成功。此时表示,DA obk 文件已经预配置到芯片内部并且已经成功了。然后断开 STM32CubeProgrammer 的连接…8 y% c0 k1 H; G6 _; b6 L) l6 R
% i  W" U- c: F0 g
微信图片_20240229165211.png / p6 n! a9 D2 I1 N: q* q

- _: b5 J, c! S! _8 G如上图所示,点击 Disconnect 按键,确保 STM32CubeProgrammer 已经断开连接。接下来我们将尝试用证书做 DA 回退…
# \1 V- B# D: L# L8 W( [) ^; f+ v' |" L
& z' n; O% C; O+ h# ^
3.5. DA 回退4 M5 I/ x5 j3 `

" i8 T. K$ A" [; `! e 微信图片_20240229165207.png
4 u" |. X5 o' [

$ d$ ^3 _" ~! H; {4 u如上图所示,在确保 STM32CubeProgrammer 断开连接的情况下,左边还是选择盾牌图标,上方选项卡处选择 DA,然后在界面中点击 Discover 按键…
  \' u0 c" q/ p* R5 ]' f4 g( z! h. A/ w% B! z2 ~
微信图片_20240229165204.png 9 O* m( L5 n3 Z! e) |
& @0 d) J) q5 o, y# s2 F
如上图所示,在接下来的界面中,在 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
0 o2 i! X" Q& ?+ X: C0 B- Y
: k2 ?: Z$ j* I* X如上图所示,在接下来的界面中,在 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.pe6 O; a. d" W+ J5 I$ ]! {3 I2 G0 F

1 f5 G( u/ @! d在 Certificate File Path 处选择之前生成的证书 cert_root.b64:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b6
/ M3 @. @! w- b8 c: y& W# H
3 m9 a# k7 p" u& o
然后点击右边的 Continue 按键…
- H3 B. b. i, j$ w* F+ e; S& c( p8 Q) [- J  N! l* \0 x
微信图片_20240229165158.png
8 N. Y3 \+ v# V$ M& h
% v5 G: [" O4 h* [- H如上图所示,在下方新显示出来的界面内容中,在左边选择 Full Regression, 即你想要的操作,然后点击右边的 Execte 按键…9 N% V  d/ h, I( \

: C3 s8 A; q% B$ x! o* g# W$ u
微信图片_20240229165152.png
# ~8 [! }  f: `) E" b

- M6 o  C* P) M0 Y: i) ^如上图所示,弹出界面显示 DA 成功。
3 a- \" b% n& S0 i  H& j
2 v, A9 I5 ?& b& w! T" B# T5 J这也就表示,之前生成的私钥文件 key_1_root.pem + 证书文件 cert_root.b64 正是匹配之前生成的 obk 文件 DA_Config.obk 的。
+ _$ F6 @% q' ^# g
5 `* c3 g; p6 L3 i# S其中 DA_Config.obk 文件和固件 hex 文件是要给工厂烧录芯片用的。而私钥文件 key_1_root.pem + 证书文件 cert_root.b64 则是需要保留,将来工程师需要它们来做 DA 回退和 DA 调试用的。
# w  X* g& j6 D, c3 M5 X% U+ V4 P* d6 p7 _
这里需要注意地是,如果上述 DA 回退未成功,则表示证书+私钥与之前预配置的 DA obk 不匹配,需要重新执行 3.1~3.5 节。直到 DA 回退成功为止,否则切记不要进入到下一步骤,不然很可能会由于证书不对无法回退导致芯片废掉(除非用户代码可以执行回退)。
) B( q% ~5 U/ V6 j- v
2 ~* E  P0 _: ^" C5 E

6 l# m2 B# V" W1 [) u, {四、运行一个程序并 DA 调试
7 r, g  a( U  \8 `4.1. 在 Open 状态下运行一个示例程序

. }# r, j5 v: D8 ?使用 STM32CubeProgrammer,确保 product state =Open, TZEN=0xB4:
- y1 h- I( T" r5 C4 ]1 w  C, o( m% G( E1 Y
微信图片_20240229165146.png & W8 L  v5 u9 n. T5 H# T! f# v4 p
% V, ?. U% g6 i
并确保:SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F, SECWM2_PSTRT=0x7F SECWM2_PEND=0x0:
+ m/ L2 U( o2 @" V" U  p! K0 Q& c1 ^. K% ]5 V5 w* m
微信图片_20240229165142.png
7 y  u, ^, k/ L
! m- Y! U$ P5 `+ o然后使用 STM32CubeIDE 编译 STM32CubeH5 包下的示例工程:STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Examples\GPIO\GPIO_IOToggle_TrustZone\STM32CubeIDE 分别先后编译 S 和 NS 工程并烧录对应程序,并复位运行。正常情况下,可以看到板子上 LD5(橙色), LD6(绿色)两盏灯在来回闪动。即表示测试程序运行 OK。
- X6 q* A, b9 e( ^; @0 G, w, D
" ^8 F" q) I  ]* H! X) p7 l
* V# X! S& R- t
4.2. DA 预配置7 z" C* V# j8 N$ W  P
接下来我们参照之前的 3.4 节,将 product state 切换到 provisioning 状态, 然后进行 DA 预配置。 / H* h& K5 i6 B1 p' K; \

0 Q0 O) h+ Q8 A( S/ R' B$ I8 O 微信图片_20240229165137.png
7 U+ M1 o- R. \8 k0 N7 U& P+ l
% D4 v6 A2 F! T7 c, ?  e" ^7 u如上图,切换到 provisioning 状态。
3 j8 j' [) o3 v$ |7 t/ X, t# F" @. e& @, _) s
微信图片_20240229165132.png 3 [( }5 E1 I# F8 r

, o  L9 G- D# V' E如上图所示,导入之前生成的 DA_Config.obk 文件,然后点击 Start Provisioning 按键,进行预配置。, A$ }: e" |* b- p1 }' H7 w8 O
9 e! m2 C- n; I3 e4 O; b) u" I/ @% ?
微信图片_20240229165128.png
. S* e4 C+ w' L1 Q
) J! g2 z$ b' M% F! d) Y9 U弹出上面显示模式,则表示预配置已经成功。- B7 x( r8 A4 C) f0 [9 j8 d
8 T4 O$ M& C* O' Z' O- G# x, ~
' x1 ~. Y% g2 g* ~0 h
4.3. 修改状态到 Closed 状态 ) U4 T1 S1 f7 {1 G: I

$ j* r" O# _( P8 D  g! Y 微信图片_20240229165124.png
9 S: x" T+ Q0 L* h: v
8 ~" k# @' a2 ~! R) f/ q! S
如上图所示,接下来将 product state 修改为 Closed 状态。此时 ST-Link 连接会自动断开,表示芯片内部调试口已经自己关闭了。, n) [/ d6 G8 y
此时查看板子,LD5、LD6 两灯依旧来回闪烁,说明程序在 Closed 状态下运行正常。只不过此时调试口是连接不上了。5 o$ n- h: ^" @# M7 @. m. K
9 H, x7 P9 G/ E# q- v3 x$ C7 c
4.4. DA 调试
5 u) S' L$ ~' r8 }( p3 ^. w# k4.4.1. 使用 STM32CubeIDE 调试 NS 工程
+ J0 `* k9 G' Y; x( Z
在 STM32H563 处于 Closed 状态下时,SWD 口默认是关闭的,此时是无法调试代码的,若想调试代码,必须得通过 DA 认证重新打开调试端口,好在这一功能已经集成在 STM32CubeIDE 中了。接下来我们将使用 STM32CubeIDE 调试 NS 工程,在 NS 工程的 Debug Configuration 中, 在 Debugger 选项卡下 : ( c) a# H* h( I$ E7 {
3 }1 p* A% e& b4 ~' ^# I
微信图片_20240229165121.png # l9 c; {  x! E' e& a8 D4 n* D- J

& [* L* |; ?% m2 o$ Y% K  J如上图所示,在 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 按键… ! U; G$ D- {! b) c" c- ~. E

  f; w. ^# q' \9 O5 A( o: G 微信图片_20240229165116.png ( H: W" @4 u1 W# c7 _* g
! Z* L8 J/ z( X' \/ w2 F
如上所示,程序在运行在 NS 工程的 main 函数开始处则停下来了,接下来你可以选择单步调试...
& q7 L3 C5 o9 x5 w4 e
2 ]% B  g; u0 a$ A3 A6 D
4.4.2. 使用 STM32CubeIDE 调试 S 工程
' {- Y4 C# C) V' a. G- n$ ?4 A) u) nS 工程的调试配置有些许差异。$ y4 @  s( y3 k7 v/ E- [2 Q6 G

; Y! K% m. X8 Q; M2 w, c7 @  i2 N 微信图片_20240229163237.png 3 f5 M- o/ y8 I& V4 N/ Y7 @  x1 ?
/ a9 Q; g1 f7 `9 [# s
如上,Reset behaviour Type 为 None,同样在 Debug Authentication 下设置之前生成的私钥和证书,Permission 变为 Debug Secure L1。
" U  ~. i* q( i: T1 R; D4 {, u" d6 c9 G. M! h" o4 {0 E/ y
微信图片_20240229163234.png & J$ N" K0 l& i
$ T7 ?) q6 D+ W3 u( G3 V2 r
然后拖下来将 Verify flash download 之前的勾去掉(如上图所示)。: R  c/ Q% k2 _! Q

- @2 d' a, D0 t) e# X8 P2 H( [ 微信图片_20240229163232.png # }2 T  d( Q1 X

: ^, X/ L, H8 W4 }( X* m如上图所示,在 Startup 选项卡下,在 Load Image and Symbols 列表中选择当前工程的 Image,然后点击右边的 Edit…按键,然后在弹出的对话框中将 Download 前的勾去掉。点击 OK、Apply、并 Closed、关闭当前窗口。接下来在 S 工程中的源文件中的 xxx_it.c 源文件中的 systick 中断入口处设置一个断点, 如下图所示:' p: X6 W( g# c/ _$ Z8 `
2 [- M1 R( u6 u; b
微信图片_20240229163228.png 0 x0 g2 C1 P6 |6 K( T5 v: @$ p) @* A+ G

7 X/ ^  h+ s# t+ w9 h! p 微信图片_20240229163225.png
  [5 `' s3 q- y0 X5 V% w
& I1 T0 G. M1 l 微信图片_20240229163222.png
. z0 P8 V, W8 a- j4 U$ r7 U* D3 y+ g$ t- ~0 a; w2 [/ B
如上图所示,程序运行在断点处停下来了,接下来你可以单步调试 Secure 工程了。这是一种完全没有破坏现场的调试方法,适合当出现问题后,直接去查看出现问题的代码行。当然在调试 Non Secure 工程时,你也可以按此方法来配置。也可以达到不破坏现场的效果。
1 p4 ^1 O3 y; \  \0 }2 Y% a) d/ N& h" G! X, X; ~/ y
4.4.3. 在其它 IDE 中进行 DA 调试
& v* }: w' ]8 R! H: x: c由于其它 IDE 当前最新版本还并未将 DA 过程集成到 IDE 中,因此,需要利用 STM32CubeProgrammer 进行 DA 认证通过之后,才可以用 IDE 进行调试。
- @4 F& |) b! S6 A
* e7 F2 V4 b4 j+ q& I: t
接下来我们将使用 STM32CubeProgrammer 通过 DA 来重新打开调试口。4 c' a& t5 a" H0 A$ Q4 a

( f- ^9 Y% b! f 微信图片_20240229163219.png 6 V0 [7 E0 [2 p! t) C

9 N' t# y1 S, r( ]在断开连接的情况下,在 STM32CubeProgrammer 中,选择 DA 选项卡,然后点击 Discover…
4 f; T8 y- [: H9 |6 {# t7 {, h, \* R  [5 t: |
微信图片_20240229163215.png
6 A- n2 j% l6 O- T; ^5 c( {9 E7 g  |% H
+ A+ Q+ x" a4 k1 i- @与 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 按键…
, l' O0 e/ u. K9 a+ ^
3 N& H7 X; N$ o8 ^# c6 F/ v7 C 微信图片_20240229163212.png 4 A9 `" \9 K; S  @. K( z+ L6 S
( o' Q7 k: R* B2 C! `4 u1 \" H' r8 H
如上图所示,在下面新显示的内容中选择 Non-Secure Intrusive Debug(Level 1),然后点击 Execte 按键…
% V& @/ Y4 m$ g; L: U
5 W; c' R% U" y; v! C8 \& w 微信图片_20240229163209.png - L" M, d7 T$ d

8 Z- j& q& t3 g7 o/ I! k( l% n' m  z如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接。
# m- H; U  ?( r1 n" C
( i7 N2 i3 I7 v) L* r! y, x, K# e
接下来就可以选择你所使用的 IDE(如 Keil、IAR)调试 NS 工程了,如下图使用 IAR 调试 :
8 X# P. Y: q& F9 L8 ^, u
$ l1 a# }7 q# L9 ^ 微信图片_20240229163206.png
+ I6 m# k2 E, p- q6 u! [, P/ r  j2 t8 L' W: @
如上图所示,选择 Attach to Running Target 可直接 attach 上去查看当前运行的代码行。当然在之前 DA 步骤中,你也可以选择调试 S 工程 …
) Y( r, V. `" m* u2 w9 b+ c; F0 R& b9 ]4 z
微信图片_20240229163203.png 3 ]( T  G2 [8 }# A  S1 ]
' m7 t# I) ^- ?" ~2 L  ]% D# `
如上图所示, 在下面新显示的内容中选择 Secure Intrusive Debug(Level 1), 然后点击 Execte 按键…9 p& K1 g- H/ N, {+ @; i

$ m1 u/ ?9 ^/ N0 t  d2 L9 F/ _  B 微信图片_20240229163158.png
$ x& u. j, T% C" N& {% c9 F! L! T/ I! {! j
如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接,接下来就可以选择你所使用的 IDE(如 Keil、 IAR)调试 NS 工程了。
1 Y. s% U# w- r# {: V. E1 {9 W
  [6 I4 S' G* N5 |% e- @
1 {2 d2 U8 f4 \% u
五、还原
/ M; H& Q& [( S% A- G还原的过程参考 3.5 节,步骤完全一致。最终还原成功后,全片 Flash 内容已经擦除。最后,将 TZEN 直接修改为 0xC3。
4 r# H. G7 m& v* Z
3 ]1 S+ U+ z9 F+ H' Z/ u, Q 微信图片_20240229163155.png , b0 X6 h; ~8 q% H$ a4 c

1 c/ V* _; p  v& h" `1 X至此,芯片完全恢复成原始状态。另外,DA 回退过后,之前预配置的内容也自动清空了, 因此,后续还需要重新进行预配置 (provisioning)。
. `2 O4 _- E) t( T. `( f9 @' T
7 |- K0 D2 V4 k4 E1 m# _6 g7 @* a, _
转载自: STM32
6 b0 r3 F( L2 m7 \* Y7 T  P; c如有侵权请联系删除) B& K) p! r  @) g1 }

7 ^0 e$ u+ X% x. q) C" z: |; B1 q$ w$ D9 B- e
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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版