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

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

[复制链接]
STMCU小助手 发布时间:2024-2-29 16:53
一、前言
" {/ w( U% e" R8 _0 ]; U1 YSTM32H5 是 ST 2023 年新推出的产品系列,与以往 MCU 不同的是, STM32H5 推出新的 product state 功能特性以替代以往的 RDP 功能。0 W! b  b/ ?1 V) g9 Z

8 ]  z) O2 A3 ~ 微信图片_20240229165316.png 4 r' h; r1 K+ T
/ @' ?6 Z) W7 d- ^) x5 w# c$ A
如上图所示,product state 有如下状态 :  s1 }; e3 r; o, O# J* p
* Y9 W9 M, Z0 g8 t; g
Open(0xED) : 完全 open 状态,相当于以前的 RDP0。$ ?! d" ?1 r& ]4 w, o* Z1 A

1 _, l/ N% n5 G0 B/ TProvisioning(0x17) : 此状态是专门用来做预配置的。 * G8 D* ]/ |' `7 N" W8 l8 b
6 ]: B# s1 d" }6 f$ a0 X7 |) Q) O
iROT-Provisioned(0x2E) : 用于 STiROT 或 OEMiROT。3 N0 ~* `, L9 R

0 F$ ^. Z) Y9 ]- ~! ]" DTZ-Closed(0xC6): Secure 区域关闭, 相当于 RDP0.5(仅在 TZEN=0xB4 时有效)。 3 b; v; Y3 k  `3 h& @2 ?

' o1 y9 |  c& Z0 F5 j, lClosed(0x72): S 和 NS 区域均受到保护,这点有些类似于 RDP1,此时调试口没法对其直接访问,但可通 过 DA 打开调试口或回退,这一点有点类似于 STM32U5 上的可带密码回退的 RDP2。 # G2 B7 X% H5 c" @

