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

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

[复制链接]
STMCU小助手 发布时间:2024-2-29 16:53
一、前言8 d9 f2 t' y2 L$ g
STM32H5 是 ST 2023 年新推出的产品系列,与以往 MCU 不同的是, STM32H5 推出新的 product state 功能特性以替代以往的 RDP 功能。
1 ~5 \: t$ t8 k6 C$ k. O
6 }" T5 K* n6 D8 d) P: D 微信图片_20240229165316.png
( i1 V- W" X( |3 O) ~

& E( I6 w# e  M( {如上图所示,product state 有如下状态 :
" y& }1 m# E' w, h' L: k' M/ O
+ q5 ?: I- y+ _! y8 T4 h2 j9 x9 a
Open(0xED) : 完全 open 状态,相当于以前的 RDP0。4 C0 J' Y; C3 {' F" g% k
7 `& w- G' y% ?: j0 v
Provisioning(0x17) : 此状态是专门用来做预配置的。 % a1 B$ o5 n( p

. B; h5 @# m; I3 J0 h& g  r7 {, ziROT-Provisioned(0x2E) : 用于 STiROT 或 OEMiROT。
, J1 M- j/ Q- T3 e4 t0 l4 y
4 A  [# _3 s6 C
TZ-Closed(0xC6): Secure 区域关闭, 相当于 RDP0.5(仅在 TZEN=0xB4 时有效)。 * b/ b0 \/ P/ M1 Y/ z  V

  F6 x+ T) V1 m5 W, lClosed(0x72): S 和 NS 区域均受到保护,这点有些类似于 RDP1,此时调试口没法对其直接访问,但可通 过 DA 打开调试口或回退,这一点有点类似于 STM32U5 上的可带密码回退的 RDP2。
# z# [/ S" ^4 z5 G5 n
! i% \" `# g6 x9 H' X. l$ v7 eLocked(0x5C): 完全关闭芯片的外部访问,相当于以往 STM32 芯片的 RDP2 保护等级。
1 c* S( D7 D$ U- ~2 v: l! [% _5 v$ l1 [+ e* }& M; E# S
整体如下图所示:
* g/ w! j$ q3 I+ P: E; W: p8 o2 }$ H  V7 _4 `+ t/ Q3 W# J
微信图片_20240229165313.png
4 I  {: L/ V9 g3 ?, @

" |; f6 j: X+ u: l% Z其状态切换如下图所示 :8 k. R4 W6 W* V, E$ W

" U- X6 @- T& c! X5 ~3 k. T4 \ 微信图片_20240229165309.png / e7 ~* x+ a/ g) S$ W: F  f% [

7 \: W9 o$ M! ?0 l1 a如上图所示,product state 从 open->provisioning->iROT-Provisioned->TZ-Closed->Closed 如此从左到右是可切换的,但是,要从右到左如此回退,则必须要经过 DA[Debug Authentication]过程。如上图所示,经过 DA 后,要么完全回退到 Open 状态,要么部分回退到 TZ-Closed 状态。. q1 P  F7 R! x

! [! P# @7 ]  I4 m5 A. O所谓的 DA,就是通过向芯片提供证书(STM32H503 是提供密码),通过芯片的身份认证后,允许向 芯片发起 product state 状态回退,或者重新打开调试口请求(仅当 TZEN=0xB4 时)。1 [; `( f! w+ a3 |

% s! V& b* O8 u- Y# k3 q由于新的 product state 和 DA 的引入,所有 STM32H5 开发者都必须掌握 DA 的用法。因此,本 文档针对 STM32H5 初学者,演示当 TZEN=0xB4 时, 使用证书来完成 DA 过程。( f+ u4 i. ?# T) S6 j$ f  j) N& `
% ~0 z8 M: }7 _' h
二、准备工作
5 r' e7 f. g: e开发板 : NUCLEO-H563ZI - Q2 x8 X' T9 N! z
; m* B$ M, l; o6 B- ]/ l
微信图片_20240229165305.jpg * o1 z! @; ]- X1 A2 N

1 t8 C5 f( s5 }* w- z软件包 : STM32Cube_FW_H5_V1.1.0
1 P5 L6 P/ y0 v9 P& p( F% A, d$ _; ]7 k2 a) w
工具:9 G) t2 g3 L- E
STM32CubeProgrammer v2.14.0
; n1 U/ S$ V. l/ X3 U0 f" r% R6 zTera Term 串口终端显示
  u1 }* M/ y3 {  S: mTrust Package Creator(安装 STM32CubeProgrammer 时一并安装, 注意勾选)7 M- K* ~7 a; m  |! e  q
IDE: STM32CubeIDE v1.13.0
' K- z/ i. o2 r) {" t9 H: q" Y3 |
STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下,在本动手实验中,我们 默认将其放在路径 C:\workspace\目录下。) G. |& o8 w/ W) z: ^. [

  E, g0 U  c8 t+ f" G; @" \1 G三、生成 OBK 并测试8 g) E9 p+ J9 s4 a8 |
