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

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

[复制链接]
STMCU小助手 发布时间:2024-2-29 16:53
一、前言
" R1 k) M! d* j% p( d( ]STM32H5 是 ST 2023 年新推出的产品系列,与以往 MCU 不同的是, STM32H5 推出新的 product state 功能特性以替代以往的 RDP 功能。
2 i( _7 p, V. M: |2 u# V
' M1 t% T& p6 a; @4 Q5 Q. { 微信图片_20240229165316.png
5 H" _) B1 l- L" Q, W8 W
/ H. Y* Y3 v0 S6 f1 T/ B
如上图所示,product state 有如下状态 :+ C2 R" r* a1 v; C$ q2 r& M7 T
( I  |6 H+ e' I+ y
Open(0xED) : 完全 open 状态,相当于以前的 RDP0。
, s2 c3 e3 T# Q8 Z" U8 S3 o

# j4 b  x$ M4 w' j# J2 L9 vProvisioning(0x17) : 此状态是专门用来做预配置的。 . c/ \" f0 N* h' z* N* Q* Z
% k1 G. c. |! ~" n& q% f  e, x$ w% `; Q) m$ S
iROT-Provisioned(0x2E) : 用于 STiROT 或 OEMiROT。3 ~% ^* ]7 _% _" b

/ H) [: z) d2 h8 M' C) y; P3 [TZ-Closed(0xC6): Secure 区域关闭, 相当于 RDP0.5(仅在 TZEN=0xB4 时有效)。 3 q1 b# p) ^2 b/ u1 X5 f* E

2 V- s2 k+ B7 j& U/ x$ IClosed(0x72): S 和 NS 区域均受到保护,这点有些类似于 RDP1,此时调试口没法对其直接访问,但可通 过 DA 打开调试口或回退,这一点有点类似于 STM32U5 上的可带密码回退的 RDP2。 & Q" a# t6 [1 S2 B
9 X" _' v: u1 F4 ]+ o
Locked(0x5C): 完全关闭芯片的外部访问,相当于以往 STM32 芯片的 RDP2 保护等级。: X% O' W+ G) s& Z4 _  x8 z
& b/ \! e% }0 r% s
整体如下图所示:& |7 E9 a& H& g! y  k! B: R

  ]7 F# ]: {8 _ 微信图片_20240229165313.png
