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

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

[复制链接]
STMCU小助手 发布时间:2024-2-29 16:53
一、前言
* h4 @4 v3 q5 Y- H; @4 N) [8 |STM32H5 是 ST 2023 年新推出的产品系列,与以往 MCU 不同的是, STM32H5 推出新的 product state 功能特性以替代以往的 RDP 功能。
& m) v5 f& X( B: f2 I$ s' E8 s
9 a6 r% `6 k, d 微信图片_20240229165316.png " l: V1 f% U( n; e  \) y

$ D* i  [# T  F, b. v" U& {如上图所示,product state 有如下状态 :( a3 F. p* ?) w& w% I9 Q
7 I. ~4 @2 g, H1 C, h
Open(0xED) : 完全 open 状态,相当于以前的 RDP0。
  a3 i$ p0 L# Z% a6 M; j- d8 y' p

* n7 B6 X8 v+ T* W) }Provisioning(0x17) : 此状态是专门用来做预配置的。 % v. i( \/ C' Z7 Q
" {$ ]7 |. l# F, X" f4 n/ k
iROT-Provisioned(0x2E) : 用于 STiROT 或 OEMiROT。
* ~! J2 x! L5 b$ h

$ v+ |  S) T  a& W' eTZ-Closed(0xC6): Secure 区域关闭, 相当于 RDP0.5(仅在 TZEN=0xB4 时有效)。 " m, h- W3 V. n; a, G" A

* X9 N/ o5 e8 A, n1 A% J9 RClosed(0x72): S 和 NS 区域均受到保护,这点有些类似于 RDP1,此时调试口没法对其直接访问,但可通 过 DA 打开调试口或回退,这一点有点类似于 STM32U5 上的可带密码回退的 RDP2。 7 x- f" g- M% r+ J  M7 P

- N9 R. S5 F+ }$ c  V8 [4 cLocked(0x5C): 完全关闭芯片的外部访问,相当于以往 STM32 芯片的 RDP2 保护等级。
& [4 k3 M$ o. P6 C+ M1 J0 ^& ~* ]) M% q. Y
整体如下图所示:" j) X# p3 ^( |: L2 j

, w: m: m- W$ o+ e( U& a# [ 微信图片_20240229165313.png . s6 ~3 |0 y& \7 Z

0 m" N4 A  D( r. W其状态切换如下图所示 :
/ G$ F5 B; j2 b# R$ ^4 _& J" \6 W7 B' B; b
微信图片_20240229165309.png - F1 c) D/ Q2 _" P, b

; A3 W% ~0 }5 E& F  O# F0 e6 w* n如上图所示,product state 从 open->provisioning->iROT-Provisioned->TZ-Closed->Closed 如此从左到右是可切换的,但是,要从右到左如此回退,则必须要经过 DA[Debug Authentication]过程。如上图所示,经过 DA 后,要么完全回退到 Open 状态,要么部分回退到 TZ-Closed 状态。# m" O" }8 [. T# c) ?

! L3 U( V6 Z/ X  S- o所谓的 DA,就是通过向芯片提供证书(STM32H503 是提供密码),通过芯片的身份认证后,允许向 芯片发起 product state 状态回退,或者重新打开调试口请求(仅当 TZEN=0xB4 时)。
) T. X  p( R* w; v& d

1 s6 G3 j7 [! P# C由于新的 product state 和 DA 的引入,所有 STM32H5 开发者都必须掌握 DA 的用法。因此,本 文档针对 STM32H5 初学者,演示当 TZEN=0xB4 时, 使用证书来完成 DA 过程。* p- E1 ?' m- r2 Q; ], {& _, q
3 s3 z& q/ r1 b  W5 H2 v' H
二、准备工作* h3 r) U! j& Q/ M3 f1 y
开发板 : NUCLEO-H563ZI 5 W6 s3 j( ?/ f, X2 K& n; J% \' [

# g5 c+ k0 b% I. d& [* K
微信图片_20240229165305.jpg
9 V2 C% t0 a7 p; F# t; i: S$ ^# o. X8 Z2 `$ K6 n4 f/ {
软件包 : STM32Cube_FW_H5_V1.1.0  d- _/ f5 s, ?, u
& d! }+ S1 R6 n& d8 ~; o
工具:: u1 {# \+ J6 Z* X. q
STM32CubeProgrammer v2.14.0* {/ C% v8 R- P0 o4 L
Tera Term 串口终端显示
- K$ Y! O* R6 d2 g2 F( y, }  kTrust Package Creator(安装 STM32CubeProgrammer 时一并安装, 注意勾选)
0 c0 e4 u  a/ r% u( QIDE: STM32CubeIDE v1.13.0: r' r2 f# U) C4 S) p$ r- C
STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下,在本动手实验中,我们 默认将其放在路径 C:\workspace\目录下。
" d' J7 ^1 a, f1 T  v" E" h& v: {: Z! A: {5 a1 K
三、生成 OBK 并测试4 l  P) w. u+ ^3 E
在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA,在此目录下,已经包含了自带的默认 obk,密钥以及证书。其实 我们可以直接使用这些 obk 以及对应的证书和密钥,这里我们将重新生成一套,并测试它是否 OK。
6 @* X8 H0 E" K8 L$ u

% ]0 @! Z- p. D) b. j7 Z3.1. 重新生成密钥对打开 TPC(TrustedPackageCreator)工具 * j5 ]$ L; S* y! \