在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA,在此目录下,已经包含了自带的默认 obk,密钥以及证书。其实 我们可以直接使用这些 obk 以及对应的证书和密钥,这里我们将重新生成一套,并测试它是否 OK。$ P/ |+ N/ h4 g1 X. A- b1 W

: ?" o1 ?7 R, R# ^  _- s3.1. 重新生成密钥对打开 TPC(TrustedPackageCreator)工具 # |# `, J' l8 `5 G$ G- t  j( w

0 R- B7 F+ d" `# e# ]' O! H! I 微信图片_20240229165302.png
9 P8 f6 T7 l) O1 d, X
9 Q( F$ d) z7 n& ]在 xml file 处,导入 DA_Config.xml 文件 :
, l  z* b3 T7 B& d" v% o2 GC:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml
& P. T* H( u8 G& z1 m如上图,在导入 DA_Config.xml 文件后,点击 Regenerate 按键后,将在 Keys 目录下重新生成公钥私钥对 :
% x) s1 f& Z1 h+ ~3 d3 x- E' A! }4 a: T6 m6 R
微信图片_20240229165259.png 0 s# O9 G% _7 E7 H1 i
& P. F& I8 e: l3 z- e+ v
这组密钥对就是接下来需要使用到的密钥对了。
3 J( M7 x/ l) b其中 :
  D* b$ ^; \: \Key_1_root.pem 为私钥
+ ]$ a2 K' ]5 x6 T' K' w7 R5 mKey_1_root_pub.pem 为公钥
4 d+ \2 w8 C) _) I
# N: f4 A/ ]3 X* x3.2. 生成 DA OBK 文件
9 S3 z2 _2 U) \. P& O$ u接下我们将创建 DA 的 obk 文件 :
% B- U2 ~. d) \; B0 h; f) M! X+ v' I1 |: S% M4 F- [
微信图片_20240229165245.png ' N, V+ o' S7 q0 ]4 l$ l  Y
/ t" R& [+ X' d- n$ k
如上图所示,继续在 TPC 工具中,在 Permission Mask 下,激活允许的操作许可,被激活的就是 DA 认证通过后,允许的操作. 然后在 Output File 处选择输出文件。我们使用默认即可。然后点击 Generate OBKey 按键,则在 Binary 目录下生成 DA_Config.obk 文件 :
; T' ?% I  B) z; T  m7 W+ y) d0 m  c" j4 V% _7 L' S
微信图片_20240229165240.png $ e0 o' X4 P- G: _+ n1 O$ ]+ I