3 |, c- l1 R" ~" c) |2 y5 z( G+ L

% V5 d' p4 z* R$ m2 ]其状态切换如下图所示 :
; C! U- w# H5 c. d2 T' ?% U+ e, b0 |8 w9 g2 W; _) `0 _" }5 m
微信图片_20240229165309.png * W5 G1 l# V( @$ Y) g/ V4 }. q/ z
" U  }7 X! Y% b" q! R, w: x3 c
如上图所示,product state 从 open->provisioning->iROT-Provisioned->TZ-Closed->Closed 如此从左到右是可切换的,但是,要从右到左如此回退,则必须要经过 DA[Debug Authentication]过程。如上图所示,经过 DA 后,要么完全回退到 Open 状态,要么部分回退到 TZ-Closed 状态。
$ `( {: e& F9 n1 s! I& T( a
& s+ x( g2 h, X所谓的 DA,就是通过向芯片提供证书(STM32H503 是提供密码),通过芯片的身份认证后,允许向 芯片发起 product state 状态回退,或者重新打开调试口请求(仅当 TZEN=0xB4 时)。0 ~; l+ o) W, o, m! N! h" A

6 C  o: O" E* {; h; K由于新的 product state 和 DA 的引入,所有 STM32H5 开发者都必须掌握 DA 的用法。因此,本 文档针对 STM32H5 初学者,演示当 TZEN=0xB4 时, 使用证书来完成 DA 过程。
  |3 t" K- ^. g# x

& O1 N9 {' b3 v! _二、准备工作
+ r" D5 m+ i1 E" f; }" }8 T开发板 : NUCLEO-H563ZI
2 z# C( _5 i* Y
) E, G3 A4 E) e, o7 t1 H
微信图片_20240229165305.jpg
5 Y9 `; [4 d' A/ z3 x+ Y) [' M) C6 L
/ ^: u- o( W' }软件包 : STM32Cube_FW_H5_V1.1.0
$ V. Y2 R# z) C, _: H+ O9 W7 @) \3 [2 j1 J0 Y& o
工具:
: b6 D' s0 A1 Y! u- L$ v8 m  t3 O/ {STM32CubeProgrammer v2.14.0
: E- J  b1 N- Q( z! Y/ h8 j0 Y0 CTera Term 串口终端显示$ T. B! f% t' [0 r- r
Trust Package Creator(安装 STM32CubeProgrammer 时一并安装, 注意勾选)# n( l4 ]+ l) S  w
IDE: STM32CubeIDE v1.13.0: {; ?/ z: |3 ?1 Y9 B
STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下,在本动手实验中,我们 默认将其放在路径 C:\workspace\目录下。0 h. R+ e* W3 a$ `/ e
7 |& {  w( x) S, k
三、生成 OBK 并测试
9 k: m% T+ V' z5 l" R# W在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA,在此目录下,已经包含了自带的默认 obk,密钥以及证书。其实 我们可以直接使用这些 obk 以及对应的证书和密钥,这里我们将重新生成一套,并测试它是否 OK。. f% D( \1 ]$ w& x6 ~/ }

- H! Z: ]# S9 p3.1. 重新生成密钥对打开 TPC(TrustedPackageCreator)工具 " v- f4 G8 ?, Q- ^5 U

4 t, f' b( L- R" E" r 微信图片_20240229165302.png 6 Y3 H4 {, f  p! z) M

, i. [3 W8 T7 S  t( W1 j在 xml file 处,导入 DA_Config.xml 文件 :
" w* a9 ^" u; [# ?1 ^C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml
7 Z# o+ O- ^8 i$ p( e0 U) U: t2 U% b0 {如上图,在导入 DA_Config.xml 文件后,点击 Regenerate 按键后,将在 Keys 目录下重新生成公钥私钥对 :
" J. l" X6 W" n0 k! I) n& C. ]4 m! A5 \0 ?; o! M5 w
微信图片_20240229165259.png 8 g6 W! v1 x- m! |0 n$ w7 j

3 Q, r0 N: j' a& l, P这组密钥对就是接下来需要使用到的密钥对了。8 m+ I2 G6 r( z" u4 L
其中 :
4 q  O! X) K! E" i( XKey_1_root.pem 为私钥
+ Y6 u$ U! u! E' j  nKey_1_root_pub.pem 为公钥
, Q& }, n) U" @2 f8 \8 f! S6 A( m. K9 `7 T0 g
3.2. 生成 DA OBK 文件
+ Q3 r+ E$ {; f  d+ {# ?: ?接下我们将创建 DA 的 obk 文件 :
/ [1 }* }  r8 K0 ?! Z* Z9 f5 i  T7 V3 q; b* X7 ?1 O
微信图片_20240229165245.png
5 ?) K' _8 {  o% H
% t( t: o' r( z; ^/ P) l# ]
如上图所示,继续在 TPC 工具中,在 Permission Mask 下,激活允许的操作许可,被激活的就是 DA 认证通过后,允许的操作. 然后在 Output File 处选择输出文件。我们使用默认即可。然后点击 Generate OBKey 按键,则在 Binary 目录下生成 DA_Config.obk 文件 :! y" |" {6 O1 h% ~3 \4 C" K

: F; K0 C( b8 v 微信图片_20240229165240.png / D0 u. i2 x* V& W! |( i
2 G7 s+ m8 H% T$ S* _
这个 obk 文件就是我们后续将来做 DA 预配置(provisioning)的 obk 文件了。
% {' H( }; Q5 y! m" P( b. m& {, D) q2 T* z
+ h4 X* {+ |' I+ ]( o
3.3. 生成证书6 w: _- ?6 c6 c* ?0 T
接下来我们继续用 TPC 工具生成证书。
7 E( k+ r/ h2 A7 S  z2 J$ \& M4 a0 L# Q# y7 o4 E; s4 }
微信图片_20240229165237.png
% U9 B6 J( G2 O. `0 {  v
5 F4 P6 d- a0 e5 t# H; j0 b
如上图所示,在 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# Z8 f9 @. Q9 |& o" v, e2 t( Q
9 y# e# k( U5 V+ b" x1 f
  \4 Y- ~, _# q, ^* J' g
而在Root Public Key处则选择之前生成的公钥文件:C:/workspace/STM32Cube_FW_H5 _V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root_pub.pem' ]( ~5 A2 u  h9 G" O! h7 Y0 J+ X/ ~- `
- G' c- @: K. z2 z/ K1 d& @* w
然后在 Permission Mask 处选择此证书所允许的操作许可。我们将 Full 回退 to TZ,以及Secure/Non Secure 下的 Level 1~3 的 Debug 权限许可全部打开。1 U/ W$ }# D; c% N: j  X: _

4 ?& z8 W) [2 s- I" N
在 Certificate file 处选择输出文件,我们选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Certificates/cert_root.b64
+ q) L; d" Q- f/ E7 B即在 Certificates 目录下生成 cert_root.b64 文件,最后再点击右下角的 Generate Certificate 按键,最终在 Certificates 生成了 cert_root.b64 文件。
0 J4 |8 Y# _. p
; O* e" k; V6 v 微信图片_20240229165233.png 4 ]% p. G* n) N5 d
0 H  o; O: g6 Z9 b, O
如上图所示,在 Certificates 目录下将同时生成两个文件 : cert_root.b64, cert_root.cert。4 Q+ t$ l0 M2 P9 |% z
其中 cert_root.b64 就是我们需要的证书文件了,它就是根证书。它将在后续步骤中进行 DA 时将会用到。而另一个生成的文件 cert_root.cert,我们并未用到它。: j+ G- J; Q* [) K, W3 }

) h+ o: U" U# _! `
& u8 C, Y) L/ U) i
3.4. DA 预配置 (provisioning)( t  b7 t* L* U% P% B
接下来我们将做 DA 预配置,在此之前我们确保使能 Trust Zone 功能,即 TZEN=0xB4。2 O* K, H- D- N8 q- z" O

0 S- z# }; y) ? 微信图片_20240229165229.png . C8 p, j8 t. o/ o8 y- g$ b# [

6 m9 G3 I  c& ^/ w7 _5 \7 a; ^如上图所示,使用 STM32CubeProgrammer 连接芯片,并将 TrustZone 打开。
" W* F1 x6 s8 p0 K5 @& G6 e然后将 Product State 切换到 Provisioning 状态 :
4 m9 S; q9 o- M' f" k
6 t5 X6 U. Y* E  i; a9 e4 q2 K 微信图片_20240229165226.png
- B5 I/ }5 \1 W* m2 P( Y' j8 Q' J& a5 q7 W* d/ [5 O% L9 U2 I
接下来正式做 DA 预配置…
1 ]4 v8 f* T* P: M  F7 w& V
  I2 p# P1 x- B7 H6 N7 k0 R 微信图片_20240229165223.png * D& w) n9 n& p- r

0 ^- I8 j6 Z+ m如上图所示,在 STM32CubeProgrammer 左边选择盾牌图标,然后在上方选项卡处选择PROV,接着在 OBKey file path 处选择之前生成的 DA_Config.obk 文件 :
$ O- |2 Z3 \6 I/ [# c% j) a8 ]. A/ t0 T8 o  t
C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Binary\ DA_Config.obk
! x) D8 b! i) S8 C- L0 T- ?8 h! g) k

1 H8 y% F/ m! z9 \最后点击 Start Provisioning 按键…* a% ?" o7 k5 b/ Z3 y

) R$ s+ Z, g% m! r9 p6 o4 H# X 微信图片_20240229165219.png 8 E" |7 S; d  v* i5 E

9 j: Y" l$ [$ T成功时,将弹出消息提示成功。此时表示,DA obk 文件已经预配置到芯片内部并且已经成功了。然后断开 STM32CubeProgrammer 的连接…% [1 _  F( [* O2 ?$ x1 J

! o$ f( L( b9 e! K- c 微信图片_20240229165211.png ) }+ L$ W. j0 h
. U& \+ h5 |/ F: p9 `
如上图所示,点击 Disconnect 按键,确保 STM32CubeProgrammer 已经断开连接。接下来我们将尝试用证书做 DA 回退…
: N7 u& K1 ~1 R1 I, k! B4 u* t9 z

1 s' M9 _$ y! c4 ^+ T& d9 \' z& _3.5. DA 回退
' k( ]4 M9 D* h# u+ \3 j# k$ f" B
微信图片_20240229165207.png
( i6 i& P4 k# z$ P; P
0 w3 z/ S6 E3 ~% s% q" I& F6 c6 g5 s
如上图所示,在确保 STM32CubeProgrammer 断开连接的情况下,左边还是选择盾牌图标,上方选项卡处选择 DA,然后在界面中点击 Discover 按键… 3 ]4 l, ^% N; g7 G9 M; T

7 v" J8 ?" Q$ m! V* Z% H
微信图片_20240229165204.png
! P0 D# f# h5 f8 G" y8 v+ D

+ T3 n9 J  X% m! h; d2 \) T, O1 Z如上图所示,在接下来的界面中,在 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
3 g" f1 C+ q7 E1 L" h
  Q  X8 N# Z  X7 b如上图所示,在接下来的界面中,在 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.pe8 Y- ]4 j. [: b: I9 v
) l% J/ W+ G' C8 X/ A- L. N
在 Certificate File Path 处选择之前生成的证书 cert_root.b64:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b6
* L$ c  \" k0 }( f2 P( M

8 Y- \) q: |& C" r: }% l- \  w然后点击右边的 Continue 按键… $ H+ C0 M+ {4 N7 r% R6 ?9 y

( T0 L7 e4 X0 Z9 J8 W
微信图片_20240229165158.png & Z1 x2 G7 X- c# X( Y
# ^+ X9 C4 K  Y; S) B9 s  U+ M1 e# v
如上图所示,在下方新显示出来的界面内容中,在左边选择 Full Regression, 即你想要的操作,然后点击右边的 Execte 按键…) j3 K$ ^5 w0 X( C- p- v! x

+ w6 _. j: Q3 ~1 v6 j
微信图片_20240229165152.png - T- M' ]' H# y+ `

# t/ D/ B) A1 J& }( U! P如上图所示,弹出界面显示 DA 成功。
! l1 K, ^* t/ p" V+ X
9 e3 f, _8 ]$ p这也就表示,之前生成的私钥文件 key_1_root.pem + 证书文件 cert_root.b64 正是匹配之前生成的 obk 文件 DA_Config.obk 的。8 ^2 y6 z# P- ]% {- _
* ]3 s0 `5 y$ W/ _+ P1 Q) f! o
其中 DA_Config.obk 文件和固件 hex 文件是要给工厂烧录芯片用的。而私钥文件 key_1_root.pem + 证书文件 cert_root.b64 则是需要保留,将来工程师需要它们来做 DA 回退和 DA 调试用的。
# J% K( C# Z" m$ S# I9 |0 h! h. z  `7 K* N
这里需要注意地是,如果上述 DA 回退未成功,则表示证书+私钥与之前预配置的 DA obk 不匹配,需要重新执行 3.1~3.5 节。直到 DA 回退成功为止,否则切记不要进入到下一步骤,不然很可能会由于证书不对无法回退导致芯片废掉(除非用户代码可以执行回退)。
. I- [% P! `3 n) ]8 L
! ?; X7 z' d5 X+ G; n& W+ d
1 k) y( Q! p. M  g
四、运行一个程序并 DA 调试
5 K- J5 Z5 ]* a3 \3 O6 l4.1. 在 Open 状态下运行一个示例程序
% r9 @$ Q" s8 [+ F( f2 o* W
使用 STM32CubeProgrammer,确保 product state =Open, TZEN=0xB4:
' F$ [3 C9 H, D( h
: w7 w9 f0 X3 E+ G1 I 微信图片_20240229165146.png
6 s& Q' V! @* F( ^! H# j) ^4 y6 Y) }( i
并确保:SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F, SECWM2_PSTRT=0x7F SECWM2_PEND=0x0:# n. _0 k) G, ?+ q( t7 |& ?& s
2 e* u: L: [+ v+ N( B1 T
微信图片_20240229165142.png
+ A7 B: T; M/ y) I0 e! Z
3 d) y; E; Z; \然后使用 STM32CubeIDE 编译 STM32CubeH5 包下的示例工程:STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Examples\GPIO\GPIO_IOToggle_TrustZone\STM32CubeIDE 分别先后编译 S 和 NS 工程并烧录对应程序,并复位运行。正常情况下,可以看到板子上 LD5(橙色), LD6(绿色)两盏灯在来回闪动。即表示测试程序运行 OK。: K3 c$ A5 S. S$ U5 ?* m0 U+ y' X0 i

0 r0 B' b: Y5 E+ b% M6 d. `
/ m. _, A8 H( Q% @
4.2. DA 预配置( T2 x# t. I0 U% `
接下来我们参照之前的 3.4 节,将 product state 切换到 provisioning 状态, 然后进行 DA 预配置。 / y+ X" |/ B8 s

7 f0 ~1 O: @$ N2 C) Q" p2 y( N 微信图片_20240229165137.png
+ m( g( @. V; G+ ^  w$ f8 e
7 [7 t; D7 M4 v( j8 ^! `0 q, f如上图,切换到 provisioning 状态。
9 K- a7 [) L; G! R
8 N. K& s/ p' l1 n: r* A 微信图片_20240229165132.png - n- U4 P( R: ~& E% D
/ H8 q0 [/ }5 S
如上图所示,导入之前生成的 DA_Config.obk 文件,然后点击 Start Provisioning 按键,进行预配置。4 D& ~' o  E4 k; @
4 `, t! r& V( ?
微信图片_20240229165128.png
0 S# }8 v: p  ^+ J- c
0 }: ^5 u) q6 s" C弹出上面显示模式,则表示预配置已经成功。
: u3 w, v% `+ W4 ]: X/ h6 V, H' i
- J+ ~9 |1 R$ V/ o8 D4 V  s6 b

/ L) O/ c3 L2 R7 c4.3. 修改状态到 Closed 状态 $ V+ x& {, H) x2 J+ {5 }& }% a  M

' [$ f! g4 {) N5 S: c. p" ~: T 微信图片_20240229165124.png * R) a2 a8 W# X
7 o0 }5 J3 w. N' U5 |: n, C. G6 V
如上图所示,接下来将 product state 修改为 Closed 状态。此时 ST-Link 连接会自动断开,表示芯片内部调试口已经自己关闭了。  x  v  O/ d. ]' L6 ~5 {$ u
此时查看板子,LD5、LD6 两灯依旧来回闪烁,说明程序在 Closed 状态下运行正常。只不过此时调试口是连接不上了。+ v- I: y6 t6 ~2 L0 r' O* A. E2 y
) `0 e2 N: _, o$ l" d# j" f
4.4. DA 调试
4 F& x- R% Y, j( _3 l9 t4.4.1. 使用 STM32CubeIDE 调试 NS 工程

  B# L2 X) d& `在 STM32H563 处于 Closed 状态下时,SWD 口默认是关闭的,此时是无法调试代码的,若想调试代码,必须得通过 DA 认证重新打开调试端口,好在这一功能已经集成在 STM32CubeIDE 中了。接下来我们将使用 STM32CubeIDE 调试 NS 工程,在 NS 工程的 Debug Configuration 中, 在 Debugger 选项卡下 :
2 n/ L) u. Y: |, U# q( L, `' T; @7 x! A$ O* n
微信图片_20240229165121.png 8 i! u; Q3 {: {: J5 R# J' H

3 c8 ?9 R1 D% w' h  x2 X0 ^2 i如上图所示,在 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 按键… 0 U& U5 `4 ?6 e$ x$ I
" g0 C6 p4 [/ I% E3 q
微信图片_20240229165116.png
2 I4 P' y9 u# P) q9 G2 \* z5 z' n; p7 a% ?# o% `/ p
如上所示,程序在运行在 NS 工程的 main 函数开始处则停下来了,接下来你可以选择单步调试...2 w9 ?8 t( z" _# B. {
% _+ ]& v; v* x7 ^
4.4.2. 使用 STM32CubeIDE 调试 S 工程
# }1 h6 j6 P# r' `7 ES 工程的调试配置有些许差异。9 ^7 B/ E+ K, G
. o; L+ H1 G% R/ _8 ~
微信图片_20240229163237.png
; H+ Q: e4 R2 q- S! B; G
. Y. U) ~( J, I. ~2 I如上,Reset behaviour Type 为 None,同样在 Debug Authentication 下设置之前生成的私钥和证书,Permission 变为 Debug Secure L1。& t6 E: `4 G! H; ~) L5 m/ ~

* p/ }( N( d3 V, U) V3 H% P# i/ E5 e 微信图片_20240229163234.png
8 I* e9 d7 X2 ^% d: K/ }- H
% z5 i9 ]! O& x. U6 v4 ^8 J然后拖下来将 Verify flash download 之前的勾去掉(如上图所示)。
5 i  Z) e; E: ]9 T+ k6 r9 N6 v. y" C' N" F2 B& a  S# ^" @; J* r
微信图片_20240229163232.png 2 _/ b0 R2 R$ j, K/ _0 ^% a% _6 |

& ~* T- \7 o; p" B6 o2 v如上图所示,在 Startup 选项卡下,在 Load Image and Symbols 列表中选择当前工程的 Image,然后点击右边的 Edit…按键,然后在弹出的对话框中将 Download 前的勾去掉。点击 OK、Apply、并 Closed、关闭当前窗口。接下来在 S 工程中的源文件中的 xxx_it.c 源文件中的 systick 中断入口处设置一个断点, 如下图所示:
; t0 l( k9 P6 |. A: s7 M1 F# U+ M% W9 |5 i# Q% e
微信图片_20240229163228.png & t4 k: ]4 R; Y% p5 p
6 E" M+ Y% u* O1 x% j' G" `
微信图片_20240229163225.png
4 c% M/ m& B; O/ d# Z* E! x. }! [2 b5 V% Q- V
微信图片_20240229163222.png
1 Y+ H! R$ j# E, q9 G6 B
& j; D3 J1 ^: }如上图所示,程序运行在断点处停下来了,接下来你可以单步调试 Secure 工程了。这是一种完全没有破坏现场的调试方法,适合当出现问题后,直接去查看出现问题的代码行。当然在调试 Non Secure 工程时,你也可以按此方法来配置。也可以达到不破坏现场的效果。
! e) n! w( ~& O1 ?5 P
. U/ W9 y5 U+ b$ L0 R0 r- h4.4.3. 在其它 IDE 中进行 DA 调试0 m! V( N$ }* u* b7 ^# p. b" R
由于其它 IDE 当前最新版本还并未将 DA 过程集成到 IDE 中,因此,需要利用 STM32CubeProgrammer 进行 DA 认证通过之后,才可以用 IDE 进行调试。- v' Y1 A" m+ d: E) c
) J3 J5 S) t4 g
接下来我们将使用 STM32CubeProgrammer 通过 DA 来重新打开调试口。
1 S8 x  Z' Z+ N% s: c( i$ T* }5 |/ t8 {& E& t3 J+ ~3 F  a4 H4 d7 R
微信图片_20240229163219.png : E! X. O3 d3 f

; e" u' ]( @, ^# B7 ^, P( Y在断开连接的情况下,在 STM32CubeProgrammer 中,选择 DA 选项卡,然后点击 Discover… 7 g) u/ ?8 ?. s4 S# r
/ [9 u3 a8 M2 M9 ~4 p$ m- s$ o% E
微信图片_20240229163215.png 1 d# ]/ e6 {. n% }

3 Q+ V0 J' E% y与 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 按键…
! Z% l& Q! B' T$ o6 X
5 A1 \, Y; |9 d& R; ^7 O 微信图片_20240229163212.png
3 F& R4 V+ a; y; _% U8 x$ z! `. E. }
2 t* C" D8 r" h; c, V# M4 S: g如上图所示,在下面新显示的内容中选择 Non-Secure Intrusive Debug(Level 1),然后点击 Execte 按键… & |  o3 u. f/ |
/ L1 C, X! T8 n6 T% h7 M
微信图片_20240229163209.png 3 I# f. j, n  X& m) A% U5 j
; ?7 u' U- E4 O  j$ W5 Y1 W' k
如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接。
: f' G( b- a' q7 g2 {  {
# Z' f8 H6 G% U
接下来就可以选择你所使用的 IDE(如 Keil、IAR)调试 NS 工程了,如下图使用 IAR 调试 :" ~9 r/ n/ H, X& M

% Z# d* L, S' K; @1 |' }( Q 微信图片_20240229163206.png ( u0 Y2 v+ _/ f- r
3 h' m( B+ o- S+ d7 C
如上图所示,选择 Attach to Running Target 可直接 attach 上去查看当前运行的代码行。当然在之前 DA 步骤中,你也可以选择调试 S 工程 …
1 t/ Q$ D$ A3 o0 \1 `* v4 f. b3 i3 V4 ?4 f' N2 w  p
微信图片_20240229163203.png 8 w+ v  n6 n$ y
/ r7 y% h0 Y! v& }7 T2 }. I7 {. e9 S- |
如上图所示, 在下面新显示的内容中选择 Secure Intrusive Debug(Level 1), 然后点击 Execte 按键…
/ N# J( `" J- ^- V" j
8 ]+ z" w/ p5 x; Z. x+ e8 j2 A 微信图片_20240229163158.png
9 u2 ?  b  \6 ^, c6 D) q* Q
9 @# B; t4 I9 Q% b8 p如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接,接下来就可以选择你所使用的 IDE(如 Keil、 IAR)调试 NS 工程了。
& `- c( y, z2 m$ S1 R# O0 Q5 Z- T# ~2 u. u

6 E) R* {+ M6 H五、还原
5 l& ]) [' S: {  V! v3 t还原的过程参考 3.5 节,步骤完全一致。最终还原成功后,全片 Flash 内容已经擦除。最后,将 TZEN 直接修改为 0xC3。' z0 h% G* l: S" C, b
) E7 P2 ^! X6 H, y/ n3 ^( Q
微信图片_20240229163155.png 8 `: P9 J% ?, v& l1 M

$ z5 K- L% w4 B, I2 M: ?- ?' D至此,芯片完全恢复成原始状态。另外,DA 回退过后,之前预配置的内容也自动清空了, 因此,后续还需要重新进行预配置 (provisioning)。
+ i; N, j- i5 A2 `- d0 z, p3 ?+ ~  w5 @" C4 [' }6 w2 e, B
, u2 a+ a; R: ]1 t4 g
转载自: STM32
6 U0 s; z: C7 G如有侵权请联系删除
) q  w1 y; D4 ]' g3 k/ ?+ B0 D
/ p' |1 ~/ L/ O; i5 Z+ y8 N+ N0 L1 K8 A3 z4 X
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 手机版