# I6 U( U  }) m1 m* e2 y 微信图片_20240229165302.png + J3 @, |: [8 Q$ }

: P3 t) c9 u: q- Z$ g在 xml file 处,导入 DA_Config.xml 文件 :
4 Z* {1 U  E9 [C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml6 v7 Y2 g% z' P7 d3 K
如上图,在导入 DA_Config.xml 文件后,点击 Regenerate 按键后,将在 Keys 目录下重新生成公钥私钥对 :
0 h0 N9 B; g: q8 r2 @' y  J1 H0 s8 ]1 s5 q" y
微信图片_20240229165259.png , `" s" H; p9 U. _  t1 H/ u# |
5 s2 d& l% ?3 [/ j
这组密钥对就是接下来需要使用到的密钥对了。
+ Y9 f2 V" Q) Z其中 :
6 h* ]! @3 W+ o  R9 SKey_1_root.pem 为私钥
* h+ C( k5 d+ M/ i" \Key_1_root_pub.pem 为公钥9 Q$ j- }* {$ I, I2 o

( e( U5 E! ]* f7 K3.2. 生成 DA OBK 文件
9 X' Z4 u0 j3 J接下我们将创建 DA 的 obk 文件 :
7 G4 T  i7 ^6 M$ {1 y5 Q6 X- S
/ z+ N: L! J; u4 w9 H* h( K 微信图片_20240229165245.png
: [/ E* e8 [% {9 {

; ]( I" v' p+ J9 Z, u) R5 D( S) m如上图所示,继续在 TPC 工具中,在 Permission Mask 下,激活允许的操作许可,被激活的就是 DA 认证通过后,允许的操作. 然后在 Output File 处选择输出文件。我们使用默认即可。然后点击 Generate OBKey 按键,则在 Binary 目录下生成 DA_Config.obk 文件 :* p' A' l4 g; t

4 d( O7 y# V9 ]; A2 W2 Q2 [; X# n 微信图片_20240229165240.png ; f8 T; c4 }9 }& |1 k3 r
3 w6 D$ ~3 M7 L
这个 obk 文件就是我们后续将来做 DA 预配置(provisioning)的 obk 文件了。
# M+ ?, N( Q- B$ {& \; p' e& g5 R- K

0 P0 g8 l. l8 [% Z0 E$ Y* s3.3. 生成证书; }/ M5 l1 v- w  f
接下来我们继续用 TPC 工具生成证书。
% W& W7 k! U+ {. @7 G* g1 E7 q4 ^
微信图片_20240229165237.png / y( M( r2 i8 V
$ f8 _% |) @9 @: [* _, g! x7 n
如上图所示,在 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
- T8 z* ?% z- y# i3 Q" W+ ?4 z) P8 w$ \
) C! Z1 ~# H; f( Y6 f& W

4 w9 O) v( f4 w. Y+ W而在Root Public Key处则选择之前生成的公钥文件:C:/workspace/STM32Cube_FW_H5 _V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root_pub.pem7 r9 X7 l" y& k4 C/ h9 H2 c
8 }+ U4 b" Y) z5 @* C
然后在 Permission Mask 处选择此证书所允许的操作许可。我们将 Full 回退 to TZ,以及Secure/Non Secure 下的 Level 1~3 的 Debug 权限许可全部打开。1 \" L) Y2 X4 r6 H$ f
+ h. [; {9 w; K
在 Certificate file 处选择输出文件,我们选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Certificates/cert_root.b64: V' m' S9 X- }3 s" @
即在 Certificates 目录下生成 cert_root.b64 文件,最后再点击右下角的 Generate Certificate 按键,最终在 Certificates 生成了 cert_root.b64 文件。) T7 ]4 k; Q; }$ l+ t! Z, p
+ C: c" P& @( a) f2 o" H& I6 a
微信图片_20240229165233.png
. a0 l, A0 {$ [& \0 P; s
: D0 a! ~, v5 p- ~1 P! y
如上图所示,在 Certificates 目录下将同时生成两个文件 : cert_root.b64, cert_root.cert。% n' e1 E, Q2 U# Z# }; w; Y
其中 cert_root.b64 就是我们需要的证书文件了,它就是根证书。它将在后续步骤中进行 DA 时将会用到。而另一个生成的文件 cert_root.cert,我们并未用到它。  ^% M3 M, w) P3 B
" a$ u4 y1 r9 w* d5 E+ I- k
2 S0 k3 d1 q2 T2 w/ w  @
3.4. DA 预配置 (provisioning)+ ]7 f0 I6 q$ X. u
接下来我们将做 DA 预配置,在此之前我们确保使能 Trust Zone 功能,即 TZEN=0xB4。5 A& T9 ~$ Z; T1 ?/ S! [" v
0 G' r0 h* o2 m7 W! ]" j
微信图片_20240229165229.png
, ~7 ~) v& M3 J, j9 B% |
( j: N6 K7 k( B
如上图所示,使用 STM32CubeProgrammer 连接芯片,并将 TrustZone 打开。  l5 H  F, d0 j8 ?- s
然后将 Product State 切换到 Provisioning 状态 :( ^) |6 m* ~" {0 e/ V* v* e

- D! R' D- [6 F 微信图片_20240229165226.png
8 W$ {( w& T. C: B. [& U, k
1 g& J$ h0 w4 V/ z, z' _接下来正式做 DA 预配置…
7 ]5 S- [" [/ i  l- w( ~+ m
4 e; V7 S0 B( D 微信图片_20240229165223.png
# [! P* B  s# `2 Z3 K! b# s$ n( d! `6 N5 \5 j. u5 L) R8 X
如上图所示,在 STM32CubeProgrammer 左边选择盾牌图标,然后在上方选项卡处选择PROV,接着在 OBKey file path 处选择之前生成的 DA_Config.obk 文件 :
$ a% D' c# P/ w8 `: u  }* E8 t) |$ ^  M
C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Binary\ DA_Config.obk4 q( V, j/ q8 @9 @
0 r/ b5 {5 w: ~/ w; d' X; M
0 v) Z* j% G/ `( j' t2 A
最后点击 Start Provisioning 按键…6 k( `) F+ |# {: n$ v! E; i/ E

8 k; N# m" W2 H 微信图片_20240229165219.png 4 U8 O6 I8 w  [% x/ W' D
; \" B1 i# X, x. V$ b$ [* T
成功时,将弹出消息提示成功。此时表示,DA obk 文件已经预配置到芯片内部并且已经成功了。然后断开 STM32CubeProgrammer 的连接…6 D' I7 j+ K9 q0 M9 G% K( u

2 k( y8 _4 Y" Z; ? 微信图片_20240229165211.png
5 ^$ e! k; ~0 V: J$ d
* e, c6 T2 P' ]' C; ]' Q/ B6 L- ]如上图所示,点击 Disconnect 按键,确保 STM32CubeProgrammer 已经断开连接。接下来我们将尝试用证书做 DA 回退…
8 ?7 v% v" J$ s2 j9 K6 d1 @# M' `; X: w6 b5 B, }  v/ w

6 U6 ?+ U3 ~+ D% t; \( S3.5. DA 回退
. \, |8 p1 p' Z4 K" Z/ \7 w* Q1 T% y# ]) _+ C" y% V! h; Z" {& P
微信图片_20240229165207.png 0 |& c9 v" \" r) g) d: y# M5 O
7 v% O  D0 S( |
如上图所示,在确保 STM32CubeProgrammer 断开连接的情况下,左边还是选择盾牌图标,上方选项卡处选择 DA,然后在界面中点击 Discover 按键… * u* g& K$ m$ {. G/ d& \0 j

4 B) p  i* b& p8 P- K. o
微信图片_20240229165204.png * n* w3 t$ U4 a' X' Q' P

* C' s1 i" C. _1 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.pe4 v# x' m$ y+ |1 k6 n

) Z' C$ Q/ W! o( X* 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.pe) I/ r) e3 c* ]3 v9 x

6 P' C# i/ R# B: d: R在 Certificate File Path 处选择之前生成的证书 cert_root.b64:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b6+ c3 S- j2 j# m& G) f; X+ r1 w
5 c5 ~- ?- p- H3 g; |& K' o+ T
然后点击右边的 Continue 按键…
# r( X5 K* K+ ]9 x4 H& J1 Y0 ]% {8 q) r' E, u  W
微信图片_20240229165158.png
- [' T6 y4 B! W' `8 p+ P% e3 q- x8 [
如上图所示,在下方新显示出来的界面内容中,在左边选择 Full Regression, 即你想要的操作,然后点击右边的 Execte 按键…) x3 X$ _6 m2 D; R1 D" T3 p

$ G1 X; J1 o4 I( [
微信图片_20240229165152.png 6 Q& m: A. N, O! J! N) I

& ]1 e2 e9 W) R如上图所示,弹出界面显示 DA 成功。5 A' L( d& j. p4 ^6 M5 {5 o
0 O: z  k! ~  E0 b3 l/ ?, f
这也就表示,之前生成的私钥文件 key_1_root.pem + 证书文件 cert_root.b64 正是匹配之前生成的 obk 文件 DA_Config.obk 的。
; a$ C7 x$ _, ?: _5 X. r$ A
( G. _/ T. l5 o$ @1 H. D. m" ~1 U1 R其中 DA_Config.obk 文件和固件 hex 文件是要给工厂烧录芯片用的。而私钥文件 key_1_root.pem + 证书文件 cert_root.b64 则是需要保留,将来工程师需要它们来做 DA 回退和 DA 调试用的。# w# J& I8 v% Q7 ]9 J
- l' ]. A- M$ U1 k8 S9 @: ~
这里需要注意地是,如果上述 DA 回退未成功,则表示证书+私钥与之前预配置的 DA obk 不匹配,需要重新执行 3.1~3.5 节。直到 DA 回退成功为止,否则切记不要进入到下一步骤,不然很可能会由于证书不对无法回退导致芯片废掉(除非用户代码可以执行回退)。$ _6 X, N5 X/ \. ]" u0 b* i  g, `
9 Y$ a) W$ \" M! s4 X

. K4 z: J( E3 ^  q四、运行一个程序并 DA 调试* z- b; \1 R6 R3 M1 N
4.1. 在 Open 状态下运行一个示例程序

) k" N. ^2 o3 x  i使用 STM32CubeProgrammer,确保 product state =Open, TZEN=0xB4:/ H% v) ^# C- Y0 P" t

# y0 Y" h/ {; M; Y" n* H1 T 微信图片_20240229165146.png
# `+ x% J, v- z& O: A( w/ ?- [: }0 P/ W3 Z7 v
并确保:SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F, SECWM2_PSTRT=0x7F SECWM2_PEND=0x0:' v- D% }$ [! S% g7 M3 F% b2 B2 Q
; v/ _+ L0 {3 C  I  E, v
微信图片_20240229165142.png 7 Q9 |8 d6 P4 h1 O6 o+ q$ u% O
, y% H  T+ E+ f0 N2 j
然后使用 STM32CubeIDE 编译 STM32CubeH5 包下的示例工程:STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Examples\GPIO\GPIO_IOToggle_TrustZone\STM32CubeIDE 分别先后编译 S 和 NS 工程并烧录对应程序,并复位运行。正常情况下,可以看到板子上 LD5(橙色), LD6(绿色)两盏灯在来回闪动。即表示测试程序运行 OK。
  N7 s& n1 B! e1 t% m) L$ w0 ?1 ?6 q' r

- w  M) A: x, J, Q8 l) |# M5 S4.2. DA 预配置) ^0 J( U  p" {% }/ Q* D. z9 |# u9 q
接下来我们参照之前的 3.4 节,将 product state 切换到 provisioning 状态, 然后进行 DA 预配置。
' ]% T: o- V2 [+ i3 s: D5 n, N# R' {) F
2 E4 E9 z) r2 `2 k2 p' K1 f 微信图片_20240229165137.png
& N9 l2 Y) {  h; a' j
2 V) s+ M: ]# h: r3 M; t如上图,切换到 provisioning 状态。
% C+ x6 q, F7 M6 v+ R# m
8 P) d7 \8 y. G' ^  y5 q. _) ~% V2 S! Y 微信图片_20240229165132.png
( W' _7 `/ D; i+ }1 i' a# x7 [: w' g- b6 a
如上图所示,导入之前生成的 DA_Config.obk 文件,然后点击 Start Provisioning 按键,进行预配置。" |" V" I- K% m- z
* r: j2 ^/ I) ?9 W0 A( b$ H
微信图片_20240229165128.png
  w5 u6 q1 e# p* W5 v% B& g+ h+ x6 W
弹出上面显示模式,则表示预配置已经成功。! J' X# d' f3 G0 q7 h" u

+ A5 a4 w" C1 a4 e" P4 s! F2 ]

