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

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

[复制链接]
STMCU小助手 发布时间:2024-2-29 16:53
一、前言
1 L7 V" `5 {) m& C& ASTM32H5 是 ST 2023 年新推出的产品系列,与以往 MCU 不同的是, STM32H5 推出新的 product state 功能特性以替代以往的 RDP 功能。
5 b7 @9 ~: @- O% d  M7 w8 R( Q. p3 \! b. t
微信图片_20240229165316.png 5 K: K9 }+ S' M

/ }; |2 Q  X3 r; `如上图所示,product state 有如下状态 :5 T, L2 s9 S  d6 d
9 n6 ]7 G* [: C4 \1 t; T+ C
Open(0xED) : 完全 open 状态,相当于以前的 RDP0。  l4 r- `8 k( N) I6 g' F

4 M8 d( }6 b! c  Y( P0 rProvisioning(0x17) : 此状态是专门用来做预配置的。
$ K9 `5 H( ]5 l) H; X( ^# n4 C2 S1 E/ U/ d- O- E6 g" U
iROT-Provisioned(0x2E) : 用于 STiROT 或 OEMiROT。
# _1 t8 r8 B0 p' S, A3 ]7 W. Q

% U0 h3 j; \' c4 N) k0 B% {: GTZ-Closed(0xC6): Secure 区域关闭, 相当于 RDP0.5(仅在 TZEN=0xB4 时有效)。
# [% }: e+ X- T: i- L6 j, s! d
Closed(0x72): S 和 NS 区域均受到保护,这点有些类似于 RDP1,此时调试口没法对其直接访问,但可通 过 DA 打开调试口或回退,这一点有点类似于 STM32U5 上的可带密码回退的 RDP2。
! K0 z6 x' C* L
1 m* g8 D0 w9 }) D' rLocked(0x5C): 完全关闭芯片的外部访问,相当于以往 STM32 芯片的 RDP2 保护等级。
* ?# Q( t, x0 V1 z6 T7 j' n, z2 S1 b* N" T. X, k3 _/ Y
整体如下图所示:/ u) O" `( ]8 \* G3 r

' N/ c8 l6 J! w% Z& p 微信图片_20240229165313.png
; ^: S; g, M( Z9 M) e; H3 q& y, t

# {  u5 s1 ?7 N( d其状态切换如下图所示 :5 V/ Y+ x3 B: G8 A" u

+ Z3 m1 f$ y& m/ ] 微信图片_20240229165309.png
( N6 B/ P( [" c+ }4 ?6 M% f  ]2 }

& q( y, ?& ^: x% _% x如上图所示,product state 从 open->provisioning->iROT-Provisioned->TZ-Closed->Closed 如此从左到右是可切换的,但是,要从右到左如此回退,则必须要经过 DA[Debug Authentication]过程。如上图所示,经过 DA 后,要么完全回退到 Open 状态,要么部分回退到 TZ-Closed 状态。
! q' ~6 V* O0 P* A/ W) [% @, B% r( |" S1 g9 A
所谓的 DA,就是通过向芯片提供证书(STM32H503 是提供密码),通过芯片的身份认证后,允许向 芯片发起 product state 状态回退,或者重新打开调试口请求(仅当 TZEN=0xB4 时)。* f, |% S. Y0 j' }% Z- J
3 Y: N) p+ f1 \) B0 }, n# M  Z
由于新的 product state 和 DA 的引入,所有 STM32H5 开发者都必须掌握 DA 的用法。因此,本 文档针对 STM32H5 初学者,演示当 TZEN=0xB4 时, 使用证书来完成 DA 过程。* F4 f0 \1 J. D" _
  |6 [3 ?1 _, P) m2 B9 h
二、准备工作
! h+ f1 G9 ^5 e& o$ _( W开发板 : NUCLEO-H563ZI , m. F- \$ U$ a+ a

+ _0 X# I/ d: G! z& Z' d' u$ \
微信图片_20240229165305.jpg , t0 c! e& x$ O, n& ~

$ T) |# u- }) v% H软件包 : STM32Cube_FW_H5_V1.1.05 c: Z3 x. K4 N8 s; d, z
; o- C, o/ X  z" c
工具:: K' j; I0 c5 N& z# c
STM32CubeProgrammer v2.14.0
  o' g# g5 H0 m/ Y4 rTera Term 串口终端显示
  l: F5 }3 X/ }7 p4 ETrust Package Creator(安装 STM32CubeProgrammer 时一并安装, 注意勾选)
