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

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

[复制链接]
STMCU小助手 发布时间:2024-2-29 16:53
一、前言  C4 X% C3 Z  Y8 z
STM32H5 是 ST 2023 年新推出的产品系列,与以往 MCU 不同的是, STM32H5 推出新的 product state 功能特性以替代以往的 RDP 功能。
% ~1 K5 {+ g: M7 H1 X: M; Q
6 I  b) S: }% J! B0 c# `4 ^ 微信图片_20240229165316.png 9 k' {; ?& q7 M, `5 O: s0 C

; t4 N, l5 v0 \' j0 Y4 T如上图所示,product state 有如下状态 :: A3 n0 B1 s! h+ k, A' M, ~1 {

% K9 x) T+ H8 N" `5 `! W8 j/ k/ @Open(0xED) : 完全 open 状态,相当于以前的 RDP0。
& P  c# o' K. j$ U- G$ s
( I8 L9 I9 [" H6 M5 ~
Provisioning(0x17) : 此状态是专门用来做预配置的。
7 t& H5 r, \" p6 w
; c' R8 Y6 o% T4 g. l3 d: eiROT-Provisioned(0x2E) : 用于 STiROT 或 OEMiROT。
! ]% S/ s2 N. R* g
5 K+ r+ Z* H" M( `7 t# y
TZ-Closed(0xC6): Secure 区域关闭, 相当于 RDP0.5(仅在 TZEN=0xB4 时有效)。
5 h$ A: ?0 C. S) p: p% I
" @. V" v. i" v5 p- Z2 C1 AClosed(0x72): S 和 NS 区域均受到保护,这点有些类似于 RDP1,此时调试口没法对其直接访问,但可通 过 DA 打开调试口或回退,这一点有点类似于 STM32U5 上的可带密码回退的 RDP2。
5 |3 G$ X$ ^. ?4 R; @8 E$ {* ?, ?
6 d$ {  s$ Z, r) \6 f3 ]Locked(0x5C): 完全关闭芯片的外部访问,相当于以往 STM32 芯片的 RDP2 保护等级。
2 B' G. P( t- z" a2 T3 y# G. _
" L0 q" l* o& `9 V整体如下图所示:$ L4 x, A& C$ D

2 q) r$ v' o/ k; T* t, Q 微信图片_20240229165313.png 2 Y8 K2 ]& J8 e; x

. Y) t" \1 T/ Y9 \3 B其状态切换如下图所示 :* q+ d* x; L* f. Q: W. C, V) u

1 r, H1 {- [* _% ?: X 微信图片_20240229165309.png
; c: J+ K* j& F

5 F7 s3 d3 q2 ^如上图所示,product state 从 open->provisioning->iROT-Provisioned->TZ-Closed->Closed 如此从左到右是可切换的,但是,要从右到左如此回退,则必须要经过 DA[Debug Authentication]过程。如上图所示,经过 DA 后,要么完全回退到 Open 状态,要么部分回退到 TZ-Closed 状态。: a; x! ]# F: [; Z: F; }/ f8 B( a

" I) Q' ^: j0 ]& Y' I: ]* E' X0 i所谓的 DA,就是通过向芯片提供证书(STM32H503 是提供密码),通过芯片的身份认证后,允许向 芯片发起 product state 状态回退,或者重新打开调试口请求(仅当 TZEN=0xB4 时)。  k0 s" \+ S* i; |, A: M
0 Y; p% D8 D1 ~  T! E
由于新的 product state 和 DA 的引入,所有 STM32H5 开发者都必须掌握 DA 的用法。因此,本 文档针对 STM32H5 初学者,演示当 TZEN=0xB4 时, 使用证书来完成 DA 过程。' x! }: e/ m2 p. |" I! g; A- {

& {2 j- G5 J/ m3 ?二、准备工作/ M! v9 L; c$ ~$ w  g# Z7 |
开发板 : NUCLEO-H563ZI
6 X! p8 w) f. u; k; G1 Y3 ~9 d$ Q4 C, n
微信图片_20240229165305.jpg 7 \/ H7 J1 T& u: A" g9 w8 W* J
- v" U( ~  C. ]
软件包 : STM32Cube_FW_H5_V1.1.0
  q$ Q3 u# M% Z8 F5 m9 W' W
6 ~9 S# U! }" T, [& O2 i' Z0 E工具:. M/ c1 h. |! Z
STM32CubeProgrammer v2.14.0" ], s2 s6 H; u2 p6 V' N
Tera Term 串口终端显示" }+ X- r9 p2 {+ D2 {
Trust Package Creator(安装 STM32CubeProgrammer 时一并安装, 注意勾选)
, J% M2 }) ^( P8 k7 r  `IDE: STM32CubeIDE v1.13.0
$ |7 _, |( {3 h, h( y
STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下,在本动手实验中,我们 默认将其放在路径 C:\workspace\目录下。
3 u  f9 L" B  f$ G$ @
6 e$ p7 \( J, d0 d三、生成 OBK 并测试  I0 U1 N2 Z5 H$ P: q- L
在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA,在此目录下,已经包含了自带的默认 obk,密钥以及证书。其实 我们可以直接使用这些 obk 以及对应的证书和密钥,这里我们将重新生成一套,并测试它是否 OK。( M4 g% y9 v, P5 n  l

! R9 x3 O5 F3 m3.1. 重新生成密钥对打开 TPC(TrustedPackageCreator)工具
) p0 K: z. f( T
* w6 y! D$ ?! ]: L1 P 微信图片_20240229165302.png ; [% ]2 z& z2 h8 r, r
; b. V$ S5 {  b; {( \9 D' I* m& H- a4 t
在 xml file 处,导入 DA_Config.xml 文件 :" J. x5 S5 N2 c; W) H. I
C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml
: B" j$ T) [5 c$ X# x, V如上图,在导入 DA_Config.xml 文件后,点击 Regenerate 按键后,将在 Keys 目录下重新生成公钥私钥对 :
* q$ f+ ^( u3 t
) s2 w8 n# N0 e6 B 微信图片_20240229165259.png 8 I' j/ |( p3 r: y: A3 O9 c2 o% E" q6 `
; s5 F* u+ T! d7 A7 ~# g
这组密钥对就是接下来需要使用到的密钥对了。+ n3 g$ T3 p4 P7 L! V. _+ C
其中 :( K+ I: H& V% S* |8 C
Key_1_root.pem 为私钥
( m. v4 B  A# S' GKey_1_root_pub.pem 为公钥
+ ~1 V0 T% w; I3 A2 S3 v
3 S% |9 G% W9 H1 H8 ]2 N( w: ~( S3.2. 生成 DA OBK 文件
, v+ P- T$ V* O6 r接下我们将创建 DA 的 obk 文件 :! H# ?* W; n% K0 b8 Q% \* g. ]

& I1 d& u+ O5 a 微信图片_20240229165245.png
% x3 u4 _8 S0 Z2 J4 C) V

, E9 W( h9 i" ~- U如上图所示,继续在 TPC 工具中,在 Permission Mask 下,激活允许的操作许可,被激活的就是 DA 认证通过后,允许的操作. 然后在 Output File 处选择输出文件。我们使用默认即可。然后点击 Generate OBKey 按键,则在 Binary 目录下生成 DA_Config.obk 文件 :: k. O8 l% E' i; R3 z
& L8 x/ g5 P0 x8 U2 v) ~" m; J& f
微信图片_20240229165240.png
5 X# J+ J2 T. Q" X5 P/ t
+ {; N) [& ]! B( k& d' B这个 obk 文件就是我们后续将来做 DA 预配置(provisioning)的 obk 文件了。
( d# d% p- F% c5 Q- V2 v! b5 I) Z# {

$ P2 h5 h1 u5 _! n4 v; w' S3.3. 生成证书
2 X' Y% i" t8 o; L; x& v' s; ]( A: O接下来我们继续用 TPC 工具生成证书。( T( m0 p0 P0 c& L) Z
% S# o8 K6 _0 E/ q- d0 K6 F
微信图片_20240229165237.png $ \0 B, T% t, O3 d; u: Y
) q- M0 m; Z1 h7 K  D; }& Q) Z
如上图所示,在 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
; O4 F! \9 F. t; G9 E2 k$ k
& I8 ^6 [9 Z1 ]2 N6 w4 h4 |0 }3 \3 z

* Y2 i# B  K+ @' a) I3 G) c而在Root Public Key处则选择之前生成的公钥文件:C:/workspace/STM32Cube_FW_H5 _V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root_pub.pem
% P* Y+ _* V. n' e
0 j' `+ B: I, R, d/ P# o
然后在 Permission Mask 处选择此证书所允许的操作许可。我们将 Full 回退 to TZ,以及Secure/Non Secure 下的 Level 1~3 的 Debug 权限许可全部打开。
4 m# g5 J1 f3 v0 O7 [+ g( F  g; f
在 Certificate file 处选择输出文件,我们选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Certificates/cert_root.b64; {% g( u2 j- i! L8 `( I, H( J& M
即在 Certificates 目录下生成 cert_root.b64 文件,最后再点击右下角的 Generate Certificate 按键,最终在 Certificates 生成了 cert_root.b64 文件。
% i0 h2 I4 m" o( |( G5 L( e' A$ C: y* s3 O: `- _
微信图片_20240229165233.png : R9 ?6 s+ O  f( l; l

# ?. a5 d: ?5 ~0 J如上图所示,在 Certificates 目录下将同时生成两个文件 : cert_root.b64, cert_root.cert。7 K- e4 S# H+ I9 r$ e, k! E2 ]
其中 cert_root.b64 就是我们需要的证书文件了,它就是根证书。它将在后续步骤中进行 DA 时将会用到。而另一个生成的文件 cert_root.cert,我们并未用到它。2 V" Q+ s& X5 K5 T; t& U, O% A0 o

. [; q8 k4 _" R& L$ r" P

  g' G! q$ f$ y8 R& Z; K8 t3.4. DA 预配置 (provisioning)
8 X, }+ s) L; G: R$ ^7 x3 k接下来我们将做 DA 预配置,在此之前我们确保使能 Trust Zone 功能,即 TZEN=0xB4。
/ `, O. s$ W/ |; a
* O3 p# t# z8 r. r+ y2 z$ P3 X5 r8 | 微信图片_20240229165229.png ) |( v* @8 A8 U" F9 B
  w( O1 i2 J. |) S
如上图所示,使用 STM32CubeProgrammer 连接芯片,并将 TrustZone 打开。& E. E; J, @# O9 S4 i
然后将 Product State 切换到 Provisioning 状态 :6 V2 r1 x8 ?8 g- s
. i: e) @' J$ i9 L/ [- y2 }& x& y
微信图片_20240229165226.png
2 i5 V" |' e; p+ q* W# ]* k% J5 n0 Y/ M3 S
接下来正式做 DA 预配置…
' s( i. p# X/ y& ?0 E/ l5 E2 G/ z6 g9 f' {
微信图片_20240229165223.png
4 n8 l& L. y+ D$ e$ b/ z) s" w
6 E- O3 v2 d7 Z# X$ c如上图所示,在 STM32CubeProgrammer 左边选择盾牌图标,然后在上方选项卡处选择PROV,接着在 OBKey file path 处选择之前生成的 DA_Config.obk 文件 :! h( ]" g* I! E8 R  C6 t* N( D
4 X: z2 z( p2 M3 Y
C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Binary\ DA_Config.obk
3 a. A# P, p# Y+ ]6 O& k
% L  M8 {0 [  c4 T) A1 ?9 J# W
! p& p' C* ?' P  g2 {
最后点击 Start Provisioning 按键…) G4 {* q9 l. ?# R5 R# x/ H$ }
9 ?  c8 b  g, y; x$ p
微信图片_20240229165219.png
3 b( k5 s& r9 N' s8 ~6 q8 f. Y
! t0 c. j+ z# \7 S' R. l成功时,将弹出消息提示成功。此时表示,DA obk 文件已经预配置到芯片内部并且已经成功了。然后断开 STM32CubeProgrammer 的连接…
8 q, s2 T2 \; L" z
8 E$ t9 N, }2 N4 O1 h 微信图片_20240229165211.png
5 g0 b& @- O! {" f' ?# j1 L# l9 E" v+ q' p' |! w) m+ L
如上图所示,点击 Disconnect 按键,确保 STM32CubeProgrammer 已经断开连接。接下来我们将尝试用证书做 DA 回退… 7 o# \* W4 X( \+ Q9 [
8 X! o: t  P, r

: q& l6 J4 U; {( r) F. M3.5. DA 回退
% E5 Y8 J% X; j9 C9 Z% t/ C4 X( q1 }
微信图片_20240229165207.png 9 S" R7 t3 s( p; @+ [) f

6 l4 `2 H2 t7 A如上图所示,在确保 STM32CubeProgrammer 断开连接的情况下,左边还是选择盾牌图标,上方选项卡处选择 DA,然后在界面中点击 Discover 按键… 5 ^: r# _+ ]+ d/ b
7 r( s' h) k* B3 z6 L
微信图片_20240229165204.png / P0 {: j0 N+ s8 z/ S
& a# ^! N, `* h2 w6 |$ y: ^
如上图所示,在接下来的界面中,在 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
2 C5 H* n1 U/ c. a' V
- x; H8 P. q% 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.pe3 U; V  e: c) A( h/ L
" w) o1 b4 r, m8 Q* A4 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% E/ Z2 J) |, K/ I2 x3 S4 w( O/ M
! n5 n8 j6 G- K- |4 v# X% |+ B
然后点击右边的 Continue 按键…
& f: O# F+ h7 p4 P2 Y  {! @9 J& m0 ?0 j
微信图片_20240229165158.png . W, V$ F% l5 G3 p6 k4 s' B5 M9 R
5 C1 L% t0 X# x8 j9 e8 K
如上图所示,在下方新显示出来的界面内容中,在左边选择 Full Regression, 即你想要的操作,然后点击右边的 Execte 按键…
4 ~  g9 ^0 t( |% w
& p$ B: f" i% Q; E( _
微信图片_20240229165152.png
* i+ e7 o, S' {' ~/ {# u9 b( @8 U

7 h; j5 j: S( m. \如上图所示,弹出界面显示 DA 成功。: k% X! K2 w0 T. _) R
2 o0 b6 f0 _# A) ]4 w
这也就表示,之前生成的私钥文件 key_1_root.pem + 证书文件 cert_root.b64 正是匹配之前生成的 obk 文件 DA_Config.obk 的。& v8 N+ [/ w; ~# k* O& S
# {% ]1 j/ A. P. i0 \# J2 c
其中 DA_Config.obk 文件和固件 hex 文件是要给工厂烧录芯片用的。而私钥文件 key_1_root.pem + 证书文件 cert_root.b64 则是需要保留,将来工程师需要它们来做 DA 回退和 DA 调试用的。  O5 a6 M5 ]: T: r5 y
/ T5 K7 M2 _, a  l( w
这里需要注意地是,如果上述 DA 回退未成功,则表示证书+私钥与之前预配置的 DA obk 不匹配,需要重新执行 3.1~3.5 节。直到 DA 回退成功为止,否则切记不要进入到下一步骤,不然很可能会由于证书不对无法回退导致芯片废掉(除非用户代码可以执行回退)。& n6 J. Z. ]. n4 ^: s: K5 X! C$ B
& m6 Z; [1 o& ]! e9 k
3 u9 _( y3 Z; r3 x* U# A1 [
四、运行一个程序并 DA 调试
' R) ]3 f9 u& g, }4.1. 在 Open 状态下运行一个示例程序
; g7 _( c0 u% I4 p9 W: Y
使用 STM32CubeProgrammer,确保 product state =Open, TZEN=0xB4:2 C* ~! J0 G/ K' X# d% t9 P( ?

6 w1 u# J4 j) g9 E 微信图片_20240229165146.png
' J5 D( y6 p5 g9 v, M3 r# E
" \; l$ H" J0 Z9 p4 |) o) t并确保:SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F, SECWM2_PSTRT=0x7F SECWM2_PEND=0x0:
' w2 M" O- R" x9 f0 h
- _( ~; ?. M! v7 G 微信图片_20240229165142.png # {  _( H4 B5 }& P4 S3 ~! r

! ^0 w7 f; v5 S5 |) y7 F6 A然后使用 STM32CubeIDE 编译 STM32CubeH5 包下的示例工程:STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Examples\GPIO\GPIO_IOToggle_TrustZone\STM32CubeIDE 分别先后编译 S 和 NS 工程并烧录对应程序,并复位运行。正常情况下,可以看到板子上 LD5(橙色), LD6(绿色)两盏灯在来回闪动。即表示测试程序运行 OK。
  N  G) }) I% _. k
" U) D& d: D% _3 D: B+ V  k$ I

/ X& j0 k( f/ Y% d1 p- |$ B0 b9 |4.2. DA 预配置  A3 ?: g+ g$ `3 J* C
接下来我们参照之前的 3.4 节,将 product state 切换到 provisioning 状态, 然后进行 DA 预配置。
2 D8 |- j5 }6 y( y8 [3 o2 @
9 m1 v. @* @, Q 微信图片_20240229165137.png 1 F; n3 K" k1 k) _1 \7 U

8 X/ T: J1 u; t2 b" G4 u如上图,切换到 provisioning 状态。 " a% l- e1 i; d5 j# V* X

; d2 `$ x9 N# T. q" d, F2 | 微信图片_20240229165132.png % b- v/ `6 P/ u; }( g7 Y& P
! E* n+ y" b6 |  _% `& u7 }
如上图所示,导入之前生成的 DA_Config.obk 文件,然后点击 Start Provisioning 按键,进行预配置。
& |* A, D$ f8 U0 c# l3 r- |( g! q# f6 ?( i6 E
微信图片_20240229165128.png
* @. H$ Q5 \+ n7 `% ^; l& m" Y5 w4 L  v2 F" }
弹出上面显示模式,则表示预配置已经成功。
/ |5 c6 T1 h6 V; Z& l, t9 f' }" c+ a  Q

" T: l1 C% ?. i5 f/ e# p0 D4.3. 修改状态到 Closed 状态 , z( ]& C3 I% B4 L0 @
  F9 o" Y7 }, u/ K. P
微信图片_20240229165124.png
4 U- M8 A) X3 {! a  a  {+ h- \+ n/ L
: e% W3 ]% _4 W/ h4 `" Z$ f- g
如上图所示,接下来将 product state 修改为 Closed 状态。此时 ST-Link 连接会自动断开,表示芯片内部调试口已经自己关闭了。
$ C1 g+ {0 I# Q: X1 F- U2 \此时查看板子,LD5、LD6 两灯依旧来回闪烁,说明程序在 Closed 状态下运行正常。只不过此时调试口是连接不上了。
4 e: U# u; G' n& @' I$ ^8 a& a, @7 e7 Y2 q5 V
4.4. DA 调试 6 G8 A: U# x& x% P4 l& c: S" h0 r% E
4.4.1. 使用 STM32CubeIDE 调试 NS 工程

' l9 G$ Q0 ~4 `* o3 L+ J' m7 e9 S在 STM32H563 处于 Closed 状态下时,SWD 口默认是关闭的,此时是无法调试代码的,若想调试代码,必须得通过 DA 认证重新打开调试端口,好在这一功能已经集成在 STM32CubeIDE 中了。接下来我们将使用 STM32CubeIDE 调试 NS 工程,在 NS 工程的 Debug Configuration 中, 在 Debugger 选项卡下 : 8 c& {; K# q" L: }: D+ X
, `) x. O7 B$ K) |
微信图片_20240229165121.png 3 j3 k2 P( Z3 V3 ^9 f/ P* M2 D4 o

$ W, S* i( {1 J; D1 O如上图所示,在 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 按键…
9 k+ {" e' ]" s$ R3 W' |: N0 ]" c& {! v
微信图片_20240229165116.png
/ N' q, W% i. I) g$ z
2 d) [* Q+ q( |0 Z& s! b2 n如上所示,程序在运行在 NS 工程的 main 函数开始处则停下来了,接下来你可以选择单步调试...
6 n& I7 I2 N: z2 N( l; @* a9 U5 n4 K5 E. H
4.4.2. 使用 STM32CubeIDE 调试 S 工程
5 S  \/ I0 i% NS 工程的调试配置有些许差异。
/ l4 ^! j4 T" ^; S$ a
, p( Q. J6 }. d) L! A2 y5 b 微信图片_20240229163237.png
4 ]+ R. q& o# ]6 C! r1 }
( O( x" ~2 r, w5 I0 Q如上,Reset behaviour Type 为 None,同样在 Debug Authentication 下设置之前生成的私钥和证书,Permission 变为 Debug Secure L1。  |) F: J2 s/ |4 w& @5 O

8 I$ l4 r5 N0 j. K9 O 微信图片_20240229163234.png
4 N( }/ N; d. y/ F+ @
0 {6 m6 W$ u5 @; h* X( P6 h然后拖下来将 Verify flash download 之前的勾去掉(如上图所示)。
' ]' G7 M& Y' ^- a: y0 j& w" i+ L& g; a$ e7 t
微信图片_20240229163232.png 3 k# q8 ~% ]$ E4 |2 B% l
& v$ Z- F& j7 M3 I$ ?
如上图所示,在 Startup 选项卡下,在 Load Image and Symbols 列表中选择当前工程的 Image,然后点击右边的 Edit…按键,然后在弹出的对话框中将 Download 前的勾去掉。点击 OK、Apply、并 Closed、关闭当前窗口。接下来在 S 工程中的源文件中的 xxx_it.c 源文件中的 systick 中断入口处设置一个断点, 如下图所示:
7 b, i, v+ [7 R- N! r  J9 l/ e! _5 L
微信图片_20240229163228.png
) C& b9 L: i0 m5 d( k" ], H, l
% P; ^# T) N& ~: X# ?  `9 T& X 微信图片_20240229163225.png
# E+ i- W7 G0 @. y  J: B
% u( G% U4 r0 t' N* V9 I5 G 微信图片_20240229163222.png
. B0 t) M* [1 x1 R' ^+ |  b- v! Z8 d+ a; O* U/ O, X1 @
如上图所示,程序运行在断点处停下来了,接下来你可以单步调试 Secure 工程了。这是一种完全没有破坏现场的调试方法,适合当出现问题后,直接去查看出现问题的代码行。当然在调试 Non Secure 工程时,你也可以按此方法来配置。也可以达到不破坏现场的效果。2 W0 @0 {, x, y2 B/ o0 u5 W
+ \4 c; m: R) `
4.4.3. 在其它 IDE 中进行 DA 调试( O' ~! Q! o. `2 A0 {
由于其它 IDE 当前最新版本还并未将 DA 过程集成到 IDE 中,因此,需要利用 STM32CubeProgrammer 进行 DA 认证通过之后,才可以用 IDE 进行调试。8 z3 ]! U/ o* |$ s3 n
, B& y, A- t9 _6 H: X6 ~1 }
接下来我们将使用 STM32CubeProgrammer 通过 DA 来重新打开调试口。
# q1 p- j) d7 M! W" t) q0 I: |+ m) Y2 X
微信图片_20240229163219.png 8 |$ G" m& s9 K& h% w3 {
8 y7 e# r7 O5 Z
在断开连接的情况下,在 STM32CubeProgrammer 中,选择 DA 选项卡,然后点击 Discover…
+ q' w% r' @' i4 m( Q: X
% t, R: p! f6 D8 a4 K8 w 微信图片_20240229163215.png 6 |0 `. _( H& G( l6 g
% ^6 H) X( Y3 J! w
与 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 按键… : J8 `( _" e3 V) o9 a  S# _
. G# c. s3 i, r5 m  d
微信图片_20240229163212.png
9 W! @: a" h! d- U3 d
* j3 g1 L5 J" b' M8 w6 f如上图所示,在下面新显示的内容中选择 Non-Secure Intrusive Debug(Level 1),然后点击 Execte 按键… / r# D2 |2 g9 g% O3 O0 \% m+ b

7 I  _  v+ m0 l% z: h3 ] 微信图片_20240229163209.png
. R2 d- W' I" M: E! [) n4 B
4 x' k) L+ h* M# T, ~( p
如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接。
$ o& ^. M1 B( a7 x  i2 i( I
, z) o& }) ^1 q( q
接下来就可以选择你所使用的 IDE(如 Keil、IAR)调试 NS 工程了,如下图使用 IAR 调试 :
1 G! U/ u3 j4 ?1 H
# q* u8 }! r1 y 微信图片_20240229163206.png
; t5 Y5 D" f' z$ t8 C2 M- d6 M2 @; f! c6 G
如上图所示,选择 Attach to Running Target 可直接 attach 上去查看当前运行的代码行。当然在之前 DA 步骤中,你也可以选择调试 S 工程 …
% }& C4 y- C- o; R7 c. |* g/ x: C, K
2 g/ ~8 ^  v; y/ V! U8 S 微信图片_20240229163203.png
6 N6 v9 G9 i! J0 y1 ^* T% f1 d
如上图所示, 在下面新显示的内容中选择 Secure Intrusive Debug(Level 1), 然后点击 Execte 按键…
  m/ W* g8 d8 h! b! B. m1 P
: `  B' @, T- h+ `# Z 微信图片_20240229163158.png
( C. h" q! t% k9 l! f( t
% H8 ?& Z# c7 k$ W如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接,接下来就可以选择你所使用的 IDE(如 Keil、 IAR)调试 NS 工程了。2 U5 F! Q# ]! E

% r- O, H5 J  y7 b' ]
1 G2 p( z: e! o6 ?( k( k( g/ Z
五、还原5 ?! B, w5 z: d/ h- k6 \9 p
还原的过程参考 3.5 节,步骤完全一致。最终还原成功后,全片 Flash 内容已经擦除。最后,将 TZEN 直接修改为 0xC3。
' F, M9 A1 T# Q9 ?( I8 W0 c
# D- B. |% N( l" ]$ ]: t 微信图片_20240229163155.png ! w, V8 J$ [5 i' j
3 ]! l( q) U' l1 H0 i' }
至此,芯片完全恢复成原始状态。另外,DA 回退过后,之前预配置的内容也自动清空了, 因此,后续还需要重新进行预配置 (provisioning)。
4 _: F' Z6 R0 y, i3 }, J) O( r/ y0 B7 Z& f: a
, q! b6 R9 W- \; E
转载自: STM32
1 X. Y3 F( s9 V# z1 a( e1 I) [' E如有侵权请联系删除
- r7 I9 U1 Z, Q9 I6 i7 h* P+ M+ v' m+ v) a9 k

+ M7 Q; |  m% _0 C8 _, h  E& i
赞 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 手机版