$ q% M. U) B, D  c) |: F3 U2 \& z这个 obk 文件就是我们后续将来做 DA 预配置(provisioning)的 obk 文件了。; u9 _1 ~$ [. c8 a9 f9 i
) E& j/ L" {0 b. k: D  \' S
8 A! i! b5 Y: F6 M% y3 O
3.3. 生成证书
% d) t7 t! j5 d2 U# _# f; A接下来我们继续用 TPC 工具生成证书。
+ z# V/ }& ^/ _! S) Q6 z4 I+ ^0 D: y& Q! x
微信图片_20240229165237.png 3 H$ x( h1 _/ w" d" n& d# ]& p

2 D3 n" o( ?: @5 h* G: R) g如上图所示,在 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
# }! t3 ~' M6 M) B. B0 L& a9 T' R: P' I& t) Y7 D* g# _4 J  V+ T

" Z3 A0 ^' o5 s而在Root Public Key处则选择之前生成的公钥文件:C:/workspace/STM32Cube_FW_H5 _V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root_pub.pem
, q! D4 D1 s, ?4 r; B2 _3 N
; l* l7 |2 `0 x' w
然后在 Permission Mask 处选择此证书所允许的操作许可。我们将 Full 回退 to TZ,以及Secure/Non Secure 下的 Level 1~3 的 Debug 权限许可全部打开。
3 w! Q. a6 z2 ]3 g! i$ T6 h
& o5 G9 E& g6 m) b: x7 j' W
在 Certificate file 处选择输出文件,我们选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Certificates/cert_root.b64& t0 q( Y  N8 q
即在 Certificates 目录下生成 cert_root.b64 文件,最后再点击右下角的 Generate Certificate 按键,最终在 Certificates 生成了 cert_root.b64 文件。. o2 ~$ ?( B( c. z

8 A0 P8 m; k# C. A0 S) B* N 微信图片_20240229165233.png 1 a4 k6 n& j+ x5 ^. y% `2 j

- x& @" D6 S0 W9 t9 q如上图所示,在 Certificates 目录下将同时生成两个文件 : cert_root.b64, cert_root.cert。: ]' c- J7 D4 J" p  C
其中 cert_root.b64 就是我们需要的证书文件了,它就是根证书。它将在后续步骤中进行 DA 时将会用到。而另一个生成的文件 cert_root.cert,我们并未用到它。- u/ p, i: K! }2 m) m
3 L* n1 Z7 G. i6 T$ r9 D

' {- d" O5 @& v# r3.4. DA 预配置 (provisioning)
9 r8 w' ?6 F4 P7 C- k7 O接下来我们将做 DA 预配置,在此之前我们确保使能 Trust Zone 功能,即 TZEN=0xB4。( ~8 u0 E. w  K: t' G. d$ m4 ]' t* R
3 A5 i9 a1 f. E/ d# j' a
微信图片_20240229165229.png   S0 J( Q! q% H) m
- i9 C/ P  X& K( B4 {: h5 j6 l
如上图所示,使用 STM32CubeProgrammer 连接芯片,并将 TrustZone 打开。- h1 [) d7 j/ e# M, o: c
然后将 Product State 切换到 Provisioning 状态 :/ q9 O4 y- s* Q5 ^9 B8 y# I

2 [% l5 ?/ p. u7 W. i& n  j 微信图片_20240229165226.png
# ~6 ?) H$ _! `; d
% w; ]2 e) X% K: t$ T& w接下来正式做 DA 预配置…! G7 @$ P6 i- C0 O# t) ^& \, n

; g" U5 W) Q2 u: X- Z8 {% ~ 微信图片_20240229165223.png 2 P& p2 e; m( u. G
+ b" [0 l- A, f! Y- Q
如上图所示,在 STM32CubeProgrammer 左边选择盾牌图标,然后在上方选项卡处选择PROV,接着在 OBKey file path 处选择之前生成的 DA_Config.obk 文件 :: i4 T- ?" D' C0 i8 I# }

! c4 Y4 s; h+ w' @* ^7 E; \
C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Binary\ DA_Config.obk* j, S+ T- d- y
) i2 L4 N& {3 m4 C4 L7 b$ Z8 e; {
4 t* I; S& k5 ]/ z
最后点击 Start Provisioning 按键…
5 z0 ]4 Q& R5 m3 w  d; Z- K  k2 R. d! e
微信图片_20240229165219.png & `, _4 n; u6 \) ?6 K

' E  q6 `4 p  ~; q# Z2 k成功时,将弹出消息提示成功。此时表示,DA obk 文件已经预配置到芯片内部并且已经成功了。然后断开 STM32CubeProgrammer 的连接…
3 K+ C6 f) J% `- P+ W- O& n
, h( @  x2 H5 N" N: K 微信图片_20240229165211.png   B' a  I. |' I- V

; y9 l' F  e) U0 B5 I如上图所示,点击 Disconnect 按键,确保 STM32CubeProgrammer 已经断开连接。接下来我们将尝试用证书做 DA 回退…
6 N5 m, m+ @$ |4 u; _+ p$ @" ?* y% @* H+ U
0 H5 q) C$ X4 T1 C3 O. r( X! n
3.5. DA 回退0 O: e9 y( h' k% x
: u, P0 ~4 u4 j1 O5 i
微信图片_20240229165207.png 6 U" W4 |  e& j2 v

, X9 h0 I. ^% }  O5 ?8 d, f如上图所示,在确保 STM32CubeProgrammer 断开连接的情况下,左边还是选择盾牌图标,上方选项卡处选择 DA,然后在界面中点击 Discover 按键… ) ]+ j; w/ w, [& r! {/ `; v$ C