- Q; s$ j+ q( B8 k/ m+ {! S! SLocked(0x5C): 完全关闭芯片的外部访问,相当于以往 STM32 芯片的 RDP2 保护等级。0 g; @" L. L! k8 K+ c$ F
5 c5 Y3 \  ~. d( W4 i. J% l! z
整体如下图所示:
- Y; _4 i+ T: m# Z/ W2 w8 L% o+ k+ d* [+ q  Y
微信图片_20240229165313.png % c0 Q+ n5 ^3 _. D; G% K& m
$ g& V3 {2 i1 W9 I
其状态切换如下图所示 :
9 e) M" e. M, V& N( Z* S3 S' S6 N' K
; N9 p  e8 A( G' t+ j0 d, I6 k 微信图片_20240229165309.png
+ Q9 r0 {- d( i2 `7 ^% C7 k
3 l1 I: k, r0 Z
如上图所示,product state 从 open->provisioning->iROT-Provisioned->TZ-Closed->Closed 如此从左到右是可切换的,但是,要从右到左如此回退,则必须要经过 DA[Debug Authentication]过程。如上图所示,经过 DA 后,要么完全回退到 Open 状态,要么部分回退到 TZ-Closed 状态。
& z% a0 z3 d/ B$ I! u" D8 ]9 U  Z  L: N; P. m5 y% o/ K
所谓的 DA,就是通过向芯片提供证书(STM32H503 是提供密码),通过芯片的身份认证后,允许向 芯片发起 product state 状态回退,或者重新打开调试口请求(仅当 TZEN=0xB4 时)。$ Q; o$ M$ V/ k7 ]2 {7 u

5 s* c9 p9 q: P- V& O8 Y  S由于新的 product state 和 DA 的引入,所有 STM32H5 开发者都必须掌握 DA 的用法。因此,本 文档针对 STM32H5 初学者,演示当 TZEN=0xB4 时, 使用证书来完成 DA 过程。
, b; P# ]' c* c9 B6 V# S* @

1 Q. O& h. ]8 k( T8 [( D二、准备工作1 G. z4 [/ K9 @9 E6 Z$ ?6 J1 |
开发板 : NUCLEO-H563ZI
  F4 U" |% u6 M& Y+ v
. P2 x4 w0 g' u0 l& k
微信图片_20240229165305.jpg
) O" K/ S6 C2 u  [! K- l7 D
7 H0 G: b. W6 c' O软件包 : STM32Cube_FW_H5_V1.1.01 z( p/ O6 Q& M1 O- a2 ^
, Q' ^/ j1 Y4 @' c
工具:% P; I9 O6 T6 b5 C
STM32CubeProgrammer v2.14.0
' f: k- _1 P9 GTera Term 串口终端显示0 v) g; `+ @' ?* @
Trust Package Creator(安装 STM32CubeProgrammer 时一并安装, 注意勾选)2 y: t2 ]' Q; ?1 ?0 y
IDE: STM32CubeIDE v1.13.0+ D3 b5 u6 V  o6 p
STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下,在本动手实验中,我们 默认将其放在路径 C:\workspace\目录下。8 r* b/ {6 b" `
1 r' P0 u' N/ W& O4 A
三、生成 OBK 并测试
+ w, ]- o" m  K6 ?$ x在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA,在此目录下,已经包含了自带的默认 obk,密钥以及证书。其实 我们可以直接使用这些 obk 以及对应的证书和密钥,这里我们将重新生成一套,并测试它是否 OK。/ r7 A/ S# n' F. X
" Z- A' s; H8 |% [* N
3.1. 重新生成密钥对打开 TPC(TrustedPackageCreator)工具 9 G$ _) ]3 H7 V; b: L
' G- j8 Y+ ]9 K' C
微信图片_20240229165302.png
  t# m( T% X# s# ]) Y0 B
5 [( \1 j5 Z: D2 c" _9 k* S在 xml file 处,导入 DA_Config.xml 文件 :
. Y) t' ?, x0 F. a& q- LC:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml7 v4 I$ s! X2 J7 W2 P1 W5 a/ F9 ]
如上图,在导入 DA_Config.xml 文件后,点击 Regenerate 按键后,将在 Keys 目录下重新生成公钥私钥对 :5 n! q, @; @2 P2 w, A

$ A4 B9 ^; M; m% {  E, @9 f" l 微信图片_20240229165259.png
: G8 U, |+ w) k4 n1 X5 B* h* i& \

; E& X7 Z4 ?" r: B这组密钥对就是接下来需要使用到的密钥对了。
# s* D6 R- `) i+ ^$ L3 z+ M其中 :# k  }$ c/ m# V( [) G, b
Key_1_root.pem 为私钥% U' D' j* o- @/ |! Y2 A" K' ]. U4 A
Key_1_root_pub.pem 为公钥# v' ^0 S+ h8 a) G# O2 L! J

8 i5 G4 M( m  _; E5 T# J3.2. 生成 DA OBK 文件( e( B% {5 F* c. z2 [% @; H! Z
接下我们将创建 DA 的 obk 文件 :
" M4 w* _8 G" z- M! H$ C7 W  W. ~
& g9 ?/ W. g0 R9 F9 R5 O/ P: ?& T" W) K+ a 微信图片_20240229165245.png - t5 S+ `$ |) T

% B6 \) W! E( |: r, J如上图所示,继续在 TPC 工具中,在 Permission Mask 下,激活允许的操作许可,被激活的就是 DA 认证通过后,允许的操作. 然后在 Output File 处选择输出文件。我们使用默认即可。然后点击 Generate OBKey 按键,则在 Binary 目录下生成 DA_Config.obk 文件 :# h1 u# K& ^3 [% z" ~) ^
- N% n8 h$ h% T8 r6 G
微信图片_20240229165240.png   n1 l/ H& @' o3 X/ d4 W
6 P0 Y0 }+ Z% X; u) g) I
这个 obk 文件就是我们后续将来做 DA 预配置(provisioning)的 obk 文件了。* t: S/ s" a0 |: S

1 ?  Q% e) L) O. e' e