. L- v% W; Q% ^5 B& |4 R2 P1 Y4.3. 修改状态到 Closed 状态
0 ~1 E( w7 w- b  ~2 ]
2 X- N8 o1 a+ ^8 Q) ~ 微信图片_20240229165124.png / j; W4 T0 |8 D$ S. p- x, f. J

2 e; \& ?, ?3 X% ]: [) C. \如上图所示,接下来将 product state 修改为 Closed 状态。此时 ST-Link 连接会自动断开,表示芯片内部调试口已经自己关闭了。
( |3 K* m+ A) w6 M$ _此时查看板子,LD5、LD6 两灯依旧来回闪烁,说明程序在 Closed 状态下运行正常。只不过此时调试口是连接不上了。
, ]& ~  i% ^  v' |9 r3 t$ M* p" a  I
4.4. DA 调试
5 ?& e$ s* m! I/ m9 L7 O1 `. _  f7 F4.4.1. 使用 STM32CubeIDE 调试 NS 工程

! V; T; w* g; ?3 y在 STM32H563 处于 Closed 状态下时,SWD 口默认是关闭的,此时是无法调试代码的,若想调试代码,必须得通过 DA 认证重新打开调试端口,好在这一功能已经集成在 STM32CubeIDE 中了。接下来我们将使用 STM32CubeIDE 调试 NS 工程,在 NS 工程的 Debug Configuration 中, 在 Debugger 选项卡下 :
+ y( e8 W' [( c9 F& ?4 e
( m5 X: s1 l$ w8 [  l 微信图片_20240229165121.png
5 @9 T* q) T% C3 d! Y! I, v: e# j/ `( T
如上图所示,在 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 ]- r; E) S( W/ Z6 t0 e' q
, ^- N1 S/ j  ?* e3 C 微信图片_20240229165116.png * D0 c* H) I  j$ I