5 ~! W$ W/ @' N4 G. h
微信图片_20240229165204.png   ^7 t0 u+ q/ _1 C4 P$ A
4 b! s* ]& [, f/ Y; i
如上图所示,在接下来的界面中,在 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 d! l& c% n. V" K' B  w

* u0 o- p& l0 X  h) O6 F' N0 x; r如上图所示,在接下来的界面中,在 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
( S/ }( C; O/ f1 W7 F8 z+ u* P5 a
8 E: k! G% x' D' f$ n, O; c在 Certificate File Path 处选择之前生成的证书 cert_root.b64:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b6
2 N! G: F- |- c$ k; y8 ~) |

0 @+ d( ?6 W8 s; F1 u" n然后点击右边的 Continue 按键…
& g* Y$ y8 z5 ?: l7 k7 r+ G
# m0 ]+ w% s6 T4 m  _4 @4 d8 c( A0 {
微信图片_20240229165158.png
' X' i) ?/ l+ q
$ {( v! `( n* b0 R# G7 d: b如上图所示,在下方新显示出来的界面内容中,在左边选择 Full Regression, 即你想要的操作,然后点击右边的 Execte 按键…
4 @2 x6 N/ G: y7 z5 R
( U' ]* e  \& P
微信图片_20240229165152.png * @: T: i* T9 `3 J+ O4 q
( C5 g3 W0 Z! I) i, S
如上图所示,弹出界面显示 DA 成功。! \' ?3 ]1 _3 h  [" Z
( k7 W5 x( w$ V6 P; {  _
这也就表示,之前生成的私钥文件 key_1_root.pem + 证书文件 cert_root.b64 正是匹配之前生成的 obk 文件 DA_Config.obk 的。
: N9 n' M* I* J- j+ d# W
& V, B$ M9 u  R: x其中 DA_Config.obk 文件和固件 hex 文件是要给工厂烧录芯片用的。而私钥文件 key_1_root.pem + 证书文件 cert_root.b64 则是需要保留,将来工程师需要它们来做 DA 回退和 DA 调试用的。
# X3 s$ x9 {7 W6 p: J& I% E: D* X. r
" }9 O, w" [8 T$ d& f* C! u这里需要注意地是,如果上述 DA 回退未成功,则表示证书+私钥与之前预配置的 DA obk 不匹配,需要重新执行 3.1~3.5 节。直到 DA 回退成功为止,否则切记不要进入到下一步骤,不然很可能会由于证书不对无法回退导致芯片废掉(除非用户代码可以执行回退)。4 K% \8 w( D" C. F5 b, v' _

; B- W7 \: ~0 l& i4 h+ G9 n* \/ a
' W+ a/ G8 C: s2 j
四、运行一个程序并 DA 调试
. Y0 h4 n& ]* ^# q4.1. 在 Open 状态下运行一个示例程序

0 R* \) X; s1 j- B  m0 x% H使用 STM32CubeProgrammer,确保 product state =Open, TZEN=0xB4:! U- B5 u# W& U- s, z$ `! q, |- j

2 V9 c; s; V. e# w1 }9 o- G 微信图片_20240229165146.png
$ W/ c4 i# H+ m7 c) @$ n
, A2 s- k4 U) `6 h- o并确保:SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F, SECWM2_PSTRT=0x7F SECWM2_PEND=0x0:7 `! s& p+ N8 |+ |$ K8 N
6 g, E0 F* X7 r% @/ j
微信图片_20240229165142.png " F. r  t7 D: }) G; ~
* J" G. L5 J$ I6 p( }& A
然后使用 STM32CubeIDE 编译 STM32CubeH5 包下的示例工程:STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Examples\GPIO\GPIO_IOToggle_TrustZone\STM32CubeIDE 分别先后编译 S 和 NS 工程并烧录对应程序,并复位运行。正常情况下,可以看到板子上 LD5(橙色), LD6(绿色)两盏灯在来回闪动。即表示测试程序运行 OK。
8 P- }4 w! Y1 G3 C% \) n- d$ X
9 y2 }3 o% [$ V1 ?/ h" K# X3 Y
# P! i" @" @0 S: G, B4 ^
4.2. DA 预配置2 w7 f6 e! U2 h6 S6 w0 b
接下来我们参照之前的 3.4 节,将 product state 切换到 provisioning 状态, 然后进行 DA 预配置。
( W# {- {2 q2 Y
8 M4 @2 r9 A/ D- X- l 微信图片_20240229165137.png # r1 K8 s3 x  a2 F5 {$ x1 F& g8 U

0 ]/ M* C4 h, o: e如上图,切换到 provisioning 状态。   b% x1 f$ a+ o

8 s0 @; g2 m5 R$ d, ? 微信图片_20240229165132.png
: L! c' s% R+ I) b
0 y9 R# u2 b! w. K& P& S7 `, R6 a如上图所示,导入之前生成的 DA_Config.obk 文件,然后点击 Start Provisioning 按键,进行预配置。
) ?& }& f1 T$ B' D$ P  l9 ?5 c# ?9 H( V7 O
微信图片_20240229165128.png + J: y2 R% p, d
2 Z+ V6 `4 N/ K; ?
弹出上面显示模式,则表示预配置已经成功。& G0 G4 [# f4 N, e+ w& Z

; E2 `& I1 t$ I% f" F/ I5 @( O/ q