2 ?# T8 P( z7 w8 _# |3.3. 生成证书
2 \. J7 |3 ~1 o9 o7 O接下来我们继续用 TPC 工具生成证书。0 n- A( b* {( q: x! a0 |  f$ Z
) B- A: P' p( ~+ _% z4 t$ w  b
微信图片_20240229165237.png + }) F" z. `9 l9 k" r$ e- M3 W3 k) C3 o

; h3 U8 @1 H  N- J" B% }  o$ |如上图所示,在 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
! q1 |+ J( \4 @( c# h2 F
: u+ ]* N; e  F8 P: S4 ~0 _9 H" l0 Z
# S  K0 b+ g( B4 b1 a
而在Root Public Key处则选择之前生成的公钥文件:C:/workspace/STM32Cube_FW_H5 _V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root_pub.pem
" H/ H- U+ X4 j  y# u' ]# T# e7 V3 r& \: [, e! t, a
然后在 Permission Mask 处选择此证书所允许的操作许可。我们将 Full 回退 to TZ,以及Secure/Non Secure 下的 Level 1~3 的 Debug 权限许可全部打开。) ?6 u; P% W1 ^

" ~9 g3 O! K# [# c+ d' u3 R- o
在 Certificate file 处选择输出文件,我们选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Certificates/cert_root.b64
5 f# f" b1 |( ?) o! C即在 Certificates 目录下生成 cert_root.b64 文件,最后再点击右下角的 Generate Certificate 按键,最终在 Certificates 生成了 cert_root.b64 文件。8 S  o+ m2 }4 o% J4 X2 {

* b0 F4 b6 V. i( }/ I* m 微信图片_20240229165233.png 3 `1 H5 ^* M! x

0 L) R! ^2 t' j6 Y# D3 P1 H) s$ G如上图所示,在 Certificates 目录下将同时生成两个文件 : cert_root.b64, cert_root.cert。4 S% w/ J1 }+ D( a' B; K2 S
其中 cert_root.b64 就是我们需要的证书文件了,它就是根证书。它将在后续步骤中进行 DA 时将会用到。而另一个生成的文件 cert_root.cert,我们并未用到它。& M# w5 m1 f- R% h% \
4 `; N, I  e0 D9 [
. V  O5 g9 g" C- G7 y
3.4. DA 预配置 (provisioning)' [* h4 ]5 j  j' F6 v+ m9 g
接下来我们将做 DA 预配置,在此之前我们确保使能 Trust Zone 功能,即 TZEN=0xB4。
: ^2 ~9 X: x  F  @
5 D3 [' }0 ]  Y. Z' a" d 微信图片_20240229165229.png " b9 t& h! U1 U  j6 @

' t5 a, t2 {5 |2 T3 ?& j9 c$ K* O如上图所示,使用 STM32CubeProgrammer 连接芯片,并将 TrustZone 打开。
8 \+ A, ~5 s' m然后将 Product State 切换到 Provisioning 状态 :
$ M: s1 T- \' `$ f' B
3 C  N" j+ T1 O1 ]/ ^ 微信图片_20240229165226.png
5 n1 y* T* @) ?5 }# K: B9 \, A! d8 L% l# M2 ?, ?  B8 J- L9 r
接下来正式做 DA 预配置…
& s6 B5 O7 R! N
' V# N, Y4 q9 g$ D. f 微信图片_20240229165223.png / F4 B8 _' ]2 D; `' r4 d8 w5 I

2 y' e& q! ]- j) S如上图所示,在 STM32CubeProgrammer 左边选择盾牌图标,然后在上方选项卡处选择PROV,接着在 OBKey file path 处选择之前生成的 DA_Config.obk 文件 :4 d( c7 W5 _- Y+ {5 h9 v! [/ `