0 m$ ~% V) F1 Q& kIDE: STM32CubeIDE v1.13.0
$ y; C! P* N8 T- C% w
STM32CubeH5 包我们需要将其放到一个没有空格没有中文的路径下,在本动手实验中,我们 默认将其放在路径 C:\workspace\目录下。
: M1 {' d4 b' X% E1 ]9 `/ O
9 d- i. x  f1 ^% r7 I三、生成 OBK 并测试
7 j& U2 p# }/ e在 STM32CubeH5 包下的路径 STM32Cube_FW_H5_V1.1.0\Projects\NUCLEOH563ZI\ROT_Provisioning\DA,在此目录下,已经包含了自带的默认 obk,密钥以及证书。其实 我们可以直接使用这些 obk 以及对应的证书和密钥,这里我们将重新生成一套,并测试它是否 OK。, u8 i, [9 o5 N9 x

9 g; v0 P% z0 E# _2 j" W3.1. 重新生成密钥对打开 TPC(TrustedPackageCreator)工具 0 @/ L( p  {6 w
2 m: v3 J  H) }: D3 \. P- K& F
微信图片_20240229165302.png : O9 j! A! }  W# P. V) Q& p
/ O# q  C: j5 i) f6 M. e
在 xml file 处,导入 DA_Config.xml 文件 :
$ a4 i+ U% i7 j6 M/ M) P" @/ K, s4 `C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Config/DA_Config.xml
3 j7 C$ S5 C* a! b- J! g' v如上图,在导入 DA_Config.xml 文件后,点击 Regenerate 按键后,将在 Keys 目录下重新生成公钥私钥对 :
: `( S) M* n3 c9 |* `6 w4 u) s7 L2 j1 v" h
微信图片_20240229165259.png
$ M8 M( Q" [! s+ m
+ y5 _" q: U4 e4 Y
这组密钥对就是接下来需要使用到的密钥对了。
8 _% v( e9 @. C6 n# e/ p9 V) s% X其中 :, ]: z. K, E3 F$ N4 X
Key_1_root.pem 为私钥
" r; r7 Q) B2 FKey_1_root_pub.pem 为公钥& Y5 g+ q! u0 {: `& }* w

4 J1 a' D0 a) O; l" U3.2. 生成 DA OBK 文件' ~7 j9 `4 V) p% T* w3 I  m
接下我们将创建 DA 的 obk 文件 :
6 H  y( F- H+ F4 p0 \; d
/ ]0 V3 F6 U3 J 微信图片_20240229165245.png 6 R! F0 p- S5 F! v! p

  D1 ?1 }5 c# I0 y如上图所示,继续在 TPC 工具中,在 Permission Mask 下,激活允许的操作许可,被激活的就是 DA 认证通过后,允许的操作. 然后在 Output File 处选择输出文件。我们使用默认即可。然后点击 Generate OBKey 按键,则在 Binary 目录下生成 DA_Config.obk 文件 :* y/ A4 O+ }! m$ Y& L: L* w
: y# Q& y3 s: G7 e. X# E( g
微信图片_20240229165240.png
. t9 H, T- O/ e" Y8 G) E' y
+ o2 `3 S. q- v# t% w- a, A2 [这个 obk 文件就是我们后续将来做 DA 预配置(provisioning)的 obk 文件了。0 J( J! J# L. ^6 t5 a" }

7 N) v% U. l7 ]' }7 I4 U, r
8 R$ ^5 N  `% ?" m: `5 R
3.3. 生成证书4 w  Q6 b+ m$ C# l$ H% N9 n+ ?! y
接下来我们继续用 TPC 工具生成证书。
' Q# a  I' o% ?8 u
) E: d) ^) ^, B9 J
微信图片_20240229165237.png 9 u$ K1 D7 p9 `; x

0 Z4 V: ~4 o- n/ a. L1 J- y' |如上图所示,在 Microcontroller 处选择 STM32H5-2M,在 Root Private Key 处我们选择之前生成的私钥文件 : C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root.pem4 H; q& a0 v) G- {* r$ |$ }3 A
# e0 @* t! l; @: [2 F5 u
+ y( ?/ ?5 M8 V! G+ t; h
而在Root Public Key处则选择之前生成的公钥文件:C:/workspace/STM32Cube_FW_H5 _V1.1.0/Projects/NUCLEO-H563ZI/ROT_Provisioning/DA/Keys/key_1_root_pub.pem6 n7 L3 S$ |2 ^7 p( ]& d6 y
& x: r0 G( Q. v* V4 W4 [- z, K
然后在 Permission Mask 处选择此证书所允许的操作许可。我们将 Full 回退 to TZ,以及Secure/Non Secure 下的 Level 1~3 的 Debug 权限许可全部打开。
: R: ~: x- B0 g3 R" h% G% K
: z, I' ~2 J7 p' k
在 Certificate file 处选择输出文件,我们选择C:/workspace/STM32Cube_FW_H5_V1.1.0/Projects/NUCLEOH563ZI/ROT_Provisioning/DA/Certificates/cert_root.b646 V2 t7 r6 W9 A
即在 Certificates 目录下生成 cert_root.b64 文件,最后再点击右下角的 Generate Certificate 按键,最终在 Certificates 生成了 cert_root.b64 文件。# \2 L7 L/ i  u3 [

9 h( ^9 t" L& Y' E' b& \/ u! x 微信图片_20240229165233.png $ y+ p" ?0 o% e' T" u' N! c
& d, q! O8 f1 t6 b) n' d
如上图所示,在 Certificates 目录下将同时生成两个文件 : cert_root.b64, cert_root.cert。2 c: B5 `! r1 _$ v' \& U
其中 cert_root.b64 就是我们需要的证书文件了,它就是根证书。它将在后续步骤中进行 DA 时将会用到。而另一个生成的文件 cert_root.cert,我们并未用到它。, \; [% F9 k" U

# d: ~$ [9 K8 R* I( j

/ d$ j8 q; I0 U; w* x$ t3.4. DA 预配置 (provisioning). y* t" x, F: D3 j/ S4 O
接下来我们将做 DA 预配置,在此之前我们确保使能 Trust Zone 功能,即 TZEN=0xB4。
' P) t! ?1 W$ ?& f9 I
6 ]3 D/ e( u% X5 X- _+ O! i 微信图片_20240229165229.png
& p/ w" K6 h% a8 s  D

7 k- R' N( ^; E1 [# B1 [如上图所示,使用 STM32CubeProgrammer 连接芯片,并将 TrustZone 打开。2 D: t3 l) y3 x, K. r, E6 M- R% h
然后将 Product State 切换到 Provisioning 状态 :
6 b% z) c$ x8 t" Q# k9 ?- {/ U0 e$ }( M: m- F
微信图片_20240229165226.png
$ h$ d! N" P+ d0 [8 k" i, V4 h' ?, I. _2 E8 b; U) l" P
接下来正式做 DA 预配置…; v$ `1 i, J4 `8 u/ X0 m% |8 C

