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

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

[复制链接]
STMCU小助手 发布时间:2024-2-29 16:53
一、前言
; X+ C3 M# e( V. R, lSTM32H5 是 ST 2023 年新推出的产品系列,与以往 MCU 不同的是, STM32H5 推出新的 product state 功能特性以替代以往的 RDP 功能。
3 `- l& a4 x5 z8 [) J- u& ]# Q% M  |8 I- {: w% [. x2 T
微信图片_20240229165316.png - a2 U' |& ~) s" w0 B, o
( z% [: u8 G& O2 r$ Y
如上图所示,product state 有如下状态 :# r* D" `' x- r
- D! P. A1 h3 |
Open(0xED) : 完全 open 状态,相当于以前的 RDP0。) C) }% I3 \# q3 ]

' J3 V$ p1 e' s- w/ w. {Provisioning(0x17) : 此状态是专门用来做预配置的。
; @# Z  e% ^( K. M
1 K2 o  D0 C% ~. `# }6 ^iROT-Provisioned(0x2E) : 用于 STiROT 或 OEMiROT。
" _, M' f2 O( K1 L9 ?

# v+ R$ B+ s" t/ _( ?4 \TZ-Closed(0xC6): Secure 区域关闭, 相当于 RDP0.5(仅在 TZEN=0xB4 时有效)。
- G" F; m$ K& k- d" i1 V0 R& g+ u- F1 [1 L
Closed(0x72): S 和 NS 区域均受到保护,这点有些类似于 RDP1,此时调试口没法对其直接访问,但可通 过 DA 打开调试口或回退,这一点有点类似于 STM32U5 上的可带密码回退的 RDP2。
% G3 b+ ]) r  {" U4 S) k8 r
  I" a$ w3 m& G  ~2 TLocked(0x5C): 完全关闭芯片的外部访问,相当于以往 STM32 芯片的 RDP2 保护等级。4 {( d, k6 r- L: k) f; u( @+ c
, `+ J5 f: @% _: n
整体如下图所示:  _5 D3 s3 o4 _
5 ]+ i) e$ i1 D6 x- Y
微信图片_20240229165313.png ) j( V$ V& W; j" H4 y3 y
3 k) f  @4 D8 p* N
其状态切换如下图所示 :
( o1 l+ g  A1 D7 J7 D1 g# _) }% M
微信图片_20240229165309.png ! M% Z0 L8 U' ~# Y$ v( Q. n, Z

7 v+ s7 b2 R* ?# ]& b! \3 W% Y如上图所示,product state 从 open->provisioning->iROT-Provisioned->TZ-Closed->Closed 如此从左到右是可切换的,但是,要从右到左如此回退,则必须要经过 DA[Debug Authentication]过程。如上图所示,经过 DA 后,要么完全回退到 Open 状态,要么部分回退到 TZ-Closed 状态。7 j8 F2 f$ l( d. [
- k( I$ N7 w- [9 M; v5 p* E
所谓的 DA,就是通过向芯片提供证书(STM32H503 是提供密码),通过芯片的身份认证后,允许向 芯片发起 product state 状态回退,或者重新打开调试口请求(仅当 TZEN=0xB4 时)。
2 v" L+ H+ q4 t% x1 A% a- ]. `5 a
  X2 g& t/ d1 k) c
由于新的 product state 和 DA 的引入,所有 STM32H5 开发者都必须掌握 DA 的用法。因此,本 文档针对 STM32H5 初学者,演示当 TZEN=0xB4 时, 使用证书来完成 DA 过程。" o! z9 {- y# R. o0 \3 G- I1 q% ?, a4 z

( P6 k' }" w( T. z* l8 L二、准备工作
, v& m8 B; e! c+ s* Z! V0 L开发板 : NUCLEO-H563ZI ! n3 z2 }" `" C4 ?
0 O( B6 I3 B: ]
微信图片_20240229165305.jpg
8 r" ]7 b* d9 G+ W% B( S
1 T9 F& s  K  u$ K! @  G5 j软件包 : STM32Cube_FW_H5_V1.1.0
! F3 b1 B# R) i3 V3 A% {. f& U7 A  m) `3 |0 k# Q
工具:
9 F( U" z: ^3 V1 V; I% rSTM32CubeProgrammer v2.14.0
5 e' a& s; m. y: Q. L2 G/ A$ fTera Term 串口终端显示% C7 [; C, }* p% W
Trust Package Creator(安装 STM32CubeProgrammer 时一并安装, 注意勾选)
- _$ M5 `9 O- r" B3 ]4 L# ZIDE: STM32CubeIDE v1.13.0
/ ~7 m* S4 f5 H$ H0 d) P
STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下,在本动手实验中,我们 默认将其放在路径 C:\workspace\目录下。
1 h# m% r( Z4 ~3 {9 z8 g
5 k( F! s9 p2 L. C& ~$ a9 }4 Q三、生成 OBK 并测试- c. Z  Y( X$ ]6 ?% a
在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA,在此目录下,已经包含了自带的默认 obk,密钥以及证书。其实 我们可以直接使用这些 obk 以及对应的证书和密钥,这里我们将重新生成一套,并测试它是否 OK。
) a/ F2 I' Y- S8 ?! H

9 m* @- M7 S% g$ B3.1. 重新生成密钥对打开 TPC(TrustedPackageCreator)工具 # O4 G  Q+ ?/ k# M# V

1 o& _7 x) h6 H6 ?/ Z( a$ f 微信图片_20240229165302.png
: w: Q, A1 {. F6 Y5 K
: \( N" V4 E% |, _在 xml file 处,导入 DA_Config.xml 文件 :
+ Z6 g; L& }  r# }0 X/ XC:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml
! c3 y6 E+ m7 C7 z/ Y3 h8 T! y如上图,在导入 DA_Config.xml 文件后,点击 Regenerate 按键后,将在 Keys 目录下重新生成公钥私钥对 :
8 C! L+ V9 @! y; V3 p3 p. R% @( l/ E/ s
微信图片_20240229165259.png ; u. g' f  x4 C& d3 F
5 H9 p& q! a4 ]0 T
这组密钥对就是接下来需要使用到的密钥对了。; l6 ~1 g; d$ W9 j$ b
其中 :2 f' N5 I( X7 L6 ~& d# Q
Key_1_root.pem 为私钥) j1 d/ ^+ j/ y9 U& u7 p
Key_1_root_pub.pem 为公钥. s8 e9 s* n* u5 O% i1 @

' Z" q! G' Z  d  q6 e: s' y/ a# A3.2. 生成 DA OBK 文件
- o% T8 |2 k0 B接下我们将创建 DA 的 obk 文件 :
: o/ U& U$ D9 u( p4 [$ Y  C( F7 v, R9 a7 a
微信图片_20240229165245.png
3 V9 ], S. t2 o5 x3 ^% P' k
4 g# @; H; V6 q8 h. N6 D/ \5 }
如上图所示,继续在 TPC 工具中,在 Permission Mask 下,激活允许的操作许可,被激活的就是 DA 认证通过后,允许的操作. 然后在 Output File 处选择输出文件。我们使用默认即可。然后点击 Generate OBKey 按键,则在 Binary 目录下生成 DA_Config.obk 文件 :
9 r  W' X6 ~& r2 S
" m+ l% t; K, u( s 微信图片_20240229165240.png
9 G/ g: r  \  g. w" O, c* z+ V/ Y' W3 X5 j% ^; D
这个 obk 文件就是我们后续将来做 DA 预配置(provisioning)的 obk 文件了。
) o7 ~' K# Q* i; N+ I7 a" U8 v9 i7 t# ?0 z% h

8 e6 M& [0 Q% L+ x3.3. 生成证书
# r. i1 L' ]% p接下来我们继续用 TPC 工具生成证书。2 W# x8 x* N* ^$ ?
- P! X# a4 b$ B3 }# p9 d/ |: n
微信图片_20240229165237.png " x6 x( j" b5 _1 W& P. u
( R0 B9 v7 j( @( j
如上图所示,在 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
$ b' o3 t  u, y$ o
! `, _$ `9 J5 b8 C' _# H# n7 ~
; n/ h- S+ ]: c% ^. ~# p* v/ t
而在Root Public Key处则选择之前生成的公钥文件:C:/workspace/STM32Cube_FW_H5 _V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root_pub.pem8 G! P$ D9 r8 @' o

* _) O7 W! z1 g9 T2 c% O% F3 h
然后在 Permission Mask 处选择此证书所允许的操作许可。我们将 Full 回退 to TZ,以及Secure/Non Secure 下的 Level 1~3 的 Debug 权限许可全部打开。- W  E$ V7 }; a/ `! t0 B8 i/ E
) v9 [7 ?) ]; y) {4 x
在 Certificate file 处选择输出文件,我们选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Certificates/cert_root.b64. n* U* a5 G* K
即在 Certificates 目录下生成 cert_root.b64 文件,最后再点击右下角的 Generate Certificate 按键,最终在 Certificates 生成了 cert_root.b64 文件。
* H$ E+ I2 d9 C1 ?) t: I2 B3 [7 n
微信图片_20240229165233.png
% w3 L" ^" d9 O! T- a% \3 A

7 d2 J: W) e7 T7 Z2 X2 n1 X; E如上图所示,在 Certificates 目录下将同时生成两个文件 : cert_root.b64, cert_root.cert。2 p7 V% D5 ?7 v: O2 O" n. K/ z2 ^
其中 cert_root.b64 就是我们需要的证书文件了,它就是根证书。它将在后续步骤中进行 DA 时将会用到。而另一个生成的文件 cert_root.cert,我们并未用到它。
3 Q/ S' d6 k. k
+ q# Z& r# f) ?+ a
6 [7 f/ Q9 L1 q" `, v
3.4. DA 预配置 (provisioning)3 q% r! m4 }  P+ B: E1 a6 z( X
接下来我们将做 DA 预配置,在此之前我们确保使能 Trust Zone 功能,即 TZEN=0xB4。
* c6 U' }# N( y$ V3 v; P- J8 L9 E- |3 j$ w4 @) ]# t
微信图片_20240229165229.png : v% L% B( o' ?$ Y0 a/ e

! E# }8 N: A6 T- `9 O! x如上图所示,使用 STM32CubeProgrammer 连接芯片,并将 TrustZone 打开。
' j7 m, ^! j) G% @# X然后将 Product State 切换到 Provisioning 状态 :) V+ D3 k8 N" f7 |! _
" V) Q( z$ ?3 R* w# K% V: x
微信图片_20240229165226.png
8 O# o* R7 n/ o9 _: D* K
* p, }0 Y# l5 B( V  @* @接下来正式做 DA 预配置…$ @9 Q* ?) y5 X

, n+ u: V! Q6 y 微信图片_20240229165223.png
; ^9 m0 o2 g! ^" s( l0 K- }6 p2 w! v3 h& |  J4 o0 \
如上图所示,在 STM32CubeProgrammer 左边选择盾牌图标,然后在上方选项卡处选择PROV,接着在 OBKey file path 处选择之前生成的 DA_Config.obk 文件 :
; C- _6 h- y6 E1 Y% O5 E
# c2 X" L2 j2 C. X6 M
C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Binary\ DA_Config.obk
/ @: J% S: `) B
" p! g$ p- f# \9 ?8 v" B3 g

( @& e" l# S7 M/ H: x/ |* l最后点击 Start Provisioning 按键…
+ m1 `, B* t3 e( J! y5 j
5 i" _! I; \  ?0 t, \ 微信图片_20240229165219.png
4 _' N; _: A6 W9 M% Z' B8 t5 G6 ?0 c7 H  q. X
成功时,将弹出消息提示成功。此时表示,DA obk 文件已经预配置到芯片内部并且已经成功了。然后断开 STM32CubeProgrammer 的连接…: Q5 t& L( K7 r+ C" }" m

9 [1 l2 n: r" ~ 微信图片_20240229165211.png : l: P6 @& B) a: z, @/ Y
0 T5 s6 Q2 |+ D7 L% N* e! h
如上图所示,点击 Disconnect 按键,确保 STM32CubeProgrammer 已经断开连接。接下来我们将尝试用证书做 DA 回退…
; y; {  {( @9 G- Z) H
# v2 }% q4 H' l) b% J

4 P8 I% G+ a2 I) c& }3.5. DA 回退
. r8 `/ n; P* a/ o) i1 S# N$ E+ V. @1 c4 _2 h) i% d" g8 v  M
微信图片_20240229165207.png : r/ ]2 k  i6 Q4 k- [

- Y$ I* Y# j- o! @如上图所示,在确保 STM32CubeProgrammer 断开连接的情况下,左边还是选择盾牌图标,上方选项卡处选择 DA,然后在界面中点击 Discover 按键…
/ x8 P* _. @' Q. q+ W/ V* f
% r% b: R8 z% g8 b% T
微信图片_20240229165204.png 3 }- v7 L, P. I
: `# B' A' t. L( F. R! t
如上图所示,在接下来的界面中,在 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) O4 }- k  e/ f, ^- l$ T
, U' S- h: z! s1 w, W4 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
( D, r7 o" g7 A* p2 ?6 W
! ]/ E5 D& ^/ X: Q' T在 Certificate File Path 处选择之前生成的证书 cert_root.b64:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b6
+ h$ d  `/ R/ o1 ]
7 {- G8 E' _* A6 ~& ~
然后点击右边的 Continue 按键… 9 }7 P8 ?# a- Z# a- c
3 s3 s* w! q+ n) b: L8 `- |
微信图片_20240229165158.png
6 p3 _# J0 V# @0 y1 w  S" Z3 I: E1 h
如上图所示,在下方新显示出来的界面内容中,在左边选择 Full Regression, 即你想要的操作,然后点击右边的 Execte 按键…( m) f/ P! N" b1 f/ I! h7 G9 S: W
/ }$ h% |4 V- `' y
微信图片_20240229165152.png ' ], s0 K$ y+ J' W7 l4 q3 D0 W

) s$ [" U- U' _, k& L8 `9 ~3 E如上图所示,弹出界面显示 DA 成功。1 \5 ~6 N. D7 M5 B" D

5 w9 N, ~- y% n: }这也就表示,之前生成的私钥文件 key_1_root.pem + 证书文件 cert_root.b64 正是匹配之前生成的 obk 文件 DA_Config.obk 的。
. G% O& B9 C# V
4 X6 [  C+ i# X* b1 t2 x  y; }4 n$ r其中 DA_Config.obk 文件和固件 hex 文件是要给工厂烧录芯片用的。而私钥文件 key_1_root.pem + 证书文件 cert_root.b64 则是需要保留,将来工程师需要它们来做 DA 回退和 DA 调试用的。: a: [. H$ `! l4 S
0 m8 O: n& c7 s7 g- \2 h$ C
这里需要注意地是,如果上述 DA 回退未成功,则表示证书+私钥与之前预配置的 DA obk 不匹配,需要重新执行 3.1~3.5 节。直到 DA 回退成功为止,否则切记不要进入到下一步骤,不然很可能会由于证书不对无法回退导致芯片废掉(除非用户代码可以执行回退)。
9 s% q$ i  p3 k% X, p, j; b
& Z! Z7 `3 W' q- F
- B! l$ v4 N" N
四、运行一个程序并 DA 调试% |% J9 `8 o/ ^  g4 \
4.1. 在 Open 状态下运行一个示例程序

1 P7 b+ V, K2 f! V4 a/ h使用 STM32CubeProgrammer,确保 product state =Open, TZEN=0xB4:! S4 J$ B" B, }! E1 ~8 C4 C* A7 u

6 L: L8 y* G; u. Y  b* v 微信图片_20240229165146.png
$ k) `0 l! _( c+ }0 k( E# A: q, d' l6 d* n7 B* Y; \8 N. `) [
并确保:SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F, SECWM2_PSTRT=0x7F SECWM2_PEND=0x0:# a9 _( y/ `0 Y% `
0 j1 W. p( {' Y- H/ L
微信图片_20240229165142.png 1 y; C& g, F; y& \& j
* d/ b+ t' D4 q  Y7 j2 O
然后使用 STM32CubeIDE 编译 STM32CubeH5 包下的示例工程:STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Examples\GPIO\GPIO_IOToggle_TrustZone\STM32CubeIDE 分别先后编译 S 和 NS 工程并烧录对应程序,并复位运行。正常情况下,可以看到板子上 LD5(橙色), LD6(绿色)两盏灯在来回闪动。即表示测试程序运行 OK。
) C- E$ X7 g3 s* M3 M) Q
8 v2 T; q; f7 Y0 |. J8 T; ]