' {6 k: Q$ ], ?, L如上所示,程序在运行在 NS 工程的 main 函数开始处则停下来了,接下来你可以选择单步调试...8 f/ X) f  I/ h9 N$ h2 u; t
  |* z) ]" t( X9 M8 N3 [0 C" e
4.4.2. 使用 STM32CubeIDE 调试 S 工程* t8 X1 D) w  k9 f9 c* Y
S 工程的调试配置有些许差异。
3 `' |* E) Q2 y. A! Q  U3 S& L2 h
* u# E! a0 ?& {  c1 n) y  y. w 微信图片_20240229163237.png
+ T4 m+ b* h/ L# k
9 p3 u  d) s8 o: S: Q+ ~如上,Reset behaviour Type 为 None,同样在 Debug Authentication 下设置之前生成的私钥和证书,Permission 变为 Debug Secure L1。
" T  P- Y3 J  u+ J5 q" z& L. g' }8 [# U+ a* Y( z' z. ]
微信图片_20240229163234.png
0 X" a1 N8 A+ ]# K- `
" _+ C' G1 V  l然后拖下来将 Verify flash download 之前的勾去掉(如上图所示)。$ n9 Z& M: O5 h2 ~% }+ u

1 x; n" `3 y8 r 微信图片_20240229163232.png , \2 Z7 e3 c0 \- A7 G
9 A; W7 Y* n9 L" L4 {4 {
如上图所示,在 Startup 选项卡下,在 Load Image and Symbols 列表中选择当前工程的 Image,然后点击右边的 Edit…按键,然后在弹出的对话框中将 Download 前的勾去掉。点击 OK、Apply、并 Closed、关闭当前窗口。接下来在 S 工程中的源文件中的 xxx_it.c 源文件中的 systick 中断入口处设置一个断点, 如下图所示:
% b. A- c6 `& b" L7 z9 Z1 F8 g7 E
! w: v. E6 v8 I3 g) N- D% L: ] 微信图片_20240229163228.png # r1 C5 |% {) c5 A

* k* C3 Z; Z3 S  J4 k 微信图片_20240229163225.png - T/ b) m- e6 g. p

( G( M3 o9 F- n 微信图片_20240229163222.png
* W/ v  S' p' r
. w3 e! {4 x7 {) W+ o如上图所示,程序运行在断点处停下来了,接下来你可以单步调试 Secure 工程了。这是一种完全没有破坏现场的调试方法,适合当出现问题后,直接去查看出现问题的代码行。当然在调试 Non Secure 工程时,你也可以按此方法来配置。也可以达到不破坏现场的效果。
9 m" @* u7 f; D3 _! ~, [; M3 ]" g8 Y7 f% [4 \$ D4 a- |
4.4.3. 在其它 IDE 中进行 DA 调试2 v% h# N' _* ]- g) Y2 i
由于其它 IDE 当前最新版本还并未将 DA 过程集成到 IDE 中,因此,需要利用 STM32CubeProgrammer 进行 DA 认证通过之后,才可以用 IDE 进行调试。
6 k9 j5 M% b; W* _  p: L9 K0 _9 C
接下来我们将使用 STM32CubeProgrammer 通过 DA 来重新打开调试口。* w& O+ ]; i1 a8 A
( W7 l) o1 a1 E4 r( Y
微信图片_20240229163219.png
' J6 F# t( G& H
9 c$ B- s  U% I+ ~8 u  L7 A在断开连接的情况下,在 STM32CubeProgrammer 中,选择 DA 选项卡,然后点击 Discover…
" Y; j1 w% N# g+ M) o" W# J  x; ~
2 n1 L- [% A; A: w' }- ` 微信图片_20240229163215.png   ?7 l: F+ g1 c
8 @& c" U) U4 x- o5 Z) P* |
与 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 按键… * w1 C2 B) }" x8 k% P" A

) y0 j$ ~( _" m4 E, h9 w+ | 微信图片_20240229163212.png . m6 x: @# `0 \- T/ e, h
' R) @1 p) [5 I1 a! r
如上图所示,在下面新显示的内容中选择 Non-Secure Intrusive Debug(Level 1),然后点击 Execte 按键…
7 u# j1 S1 u1 y4 e* E, `$ [
( A( a* A* j+ W' C 微信图片_20240229163209.png
; V6 c  \  T# v. t3 j( c- |5 w

4 d# V% C( P$ V0 A如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接。
$ [: m5 b) ?$ e6 M, u
# v7 ?8 C! i- f% g8 Q' z. U1 M. }
接下来就可以选择你所使用的 IDE(如 Keil、IAR)调试 NS 工程了,如下图使用 IAR 调试 :
' j3 p7 r; W6 R# W: c0 f
3 e, R: h  ?* x, l2 L6 L 微信图片_20240229163206.png 3 G- Z) e1 y# Q9 |4 W
9 Y3 {- \/ m7 F& M
如上图所示,选择 Attach to Running Target 可直接 attach 上去查看当前运行的代码行。当然在之前 DA 步骤中,你也可以选择调试 S 工程 …
* g7 Z" [) }$ T" F- t7 [/ O$ F$ @& u' Q5 f6 I
微信图片_20240229163203.png 8 M6 j& W; H9 e1 o0 P; H/ K

1 a4 ?) L7 [$ L( L: T/ `7 X( t$ j如上图所示, 在下面新显示的内容中选择 Secure Intrusive Debug(Level 1), 然后点击 Execte 按键…
0 F5 w" ?+ _" i- t4 k  W  E* L  v# Y& p9 B) \' ^9 w
微信图片_20240229163158.png
) @+ H: u/ z* b' S" }  T5 c9 d9 z" x, E: i- p
如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接,接下来就可以选择你所使用的 IDE(如 Keil、 IAR)调试 NS 工程了。* w5 r% P3 I3 x4 A

% [, h3 {: O6 y- E
% z* S; R; L" B+ i$ e
五、还原& `0 Y9 V3 ]& s$ _" {. b! p
还原的过程参考 3.5 节,步骤完全一致。最终还原成功后,全片 Flash 内容已经擦除。最后,将 TZEN 直接修改为 0xC3。
/ M$ t$ r1 }% @
' H' r+ `7 J3 m4 w% X" S' s 微信图片_20240229163155.png
' _4 U; |3 u& m* w
8 G. M  `: J6 I! o# e1 [) V至此,芯片完全恢复成原始状态。另外,DA 回退过后,之前预配置的内容也自动清空了, 因此,后续还需要重新进行预配置 (provisioning)。
6 ?' t& q. u4 e+ t5 h; X& Q
% \) ?( i: u% T3 L0 E! ?4 ~& D0 L* e  g" J% Q+ l+ i6 _5 i
转载自: STM32- m% H! q- R0 l2 W( A8 i, |
如有侵权请联系删除
0 i0 t8 B; ?3 M, z% n6 x6 y# r3 Y# U
8 W  o1 Z  j, K7 b4 P
5 H6 B1 H: W2 Q$ D1 d" a9 ~1 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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版