* ?) n2 p2 N/ E 微信图片_20240229165223.png
8 g$ ^  [) y6 p! v  B
" X/ b& @9 W  h如上图所示,在 STM32CubeProgrammer 左边选择盾牌图标,然后在上方选项卡处选择PROV,接着在 OBKey file path 处选择之前生成的 DA_Config.obk 文件 :
* O( N" |4 g, X$ J, e- J
) Q. {  L% ^2 E( Q  S& Z
C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Binary\ DA_Config.obk  O6 ]& b5 X  `/ b! w
' ~0 G9 T% ^! J
1 b' C9 o1 @+ ]6 _' q* N; F
最后点击 Start Provisioning 按键…
7 p# K. a' V: W! B/ p2 o& w/ B# B4 B& U. U+ d2 b
微信图片_20240229165219.png / h; }# v: |. t: O2 R
- \& A) e2 U" A6 }  b
成功时,将弹出消息提示成功。此时表示,DA obk 文件已经预配置到芯片内部并且已经成功了。然后断开 STM32CubeProgrammer 的连接…) T/ ^3 A% b) s# I
( B7 Q2 \5 C: h9 O5 h4 B
微信图片_20240229165211.png 6 C6 e! k6 F' L/ G' l
2 y. I" z1 g. Z' ~; K' o. x
如上图所示,点击 Disconnect 按键,确保 STM32CubeProgrammer 已经断开连接。接下来我们将尝试用证书做 DA 回退… & ?6 @' M6 }, ?( x* ^" D

' m: s* E$ g1 E/ Y  ~, X' O0 j
/ y' l! _/ J0 P# v1 w* `4 p
3.5. DA 回退$ x( G9 W8 Y7 l; T( p% N$ ]
1 N8 J3 {' b4 R
微信图片_20240229165207.png
: U) D4 |* d6 W8 x* t9 c) K
. I. n' ]& z+ n) ~6 e
如上图所示,在确保 STM32CubeProgrammer 断开连接的情况下,左边还是选择盾牌图标,上方选项卡处选择 DA,然后在界面中点击 Discover 按键… . a; }7 @6 {- a  ~$ B

: y7 m# a) K' ~1 v' _
微信图片_20240229165204.png
; N% w% t- |9 S: d# {8 e6 z
2 I2 _2 L  L9 T+ H9 ?
如上图所示,在接下来的界面中,在 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
- C7 o8 r. M- ]2 p# W
/ g4 t! T0 H! B: {# }& N. v- 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
2 _$ I) j, C$ m  {0 x$ E' S8 m5 j# P+ \) ?. n# W
在 Certificate File Path 处选择之前生成的证书 cert_root.b64:C:\workspace\STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\ROT_Provisioning\DA\Certificates\cert_root.b6) I$ [0 c( f7 L& k

" N2 n/ q9 m5 B然后点击右边的 Continue 按键… 3 j/ {7 Y4 P* S# w, U
3 K  g* F$ N2 x( `, x
微信图片_20240229165158.png ( g$ m# q! d: R2 o4 Y9 G% h! g7 {

6 F- c/ J& I% W* E6 s% n# ~" E如上图所示,在下方新显示出来的界面内容中,在左边选择 Full Regression, 即你想要的操作,然后点击右边的 Execte 按键…
+ }# ]# \' x) Z1 ~3 Y( j/ G9 x$ t) f% T" {7 J
微信图片_20240229165152.png + S( X" Q+ _! Z9 l
  O4 s+ K+ [0 n+ v' ~' h- M0 d  A4 V
如上图所示,弹出界面显示 DA 成功。
% ^! S0 H  H( s% n! G  @1 ]$ U
这也就表示,之前生成的私钥文件 key_1_root.pem + 证书文件 cert_root.b64 正是匹配之前生成的 obk 文件 DA_Config.obk 的。! q2 d. o8 G% p
& l# V" k6 Y7 Q, G" K, J) {
其中 DA_Config.obk 文件和固件 hex 文件是要给工厂烧录芯片用的。而私钥文件 key_1_root.pem + 证书文件 cert_root.b64 则是需要保留,将来工程师需要它们来做 DA 回退和 DA 调试用的。
* l3 E( D# W2 ]- @9 G% u. C, a% Y+ ?3 X7 u. y# c, X6 I; F; l- |
这里需要注意地是,如果上述 DA 回退未成功,则表示证书+私钥与之前预配置的 DA obk 不匹配,需要重新执行 3.1~3.5 节。直到 DA 回退成功为止,否则切记不要进入到下一步骤,不然很可能会由于证书不对无法回退导致芯片废掉(除非用户代码可以执行回退)。% ]2 {" k- q6 |, f$ R. u8 F' J

" u! a' D5 g5 |7 T

" _( @4 l& k4 M9 I# y4 v: o四、运行一个程序并 DA 调试8 g1 z( ~; g& }' ^; j
4.1. 在 Open 状态下运行一个示例程序
3 o& ~6 t, |% S. I' Q/ l6 ~
使用 STM32CubeProgrammer,确保 product state =Open, TZEN=0xB4:
! L8 d; Z& B3 s% C5 T5 i4 R+ \9 ~( ?! D  \; S; E1 ~
微信图片_20240229165146.png
  |& I+ f  \/ Y- p2 P. {/ A# V+ i% K) b
& x" D- p# r( g4 S并确保:SECWM1_PSTRT=0x0 SECWM1_PEND=0x7F, SECWM2_PSTRT=0x7F SECWM2_PEND=0x0:
9 {" B- `# R. V8 X3 P
9 ^# K& O  W6 j7 J+ }+ p& w+ C1 Q 微信图片_20240229165142.png
' i( m1 e) {; q4 V1 r/ g2 ?5 @+ F: E* p- Y* r9 V
然后使用 STM32CubeIDE 编译 STM32CubeH5 包下的示例工程:STM32Cube_FW_H5_V1.1.0\Projects\NUCLEO-H563ZI\Examples\GPIO\GPIO_IOToggle_TrustZone\STM32CubeIDE 分别先后编译 S 和 NS 工程并烧录对应程序,并复位运行。正常情况下,可以看到板子上 LD5(橙色), LD6(绿色)两盏灯在来回闪动。即表示测试程序运行 OK。
  R. K- s3 |. G$ m) l& p: Q0 V1 u8 D
8 u. X7 j" h- p
4.2. DA 预配置
2 R/ ~: V$ _) G! @9 F& h, C接下来我们参照之前的 3.4 节,将 product state 切换到 provisioning 状态, 然后进行 DA 预配置。
  g7 |2 `6 q" T; U; ^$ p# y+ G" V7 ?" m
微信图片_20240229165137.png
& A7 ^5 M4 `: p2 D$ o8 ]' X2 H/ _
如上图,切换到 provisioning 状态。
/ H% O. _$ y1 Q6 p& C. Y2 I0 E% R9 u9 P+ T" w: {2 p. m+ Z
微信图片_20240229165132.png - b: ~/ N+ {/ x$ f

$ i" D8 T2 [8 p+ F  ]+ U# V0 m( l如上图所示,导入之前生成的 DA_Config.obk 文件,然后点击 Start Provisioning 按键,进行预配置。. c# i  p' |2 \/ P
  {: u/ b- e8 l  _
微信图片_20240229165128.png
6 ]! |/ T1 c4 \( H# @$ O& S- r( J( L4 d& g5 }& B7 ?
弹出上面显示模式,则表示预配置已经成功。
7 H* H& F# _0 Y) o
& n* s1 X1 g: @8 ?9 f2 R" B! l
- S- ~. h" J# q- M0 M" v6 ]! r
4.3. 修改状态到 Closed 状态 2 x" c7 m8 m9 D% f) A

3 ]: J( t6 t( z. r- t- Q! r  c 微信图片_20240229165124.png $ ?5 [: C/ V& H

- ?- D9 c3 `& {0 A4 D如上图所示,接下来将 product state 修改为 Closed 状态。此时 ST-Link 连接会自动断开,表示芯片内部调试口已经自己关闭了。
1 E! _4 M3 Z9 |# d此时查看板子,LD5、LD6 两灯依旧来回闪烁,说明程序在 Closed 状态下运行正常。只不过此时调试口是连接不上了。' Y8 s$ V0 d  t, y4 U7 R  T
4 M" m# v9 v$ E$ R4 j- g( t/ I
4.4. DA 调试 ! d: K8 N8 a, `# _
4.4.1. 使用 STM32CubeIDE 调试 NS 工程
& Q+ ?" v" S0 S" X/ o" ?$ ~! Q
在 STM32H563 处于 Closed 状态下时,SWD 口默认是关闭的,此时是无法调试代码的,若想调试代码,必须得通过 DA 认证重新打开调试端口,好在这一功能已经集成在 STM32CubeIDE 中了。接下来我们将使用 STM32CubeIDE 调试 NS 工程,在 NS 工程的 Debug Configuration 中, 在 Debugger 选项卡下 : 9 w. q7 C; L' U* ^+ t, F% {

( _  E" f7 b+ j& A; e6 G* E 微信图片_20240229165121.png
- ^) f" |# [% ~0 h
; ~" h9 W, ^! T, g/ \0 ~9 B如上图所示,在 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 按键… : G$ \4 g4 z0 ?7 z! ]2 E) l

/ h' v  p7 k  T0 ]' E 微信图片_20240229165116.png
9 O. E. q1 q8 b/ u0 t- j, C: u& M
0 J  d! Z; \* ~6 n8 m% k3 J$ s如上所示,程序在运行在 NS 工程的 main 函数开始处则停下来了,接下来你可以选择单步调试.... B0 B+ {5 t$ ^( B. E

  D/ }/ E/ i( {
4.4.2. 使用 STM32CubeIDE 调试 S 工程
& y% D  t7 o2 E0 A7 N7 fS 工程的调试配置有些许差异。5 V1 A- O1 f2 f

: Q3 @' U+ p. X" b/ ~3 U8 L/ Z$ p 微信图片_20240229163237.png
( @/ D9 u) z) o8 u1 o+ G1 G6 ^$ s% a9 h, _2 S+ N: p& M
如上,Reset behaviour Type 为 None,同样在 Debug Authentication 下设置之前生成的私钥和证书,Permission 变为 Debug Secure L1。
7 N9 T, E# |% \) a
* z7 ]' j. I0 E$ p6 M$ X 微信图片_20240229163234.png
% }$ c) H* N% I- q# `1 }% G4 ^6 C+ {4 D" J6 V) x" T
然后拖下来将 Verify flash download 之前的勾去掉(如上图所示)。( x! `6 J- n4 M+ D. b
! H# N* D: x( p
微信图片_20240229163232.png
5 o* U  U5 E# m$ u# @5 t+ j. v; C! T! D" s( d
如上图所示,在 Startup 选项卡下,在 Load Image and Symbols 列表中选择当前工程的 Image,然后点击右边的 Edit…按键,然后在弹出的对话框中将 Download 前的勾去掉。点击 OK、Apply、并 Closed、关闭当前窗口。接下来在 S 工程中的源文件中的 xxx_it.c 源文件中的 systick 中断入口处设置一个断点, 如下图所示:
) t! z3 C" I! u( ^) L; b6 R. ~$ g+ a$ M  r
微信图片_20240229163228.png # p% e. ?0 a5 V/ L4 B1 z: r8 i
0 p' M3 x( I2 e
微信图片_20240229163225.png
& B0 t" N9 |' w+ r' B
( X5 [# s- @+ I 微信图片_20240229163222.png 7 w: U0 c6 m( u) A
+ P: e  C* z4 W( A% V3 R
如上图所示,程序运行在断点处停下来了,接下来你可以单步调试 Secure 工程了。这是一种完全没有破坏现场的调试方法,适合当出现问题后,直接去查看出现问题的代码行。当然在调试 Non Secure 工程时,你也可以按此方法来配置。也可以达到不破坏现场的效果。
9 f$ a* ~3 [3 `' F5 F3 d% g' a
4.4.3. 在其它 IDE 中进行 DA 调试* K5 m2 c# ?) g$ @3 R$ S0 ?
由于其它 IDE 当前最新版本还并未将 DA 过程集成到 IDE 中,因此,需要利用 STM32CubeProgrammer 进行 DA 认证通过之后,才可以用 IDE 进行调试。0 ^8 H5 w" h5 r' M  v
' f" v/ s/ X/ y
接下来我们将使用 STM32CubeProgrammer 通过 DA 来重新打开调试口。
2 S/ o7 @9 V- C! i' [
3 n: d0 }0 N2 v) @+ I7 W$ U) _ 微信图片_20240229163219.png
) G: U7 N" Z7 [& @8 x" l( G) l5 L. I8 X2 m2 |- _
在断开连接的情况下,在 STM32CubeProgrammer 中,选择 DA 选项卡,然后点击 Discover… & ]6 E5 e& E. l4 T/ f