2 |9 }- C$ M- r- ^7 u* k* Q; e6 L6 r& L+ \4.2. DA 预配置
% h5 C* A8 w) N, f接下来我们参照之前的 3.4 节,将 product state 切换到 provisioning 状态, 然后进行 DA 预配置。
8 h9 {4 |7 T4 ~
6 S, [, J2 Q  A( K 微信图片_20240229165137.png % v' ^& t2 V# H. N- y$ U$ }

6 [( D2 m4 C5 X1 |  t* Q6 }如上图,切换到 provisioning 状态。
; T, t; R  l* x7 Y. Y
% b) V9 L: D) b* N  `0 O+ U. y: f 微信图片_20240229165132.png
+ }/ X8 _7 D) E% t: |" `4 U$ i7 H) I  P- z5 E
如上图所示,导入之前生成的 DA_Config.obk 文件,然后点击 Start Provisioning 按键,进行预配置。/ b" h- P$ G3 O8 h6 Q2 F

: |: A$ |/ l% j4 `2 }/ C& ^) J 微信图片_20240229165128.png ' [1 r1 Y! m5 o/ k5 `1 ?* m' l
# g. N# W( P. W/ W3 ], z# L* F
弹出上面显示模式,则表示预配置已经成功。
+ x1 W, u7 o( A- o6 e) a2 c1 E6 a

& U' k* p6 Y: s- [- B- K# @$ R) _4.3. 修改状态到 Closed 状态
# ~0 m2 i( [2 h9 \; k& i( \. O+ j3 S/ N$ U5 q  c
微信图片_20240229165124.png
9 O/ V( x/ S6 r6 t
8 o8 Z2 l+ y/ b! o+ I0 i; U$ C
如上图所示,接下来将 product state 修改为 Closed 状态。此时 ST-Link 连接会自动断开,表示芯片内部调试口已经自己关闭了。8 p, \* g/ ]3 e, N8 E8 [& `: ?
此时查看板子,LD5、LD6 两灯依旧来回闪烁,说明程序在 Closed 状态下运行正常。只不过此时调试口是连接不上了。
/ s! ]5 I1 ~) l9 C* I
; g( T- M; h3 k9 t& x( ^2 H4.4. DA 调试 % x  f2 D/ q5 n' Y
4.4.1. 使用 STM32CubeIDE 调试 NS 工程
- \% U1 p9 j, _! j
在 STM32H563 处于 Closed 状态下时,SWD 口默认是关闭的,此时是无法调试代码的,若想调试代码,必须得通过 DA 认证重新打开调试端口,好在这一功能已经集成在 STM32CubeIDE 中了。接下来我们将使用 STM32CubeIDE 调试 NS 工程,在 NS 工程的 Debug Configuration 中, 在 Debugger 选项卡下 :
- w5 n7 |1 _% r/ q4 n6 M& T7 I0 f6 m, Z) G
微信图片_20240229165121.png
3 i) q1 T/ K4 T& b4 \+ k+ e# Q' n: E' O1 q+ i  Q
如上图所示,在 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 按键… ) L; B. V, }/ }% |. S: A

! U+ C+ \. n  U% o* x' d- h 微信图片_20240229165116.png . W( U! z5 ]+ f/ f3 k) E

0 d3 y  y2 B7 p0 @( @6 {; b如上所示,程序在运行在 NS 工程的 main 函数开始处则停下来了,接下来你可以选择单步调试...4 x: b$ j4 x' o) f0 Q3 N. V' H
. m7 I) r2 ]6 _+ E+ q- a( b" _
4.4.2. 使用 STM32CubeIDE 调试 S 工程) b6 B5 P& U/ u4 R4 h( T
S 工程的调试配置有些许差异。
0 A* T1 ]  |0 Z2 Q% x& F; x( O- Z, l! e6 I' p
微信图片_20240229163237.png 5 ~; k/ M" r1 L$ {' K7 f. M+ k
) w6 A! V& [9 W' ?& [3 z) X
如上,Reset behaviour Type 为 None,同样在 Debug Authentication 下设置之前生成的私钥和证书,Permission 变为 Debug Secure L1。2 A; m4 \) ]& o. S: L3 ^
* N+ v5 ^/ _; ]1 Q3 \
微信图片_20240229163234.png 4 W! O1 n5 e) F2 R8 I. c( R/ d$ Q

- U; t  V6 c' l2 c( Q* e然后拖下来将 Verify flash download 之前的勾去掉(如上图所示)。
6 R$ a* Q( P# q$ l
2 l  r- M' ^* ?* v* v$ P, n- j 微信图片_20240229163232.png
) Y* v' v- p, i2 P* v2 Z
4 W0 G( Z4 j5 C, C7 j# `* v如上图所示,在 Startup 选项卡下,在 Load Image and Symbols 列表中选择当前工程的 Image,然后点击右边的 Edit…按键,然后在弹出的对话框中将 Download 前的勾去掉。点击 OK、Apply、并 Closed、关闭当前窗口。接下来在 S 工程中的源文件中的 xxx_it.c 源文件中的 systick 中断入口处设置一个断点, 如下图所示:; y/ R1 U6 R6 u( c% g$ A
0 O2 K3 B0 _; a" G/ R2 n, F$ ]6 W' x
微信图片_20240229163228.png , C9 N7 q) O- j, \: T: Z6 q

5 {) ]8 g( K4 m, z 微信图片_20240229163225.png
' h! G5 r# T+ r9 [' r  E0 s/ n1 t2 m6 C  {  a5 A: @  g5 P1 k
微信图片_20240229163222.png 8 c- x5 w5 T$ H9 ]1 O8 A

' q" ?5 b' @, R2 M3 @, y* C8 f$ [. S! M如上图所示,程序运行在断点处停下来了,接下来你可以单步调试 Secure 工程了。这是一种完全没有破坏现场的调试方法,适合当出现问题后,直接去查看出现问题的代码行。当然在调试 Non Secure 工程时,你也可以按此方法来配置。也可以达到不破坏现场的效果。6 O) v3 P8 o# z, Z0 v

1 v; l, M5 b, `# {4.4.3. 在其它 IDE 中进行 DA 调试
: R& [! @0 X& N. x- p; G由于其它 IDE 当前最新版本还并未将 DA 过程集成到 IDE 中,因此,需要利用 STM32CubeProgrammer 进行 DA 认证通过之后,才可以用 IDE 进行调试。
+ M7 J' v2 b: g8 v8 e1 |# p  H! b& ~  f
接下来我们将使用 STM32CubeProgrammer 通过 DA 来重新打开调试口。  L" ~+ ]' w7 L. ]8 F

: r  o# T4 E) U6 D 微信图片_20240229163219.png
  @& n: N( J& }; G# ~0 h9 V, j
; D5 w% M3 B# J) A1 E在断开连接的情况下,在 STM32CubeProgrammer 中,选择 DA 选项卡,然后点击 Discover… 7 E- w& s) k# G" U1 @" v7 P

0 @, k4 J4 m0 D4 Z) N& Q 微信图片_20240229163215.png 8 P8 |3 ]! n% D  n& u3 h. B- k3 P3 i- c
; M3 F: G1 t" @
与 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 按键…
4 c9 R) R- d, Q% o$ R
! A9 j2 U! W7 d% \4 M 微信图片_20240229163212.png
% Y8 P: a3 X5 B/ T. t% ]" u& t8 h& Q7 q+ }0 z) Q( L
如上图所示,在下面新显示的内容中选择 Non-Secure Intrusive Debug(Level 1),然后点击 Execte 按键…
" R' J4 ^4 N" d: h$ a0 y7 G" Z' }- m' h0 ], b; p
微信图片_20240229163209.png
2 q, x' q6 b2 A4 D* q3 T4 C/ E% s6 Z- r
6 D0 X  f  O0 y- r9 ~8 S' t
如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接。
& c' y# N( j5 M* r7 C, x- G* }0 A- ~! X& I3 s# A
接下来就可以选择你所使用的 IDE(如 Keil、IAR)调试 NS 工程了,如下图使用 IAR 调试 :7 @  a" k1 Z" V; L3 `! h1 N
) {' Q/ U( P! W1 e: z! m9 a. }
微信图片_20240229163206.png 6 e9 c- L+ ]4 P$ \
0 J0 t/ r+ b9 D) V. p0 p
如上图所示,选择 Attach to Running Target 可直接 attach 上去查看当前运行的代码行。当然在之前 DA 步骤中,你也可以选择调试 S 工程 …7 a5 ~1 a4 T9 a( l5 P

1 z+ y5 I! _3 @6 B 微信图片_20240229163203.png 1 m0 x# s! E# w& _

2 B7 `' R7 E0 }* x* ~% X5 V如上图所示, 在下面新显示的内容中选择 Secure Intrusive Debug(Level 1), 然后点击 Execte 按键…! q! r" C1 X; q% a1 G( a$ ]

" V5 Q7 W8 j* G  i5 m/ t# l" N1 X 微信图片_20240229163158.png / z( }- v+ h8 c5 u7 n( U) q5 D
' T  U* K, b: s+ c
如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接,接下来就可以选择你所使用的 IDE(如 Keil、 IAR)调试 NS 工程了。0 k& {% {: c: F9 O
# A  B4 [) M' \7 D

% L7 d) e3 m5 Y/ {3 a  V1 s五、还原8 @( z6 A6 a; `6 g6 i
还原的过程参考 3.5 节,步骤完全一致。最终还原成功后,全片 Flash 内容已经擦除。最后,将 TZEN 直接修改为 0xC3。- X7 S1 p2 Z8 a3 e# B+ r1 o& f
+ K& I) |8 S3 b/ u; u) A5 {* V6 i7 S+ X
微信图片_20240229163155.png
+ O# S5 |+ ~0 ?5 X/ x- L, V
1 P  e. y5 w/ p  M3 l9 Q$ v+ b至此,芯片完全恢复成原始状态。另外,DA 回退过后,之前预配置的内容也自动清空了, 因此,后续还需要重新进行预配置 (provisioning)。, v( n# {+ v+ @2 y
8 r' _4 D1 I) U/ e1 o
( g7 M( f* W3 P7 o
转载自: STM32
4 I3 H! g3 O& y6 D6 r5 x如有侵权请联系删除7 b. Z6 w: p# v- V  v
$ B4 I$ A9 D" U3 r
. W! {8 d4 [& q, V* w& q
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 手机版