8 ^' D3 G+ M5 l5 e7 b9 _4.3. 修改状态到 Closed 状态
1 }; G* U, g5 t
" d3 h- j1 j. {  }- m 微信图片_20240229165124.png $ c- f# V+ z% K. @6 f1 j- Y

( }8 d; r$ ^( F7 W8 d# L如上图所示,接下来将 product state 修改为 Closed 状态。此时 ST-Link 连接会自动断开,表示芯片内部调试口已经自己关闭了。( ^; K7 g. n" w: [- X
此时查看板子,LD5、LD6 两灯依旧来回闪烁,说明程序在 Closed 状态下运行正常。只不过此时调试口是连接不上了。, J) V5 i- R3 M5 ^( L9 G) M, R4 z

+ T5 C9 z1 y/ v4.4. DA 调试
6 c* k( I" _$ `4.4.1. 使用 STM32CubeIDE 调试 NS 工程
+ A# W0 g6 j% H) n% f, _' V
在 STM32H563 处于 Closed 状态下时,SWD 口默认是关闭的,此时是无法调试代码的,若想调试代码,必须得通过 DA 认证重新打开调试端口,好在这一功能已经集成在 STM32CubeIDE 中了。接下来我们将使用 STM32CubeIDE 调试 NS 工程,在 NS 工程的 Debug Configuration 中, 在 Debugger 选项卡下 :
2 a3 R2 e% `1 s  V  }& b1 `1 W5 u$ H3 k) k5 C0 Q6 K
微信图片_20240229165121.png
  C: i+ i# h9 o9 Z) P4 X+ ~