$ {: p0 l' H) T- q# d0 V, A 微信图片_20240229163215.png $ w; j: O- A2 N/ L
2 M5 z! U2 Q" A2 R, ]1 ^
与 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 按键… 6 E5 F$ ?* t0 d2 X$ P; s
: e* Z& Q" c. Y& f
微信图片_20240229163212.png
( a! U# U. M% T  I& m" B  F8 b+ S9 A% |
如上图所示,在下面新显示的内容中选择 Non-Secure Intrusive Debug(Level 1),然后点击 Execte 按键… ) a6 z+ M9 T( k! b* w' D+ e. F
6 h& L; G. c7 W0 ?7 i/ f
微信图片_20240229163209.png 0 A, a& l3 Z+ K# w" s; i, g

, h; j3 w9 r1 z( z. f% b4 t如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接。
3 E; F, N5 m. `* e  a" ^: I# X" ^/ C
' x4 k$ t9 W% D
接下来就可以选择你所使用的 IDE(如 Keil、IAR)调试 NS 工程了,如下图使用 IAR 调试 :
5 K& v, M7 L: ?4 O0 C; _8 Q1 y# _8 ~5 i: w8 U5 Q8 X
微信图片_20240229163206.png - b* w% T* F8 P( J0 x5 B

* |# Z$ ?# P% v, ?5 i4 g如上图所示,选择 Attach to Running Target 可直接 attach 上去查看当前运行的代码行。当然在之前 DA 步骤中,你也可以选择调试 S 工程 …( y1 J1 X- h: T% R1 H4 B
8 s3 o( r4 p( b+ a
微信图片_20240229163203.png
7 l. h/ J7 D8 I
: B5 j. }4 D. O4 J+ l5 L如上图所示, 在下面新显示的内容中选择 Secure Intrusive Debug(Level 1), 然后点击 Execte 按键…
0 y( @8 }6 g) k$ g$ T2 W
6 R% m9 ?1 T. [  l# P" \ 微信图片_20240229163158.png   b# o/ P6 E. V9 k5 }
( h+ o5 B' U3 g' ~, N- d; X( O! n
如上图所示,表示 DA 已经成功,调试口已经重新打开。然后断开 STM32CubeProgrammer 的连接,接下来就可以选择你所使用的 IDE(如 Keil、 IAR)调试 NS 工程了。
9 H) w% r% |  C4 {3 m+ o' C, l1 ~' V9 M! V' U# n5 {$ e
' N* G0 r7 t6 ?7 k. E9 U
五、还原
" I! {$ I9 c  ?还原的过程参考 3.5 节,步骤完全一致。最终还原成功后,全片 Flash 内容已经擦除。最后,将 TZEN 直接修改为 0xC3。
4 D! ^5 N2 s' X2 f8 S) ^4 j' E3 l" e/ k3 Z9 ]1 K. f6 G4 p
微信图片_20240229163155.png % V. q+ ]  U0 S/ X) n1 h5 ^7 ^. x
0 [: w2 ~# o( x! T& L- T
至此,芯片完全恢复成原始状态。另外,DA 回退过后,之前预配置的内容也自动清空了, 因此,后续还需要重新进行预配置 (provisioning)。
( D+ N, |/ e. d$ h( A; r* o$ s8 o' \8 [8 `2 ]+ `- f% i
! P% n: h) U, @& S7 u8 |% q! i8 G
转载自: STM32% X$ o( a' f1 G3 N) P) {
如有侵权请联系删除
$ K4 t) E5 W% Q. ]3 ?3 i) ~7 i. |0 U: p' l

7 T+ ?. y/ ]5 V: P1 }
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 手机版