6 U+ n/ X  v& [$ F' q! h/ K0 p7 B
C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Binary\ DA_Config.obk8 z" q- V: t" k+ ~3 m0 k% P

$ `$ `- b* x; P4 n+ F6 _" `
/ L' Y' c1 P/ h% W
最后点击 Start Provisioning 按键…
/ \4 Q8 y  I1 b7 I) m( |3 F& K# r
: Z( X/ x' O, T5 | 微信图片_20240229165219.png
1 O( v6 A% h& Y7 Z: i; j- h( [- P
6 J" a6 w. \) ^& ?! l% \成功时,将弹出消息提示成功。此时表示,DA obk 文件已经预配置到芯片内部并且已经成功了。然后断开 STM32CubeProgrammer 的连接…  w) k: G/ R0 S. l3 E( M2 N, ?
& z7 v+ e& K3 L' X/ L: a
微信图片_20240229165211.png 8 C6 C$ M, ^! f" {* _

- \+ _' q9 g6 h如上图所示,点击 Disconnect 按键,确保 STM32CubeProgrammer 已经断开连接。接下来我们将尝试用证书做 DA 回退… ' V( k! K- N9 q# a3 N* ^( Z4 p
  W$ }; F  C( ^+ T* ]% V' h% g  n

. F5 j  R( }/ L7 L; V3.5. DA 回退
4 z& s9 ^2 `- t% }9 p8 }
7 v1 u% T# a  ]8 |; T8 | 微信图片_20240229165207.png ' B3 Y3 u! M# @4 M4 O4 {
) }4 t# r0 ?  [
如上图所示,在确保 STM32CubeProgrammer 断开连接的情况下,左边还是选择盾牌图标,上方选项卡处选择 DA,然后在界面中点击 Discover 按键… 9 K6 }+ B/ A/ R3 C. t6 z
7 H3 W$ I# e- n& i! _, W3 @
微信图片_20240229165204.png 0 z6 ?9 U/ N, x! |
3 Y0 k& _* V1 n) a7 W* s7 c
如上图所示,在接下来的界面中,在 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
$ p* I) `: x8 i7 d* X/ e. u; g- M5 @# 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.pe# Z4 u8 G$ Z# V) u& c5 ]+ _
8 O8 a3 e/ ~. U3 Z- ]( C6 w
在 Certificate File Path 处选择之前生成的证书 cert_root.b64:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b66 _$ Z$ ?; {# C9 j$ M

2 B! v/ S* t7 M. {1 t% s# Q8 }3 D7 K然后点击右边的 Continue 按键…
( ~& n6 W1 G- Q! _# \# E2 Z# t
2 E/ Z1 [8 O( G; p
微信图片_20240229165158.png 7 d9 k" {: ?; ?! B# ^
: _2 i$ l6 e' w, i$ U5 K' J$ m
如上图所示,在下方新显示出来的界面内容中,在左边选择 Full Regression, 即你想要的操作,然后点击右边的 Execte 按键…$ j  Q/ }. v3 Q: m! i. B' j

: M. r$ m% Q- b' k) j
微信图片_20240229165152.png . ?' ~' n: X& [3 K
7 E: |3 z  J/ l7 \
如上图所示,弹出界面显示 DA 成功。
) i# b. A* R. M) o2 g4 s/ s3 N" ^$ s5 _7 j9 U5 G, g
这也就表示,之前生成的私钥文件 key_1_root.pem + 证书文件 cert_root.b64 正是匹配之前生成的 obk 文件 DA_Config.obk 的。/ a3 ^& A- w$ E6 k, L% z& r

0 ~. k& m  l, V+ V  B其中 DA_Config.obk 文件和固件 hex 文件是要给工厂烧录芯片用的。而私钥文件 key_1_root.pem + 证书文件 cert_root.b64 则是需要保留,将来工程师需要它们来做 DA 回退和 DA 调试用的。( {& y$ I  n% S7 A
9 h* h% U# Y6 G
这里需要注意地是,如果上述 DA 回退未成功,则表示证书+私钥与之前预配置的 DA obk 不匹配,需要重新执行 3.1~3.5 节。直到 DA 回退成功为止,否则切记不要进入到下一步骤,不然很可能会由于证书不对无法回退导致芯片废掉(除非用户代码可以执行回退)。% `8 n- p$ t! K( V

; b; X' ], K& i' t

" a0 m9 ^6 `3 _0 {% `四、运行一个程序并 DA 调试
7 t1 w( j/ T8 {9 J8 y- D. }" a4.1. 在 Open 状态下运行一个示例程序
+ s. I! R, Y- f3 Y, p7 @) e# \* t) `5 [
使用 STM32CubeProgrammer,确保 product state =Open, TZEN=0xB4:/ `6 w, _2 q3 K- n$ ~2 I

9 C% R& u3 Q$ R" l) e% h 微信图片_20240229165146.png , ~* k, M) Z% B2 O" d3 ^2 R/ H- v
6 r1 Q5 c( f+ R" ?5 x( N6 |  \% @
并确保:SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F, SECWM2_PSTRT=0x7F SECWM2_PEND=0x0:' G# n2 Z# S! `# U0 b
6 z. L: _( \- c/ j6 ]
微信图片_20240229165142.png 1 w/ v* J* Y, T* A( M) X$ E- J  ]  h1 ~

5 M6 ]9 T5 c% b% b4 B: |然后使用 STM32CubeIDE 编译 STM32CubeH5 包下的示例工程:STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Examples\GPIO\GPIO_IOToggle_TrustZone\STM32CubeIDE 分别先后编译 S 和 NS 工程并烧录对应程序,并复位运行。正常情况下,可以看到板子上 LD5(橙色), LD6(绿色)两盏灯在来回闪动。即表示测试程序运行 OK。' w# x4 A! s& n6 g! M) X; S( d$ r

, u: M  v3 t5 N7 M% R
- c1 N# C0 w4 B1 J3 J
4.2. DA 预配置
3 B4 V, }" @7 b( }4 k接下来我们参照之前的 3.4 节,将 product state 切换到 provisioning 状态, 然后进行 DA 预配置。 8 R6 ~! z8 L9 e& G4 S7 n

2 D1 n. z  e- _# H; ?0 n" x* e: j 微信图片_20240229165137.png
* p* B% F7 k- q) G4 y2 E* }$ Z2 |  C5 g( G. W
如上图,切换到 provisioning 状态。
, C6 b6 c1 U2 k; c! z( Y
. A4 H7 J0 k& z2 i( F! k* X 微信图片_20240229165132.png
3 L5 G$ Z! ?5 t( `' c+ B' e( V) y
' f' }9 v! [) R  G. \, n8 G% V如上图所示,导入之前生成的 DA_Config.obk 文件,然后点击 Start Provisioning 按键,进行预配置。
# I7 Y( N: G9 o" q5 y! U
& W% l0 s( ]' U/ ^7 f+ | 微信图片_20240229165128.png ) N9 `; F4 ]5 I- |8 p! ]0 U: X- D; e

' \2 g+ Z2 N" O* [  K弹出上面显示模式,则表示预配置已经成功。: ]# s) v3 g8 \4 T+ k

! ^( x: Z6 m7 W: o9 p& l* C+ q
6 j  E. Z/ i6 s
4.3. 修改状态到 Closed 状态
6 n' x" H. c4 ]' @7 u
, M0 n: S/ s& X8 k0 ^* `  T) L9 J 微信图片_20240229165124.png / q) |9 |! i; C0 T, I2 j

: R, [% U: D0 \! L7 m7 Q( H如上图所示,接下来将 product state 修改为 Closed 状态。此时 ST-Link 连接会自动断开,表示芯片内部调试口已经自己关闭了。( i4 s! r0 t! r. F  `: s2 w
此时查看板子,LD5、LD6 两灯依旧来回闪烁,说明程序在 Closed 状态下运行正常。只不过此时调试口是连接不上了。
  L: _! e! t' [- @' o  m* R, D6 f
1 g8 H  u% h1 C$ B+ {4.4. DA 调试 , d9 W% j/ W5 A1 B7 w' f! f
4.4.1. 使用 STM32CubeIDE 调试 NS 工程
# \2 V2 ~  X3 U$ v
在 STM32H563 处于 Closed 状态下时,SWD 口默认是关闭的,此时是无法调试代码的,若想调试代码,必须得通过 DA 认证重新打开调试端口,好在这一功能已经集成在 STM32CubeIDE 中了。接下来我们将使用 STM32CubeIDE 调试 NS 工程,在 NS 工程的 Debug Configuration 中, 在 Debugger 选项卡下 :
7 j* A2 e, h# s! J8 S' P/ {
2 V) u$ n9 n( S) s4 `* e1 ? 微信图片_20240229165121.png & r8 s% i) D3 c$ @; V8 r

+ W) z0 j6 A$ ]8 {. L7 w$ N. Y如上图所示,在 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 按键… 8 f; I6 l5 w( o- a3 t( r
9 v% k) H  ^; p0 i1 v- G9 a
微信图片_20240229165116.png
( C4 }: F' N/ F/ h( S
5 E* T/ o" H1 w: B如上所示,程序在运行在 NS 工程的 main 函数开始处则停下来了,接下来你可以选择单步调试...2 Y* H! `: D- }9 J+ W$ G" \9 e

  A2 T, h! Q# Z& v; d; L1 x/ x
4.4.2. 使用 STM32CubeIDE 调试 S 工程* K/ o# \% N0 w, v2 n5 G" l
S 工程的调试配置有些许差异。
" {- [/ H9 _6 H6 f6 |/ M
1 {, h1 }$ {7 j/ Q$ `8 ^6 B 微信图片_20240229163237.png
$ D: ]8 B. K# ?7 J5 U% ]0 d; {9 m) ^5 ~& f2 F
如上,Reset behaviour Type 为 None,同样在 Debug Authentication 下设置之前生成的私钥和证书,Permission 变为 Debug Secure L1。/ J4 d8 p- S" U8 r6 R
3 {0 e2 o$ ~4 d8 @
微信图片_20240229163234.png
! B6 V8 A, G5 `5 g: ?2 c5 n# B6 C% e6 `5 S# {0 d% m
然后拖下来将 Verify flash download 之前的勾去掉(如上图所示)。
6 n' l" K* w  w2 u
$ i7 z0 F+ T- I3 ]. A 微信图片_20240229163232.png : T# ^2 G# y4 L* I: B) ^
  X3 \7 {) q, g5 B9 F
如上图所示,在 Startup 选项卡下,在 Load Image and Symbols 列表中选择当前工程的 Image,然后点击右边的 Edit…按键,然后在弹出的对话框中将 Download 前的勾去掉。点击 OK、Apply、并 Closed、关闭当前窗口。接下来在 S 工程中的源文件中的 xxx_it.c 源文件中的 systick 中断入口处设置一个断点, 如下图所示:
+ o2 N& U# ]9 N; O/ ^
2 i3 T2 C: l( @! A0 K4 G; G; ^; e( ` 微信图片_20240229163228.png ; y- H* j; F* Z' N

' w, g  i% `5 Y7 B, T 微信图片_20240229163225.png % J3 |% j5 P# l1 Y3 B3 r) i$ K
7 x! y" k3 W, G$ J- d
微信图片_20240229163222.png
. O/ u, r& @4 \8 A6 w8 Y3 d6 }6 I( \5 N! X6 U; E
如上图所示,程序运行在断点处停下来了,接下来你可以单步调试 Secure 工程了。这是一种完全没有破坏现场的调试方法,适合当出现问题后,直接去查看出现问题的代码行。当然在调试 Non Secure 工程时,你也可以按此方法来配置。也可以达到不破坏现场的效果。
3 {4 G+ X( H1 _" e; Z$ o, J0 A- ?# B3 a& u
4.4.3. 在其它 IDE 中进行 DA 调试: x* [' A' {) B
由于其它 IDE 当前最新版本还并未将 DA 过程集成到 IDE 中,因此,需要利用 STM32CubeProgrammer 进行 DA 认证通过之后,才可以用 IDE 进行调试。% h/ C' `0 ~4 t7 C3 h' U* ]" g4 I$ x
& N. ]& V, m, o' U, y/ ]
接下来我们将使用 STM32CubeProgrammer 通过 DA 来重新打开调试口。
. n; N. j5 ]' v) _  Y( G. z' P6 ]
- A. p, e1 x7 ?6 I* \- T+ L0 J 微信图片_20240229163219.png
2 U- e, I% s4 E# Z  }$ u, _2 @4 ]+ M7 h( `9 |8 c1 o; R
在断开连接的情况下,在 STM32CubeProgrammer 中,选择 DA 选项卡,然后点击 Discover… ( W- ~# Z$ i7 E6 S+ S6 I0 Y
6 ^/ L0 p' T/ u& @1 t  b
微信图片_20240229163215.png
# N6 {8 S) N! Q  A+ ]
2 h/ E- |# A6 @2 |! O0 N  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 按键…
- l. f8 }9 y, a! ]) N. [3 k. @) M
微信图片_20240229163212.png
; a. _3 F% x. X" V9 d" y
; T+ A6 D, H6 v( |" K& A6 ^9 \/ R如上图所示,在下面新显示的内容中选择 Non-Secure Intrusive Debug(Level 1),然后点击 Execte 按键…
" M1 d+ B/ A, e$ c" E1 T. W3 m7 V; y3 O
微信图片_20240229163209.png ; E. t% i! h9 C: U* W+ M# v

% S: s( ]2 O1 n+ a8 g如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接。3 q4 w8 O/ ~4 R
# t+ a9 u+ h" X, N( ~" h; N  G/ k
接下来就可以选择你所使用的 IDE(如 Keil、IAR)调试 NS 工程了,如下图使用 IAR 调试 :, B$ X2 a; ?! [' I$ h* r

1 G* {' i8 ~5 w' ` 微信图片_20240229163206.png
+ A0 W9 O) U: C. s0 z" o, n  U
如上图所示,选择 Attach to Running Target 可直接 attach 上去查看当前运行的代码行。当然在之前 DA 步骤中,你也可以选择调试 S 工程 …
, W, J  n) G2 z( U. J. p! Y* l) n* ^0 X- Z/ R3 X" E! J7 I
微信图片_20240229163203.png
# \0 e3 s* Y6 P, J3 |6 i& j
1 q; i- W: d( T4 m; R6 e, V如上图所示, 在下面新显示的内容中选择 Secure Intrusive Debug(Level 1), 然后点击 Execte 按键…
5 k  w& H# b/ X9 o
0 H2 n5 f. J' u9 n4 n 微信图片_20240229163158.png
  s+ ~" ^6 ~  i- K: _0 o* Y7 `- Q4 r8 ?! c: X4 |" F* o
如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接,接下来就可以选择你所使用的 IDE(如 Keil、 IAR)调试 NS 工程了。
' Z( a) S8 @4 S7 |. V9 ^; E4 K& Y. b  Z6 |, |3 [5 t) g, C9 A6 u' {
' l7 E5 e* P) u
五、还原
  h! Y) f; J4 P0 K: X+ O7 C还原的过程参考 3.5 节,步骤完全一致。最终还原成功后,全片 Flash 内容已经擦除。最后,将 TZEN 直接修改为 0xC3。- k3 X& l0 e4 u; }& H# ^

0 w3 h2 @4 a( u- l& W 微信图片_20240229163155.png 3 F1 Z* c" o4 A, z6 Y. R
! I/ C- _! S1 J  I* O# u, _
至此,芯片完全恢复成原始状态。另外,DA 回退过后,之前预配置的内容也自动清空了, 因此,后续还需要重新进行预配置 (provisioning)。
( B2 W2 q  |2 j* Q& K5 \0 m4 t( I; H! L; _1 ?1 P

7 \) U8 `8 A/ t3 Z转载自: STM32
" n0 j5 s9 B0 i5 v3 Y' y% q' f- K如有侵权请联系删除
0 h) Z4 _5 u3 X& P0 t1 w' ^
$ _2 m3 P: F. _6 `( S
9 b  v6 ^" W& u- L6 r, S. d
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 手机版