- y, X/ c! l4 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 按键…
& Q4 [8 X1 H) u5 A9 I% ]
8 R& y+ j. k2 |' w- J4 \- s 微信图片_20240229165116.png
. V/ Y, d2 k; ]) p% @. L0 h5 B% y) h/ [
如上所示,程序在运行在 NS 工程的 main 函数开始处则停下来了,接下来你可以选择单步调试...
0 _: e* F. L  a4 L
8 O& {7 D, [3 l7 }
4.4.2. 使用 STM32CubeIDE 调试 S 工程
, c0 s7 L& k4 H: {& T  OS 工程的调试配置有些许差异。* T1 |. z( i# \
! P9 l& x1 M' s; ]5 s- z
微信图片_20240229163237.png " j$ Q3 [7 @1 r( s! L

, W& _  u% X) Y/ O如上,Reset behaviour Type 为 None,同样在 Debug Authentication 下设置之前生成的私钥和证书,Permission 变为 Debug Secure L1。" u4 [' J( ^* @

9 v- R$ V! c- o( r 微信图片_20240229163234.png 0 _- p  B& a. y, F' ?- d' O
5 Y& L" b; S$ E, n7 v* K( I
然后拖下来将 Verify flash download 之前的勾去掉(如上图所示)。
$ J: d" `0 C# ^. L
7 ?2 }/ u. C+ k7 M) f5 ^ 微信图片_20240229163232.png ; D/ h1 |) e  ~7 D! k* a

5 [1 A( L+ t8 D$ Z9 X如上图所示,在 Startup 选项卡下,在 Load Image and Symbols 列表中选择当前工程的 Image,然后点击右边的 Edit…按键,然后在弹出的对话框中将 Download 前的勾去掉。点击 OK、Apply、并 Closed、关闭当前窗口。接下来在 S 工程中的源文件中的 xxx_it.c 源文件中的 systick 中断入口处设置一个断点, 如下图所示:
* V& j) P9 u6 c) a6 b- W8 v  b5 i- j; ~) g$ v: o, K
微信图片_20240229163228.png
/ P. r7 z+ t, d! l4 j, F+ A2 q8 }, q3 ^' i* R7 `- V$ u
微信图片_20240229163225.png
7 B2 l3 V: P7 E3 s5 \
" g3 ~$ X% k. R' o 微信图片_20240229163222.png $ I  H% s& j2 {* G% j3 }! u% Q

; s) R: R* I# o# a$ l  c如上图所示,程序运行在断点处停下来了,接下来你可以单步调试 Secure 工程了。这是一种完全没有破坏现场的调试方法,适合当出现问题后,直接去查看出现问题的代码行。当然在调试 Non Secure 工程时,你也可以按此方法来配置。也可以达到不破坏现场的效果。% M, m2 B; a) ?% t
* j4 E8 X6 R* J9 E5 J
4.4.3. 在其它 IDE 中进行 DA 调试
8 b& c7 m4 H: U% k$ m, u9 ?5 Y由于其它 IDE 当前最新版本还并未将 DA 过程集成到 IDE 中,因此,需要利用 STM32CubeProgrammer 进行 DA 认证通过之后,才可以用 IDE 进行调试。
, g+ `/ H6 J. J/ C4 t/ N" n% {
9 k: [* ~& n# J7 O! w" i& G
接下来我们将使用 STM32CubeProgrammer 通过 DA 来重新打开调试口。% {% H5 D4 O+ E6 a: ?3 k+ o" v

- T: W4 |: s- l9 k) o' p 微信图片_20240229163219.png & ^. `- x- W0 r- ^0 T
% U' }/ |( Y2 D
在断开连接的情况下,在 STM32CubeProgrammer 中,选择 DA 选项卡,然后点击 Discover…
: n7 s, G$ L  M/ G, M7 R) A
( [1 X" Y9 q. N( V, t5 U 微信图片_20240229163215.png
* h; s# p8 a/ J# J7 J* T
. U7 A# G; B& ]/ W* V5 Z0 l/ ]与 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 按键…
1 y% G' Q' I7 |. B: j0 R# s* t# ?6 D5 t4 S! m5 \
微信图片_20240229163212.png + v* n4 s5 f3 z. D
3 t1 \" f7 i& J3 ]/ h
如上图所示,在下面新显示的内容中选择 Non-Secure Intrusive Debug(Level 1),然后点击 Execte 按键…
9 L' G2 _  O8 v) o0 W; N
2 a! P/ A6 j1 @8 I$ Q 微信图片_20240229163209.png
- H' I! ^( p; D3 \% t

( K! {* p& i) Z, j9 m! b如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接。5 K. I# Q8 g  g/ {6 I1 e

2 L2 t1 k# q% O) Z
接下来就可以选择你所使用的 IDE(如 Keil、IAR)调试 NS 工程了,如下图使用 IAR 调试 :& z; G# i4 _0 s/ q9 j4 U8 X& c
3 _* T* @0 R5 h1 \* t
微信图片_20240229163206.png 5 `1 _/ L6 a5 q" B
& P; n: L6 d8 K
如上图所示,选择 Attach to Running Target 可直接 attach 上去查看当前运行的代码行。当然在之前 DA 步骤中,你也可以选择调试 S 工程 …
, f: ~; P3 D) `. R, H
" h) F! y* i/ Y! K8 \" l% F+ Q4 c; ]" v 微信图片_20240229163203.png
; B8 u+ @0 y) Y$ _2 p# q  ~( L0 S5 z1 g
如上图所示, 在下面新显示的内容中选择 Secure Intrusive Debug(Level 1), 然后点击 Execte 按键…
- Z% ?2 b! b7 n8 L
* q' Z: ~, _+ l* n- w' Y5 @ 微信图片_20240229163158.png
7 G$ X# H# u/ `1 K4 x# i& F( C) d) ]4 T3 M( L
如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接,接下来就可以选择你所使用的 IDE(如 Keil、 IAR)调试 NS 工程了。- l* g0 G- K! _! Y% b
' q  d2 u, P. r5 b. \7 ^! l
5 w' C3 W. T! ]% ]2 r0 h' m1 W
五、还原
: ^1 J) b: G& q& x! [! o% {还原的过程参考 3.5 节,步骤完全一致。最终还原成功后,全片 Flash 内容已经擦除。最后,将 TZEN 直接修改为 0xC3。
. d0 [) g% A! n+ g
( R9 m9 d5 _. t" }! A" | 微信图片_20240229163155.png
+ H5 G+ ]1 L9 h5 [% C3 _
( }+ W3 O7 Z9 K, {6 c1 J- Q# L至此,芯片完全恢复成原始状态。另外,DA 回退过后,之前预配置的内容也自动清空了, 因此,后续还需要重新进行预配置 (provisioning)。
' Q) }; \; t% f+ Z; W0 a8 Y# S
2 ]9 Y2 ~& b0 L  {& m( B" T. l
# k9 A& p* d" K; `" A2 D0 s9 ^/ C! Z转载自: STM32
3 _2 A! f3 ^# T9 d  L1 I3 v如有侵权请联系删除5 g7 e7 o% f9 b9 [- m9 N+ ^) |' }3 H

( h4 {- j+ V8 z) f$ m% f  n6 t9 K6 X( O6 l: \& z7 n) W3 X0 s
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 手机版