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

STM32小技巧(2) STM32CubeProgrammer解除读保护的方法

[复制链接]
STMCU小助手 发布时间:2022-8-23 16:16
简述
: O& }& W; @0 E; K  r# j- zSTM32CubeProgrammer(STM32CUBEPROG)为任意环境下的STM32微控制器编程提供了
8 w4 i. h% I/ e一个一体化的软件工具:多操作系统,图形用户界面或命令行界面,支持多种连接选择(JTAG、SWD、USB、UART),采用手动操作或通过脚本自动操作。( T. K  c9 C! K+ I+ V. z

/ N" g9 o7 a4 \很多情况下,我们为了程序安全,都会在烧录时,使能读保护功能,这样别人就无法通过SWD/JTAG接口访问程序了。之前的STM32 ST-LINK Utility 或者 Jlink 的Segger 软件都能很方便的找到解除读保护的办法,但是新一代的烧录程序STM32CubeProgrammer就很隐蔽了,本文就是介绍了如何通过STM32CubeProgrammer进行加密和解密。6 J! F! z7 n. S

$ r- l' R3 h7 @7 S) _' u/ U, v但是请注意,取消读保护后,将对Flash和备份SRAM执行全部擦除,也就无法读出之前的程序。. R; j+ W$ D6 `

1 `, j- J- l' E: }8 G开启读保护
' h( M: P  i8 I* ^# B为了方便测试,这里还是要先说明如何使用STM32CubeProgrammer开启读保护。
+ `/ ^0 A8 m1 A5 q, s3 D$ R- o! L3 |5 z* w" a  c! p- X
在进行读保护设置之前,先了解一下读保护的等级,STM32的读保护有三个等级,详情参考STM32F4xx的中文参考手册。
' B0 f, ?' o! G* J1 e3 i& ]/ _; F7 C' o$ t( v
可对 Flash 中的用户区域实施读保护,以防不受信任的代码读取其中的数据。读保护分三个 级别,具体定义如下:, ?) q" |- Z- c# K  d5 w

# F  U; [' |% v
  1. ● 级别 0:无读保护
    3 b3 b3 o5 m  N6 b+ G& E& g
  2. 将 0xAA 写入读保护选项字节 (RDP) 时,读保护级别即设为 0。此时,在所有自举配置* ~) W7 w$ S, I) i
  3. (用户 Flash 自举、调试或从 RAM 自举)中,均可执行对 Flash 或备份 SRAM 的读/
    # E6 n! W3 v& h  G" j' K
  4. 写操作(如果未设置写保护)。2 ~* }/ \; |2 x- R* D5 i1 _9 _5 w& v

  5. / B5 K0 `9 g# c% m3 P" E
  6. ● 级别 1:使能读保护! b6 d5 K9 C' w" Z
  7. 这是擦除选项字节后的默认读保护级别。将任意值(分别用于设置级别 0 和级别 2 的
    : O, W( K& v- ?5 @$ m! {1 S. C
  8. 0xAA 和 0xCC 除外)写入 RDP 选项字节时,即激活读保护级别 1。设置读保护级别
    $ W5 G) J, c! N- s2 e8 ]7 j
  9. 1 后:$ ?$ ^% p0 ?% O) x7 K5 [4 h. p
  10. — 在连接调试功能或从 RAM 或系统存储器自举时,不能对 Flash 或备份 SRAM 进行  M4 g  j, N2 i7 q
  11. 访问(读取、擦除、编程)。读请求将导致总线错误。
    ' m' b: |, ]# W& y& ~  }- ?$ |
  12. — 从 Flash 自举时,允许通过用户代码对 Flash 和备份 SRAM 进行访问(读取、擦
    & B# \& g5 C: J# O8 D
  13. 除、编程)。
    ; ]3 r: W+ C! O! r% ]
  14. ) \' O, _# ?# v/ i/ Z5 P9 [+ L
  15. 激活级别 1 后,如果将保护选项字节 (RDP) 编程为级别 0,则将对 Flash 和备份 SRAM
    * n, C! h4 v5 k+ }5 S) i% Q0 O
  16. 执行全部擦除。因此,在取消读保护之前,用户代码区域会清零。批量擦除操作仅擦除2 {( [; T* v0 x: ~6 h
  17. 用户代码区域。包括写保护在内的其它选项字节将不受影响。OTP 区域不受批量擦除操
    6 a, G3 I9 n# M; \/ {' |7 M
  18. 作的影响,同样保持不变。只有在已激活级别 1 并请求级别 0 时,才会执行批量擦除。; C! T  V7 s  e; L
  19. 当提高保护级别 (0->1、1->2、0->2) 时,不会执行批量擦除。6 ~- m5 \/ S) f5 e
  20. - @8 {- H* i4 P% V: y9 P7 o. R
  21. ● 级别 2:禁止调试/芯片读保护. `% N2 c( ^0 b6 _, s3 K
  22. 将 0xCC 写入 RDP 选项字节时,可激活读保护级别 2。设置读保护级别 2 后:
    0 F1 r- {2 c! I5 ?5 T' J2 N
  23. — 级别 1 提供的所有保护均有效。
    0 @2 o1 ~& R+ }# b% z4 M
  24. — 不再允许从 RAM 或系统存储器自举。9 L& }* ~$ w. ]* H. [. [
  25. — JTAG、SWV(单线查看器)、ETM 和边界扫描处于禁止状态。
    . |( P! h: y, B- R# V6 ?
  26. — 用户选项字节不能再进行更改。3 ~" a6 R' Y0 F! W# Z
  27. — 从 Flash 自举时,允许通过用户代码对 Flash 和备份 SRAM 进行访问(读取、擦0 \5 k  k" s- J, y
  28. 除、编程)。, _% U) Y" w2 I# C- A
  29. 存储器读保护级别 2 是不可更改的。激活级别 2 后,保护级别不能再降回级别 0 或级别 1。0 Q" G, a; a2 t% |; L
  30. 注意:激活级别 2 后,将永久性禁止 JTAG 端口(相当于 JTAG 熔断)。这样,将无法执行边* L. y; j( b' T: O4 u: c" Y
  31. 界扫描。意法半导体无法对设为保护级别 2 的器件做失效分析。
复制代码

2 J  [8 y" u2 i+ o: l级别2特别狠,无法降级,以后只能在用户代码中使用外设(Uart、USB、ETH等)获取数据进行在线升级,所以STM32CubeProgrammer 或者 Segger加密都只使用到级别1,这样用户才能取消读保护。/ I9 `5 X/ i/ }5 G4 R, q7 I8 I6 _
; `8 d1 G2 s1 v' `, l4 a8 n- W9 O
正常情况下,在STM32CubeProgramer通过ST-LINK连接设备后,读取到空片的数据全为0xFF,我们随便下载一个LED的测试程序,下载进去。
; ?& z; a: k. R' K
1 h& f: n3 S5 k- N: t1 y. Y) q 20210430234352757.png , o7 b% p9 Y, m, O
6 ?1 i( S6 g$ B. C6 f/ g+ \& \- i; N
2021043023440294.png
2 \& K3 Z5 D$ o0 u+ f0 P
- M' S5 t& N1 w) V& F) L  T此时断电重启设备,或者在MCU Core选项卡中选择复位再运行,就能看到程序在运行了。
  ]3 k- G- w/ b" Y6 V+ h! k& W# D  x/ b/ V0 u0 Q
20210430234415110.png 9 e8 |. J$ G, @1 n- s- n7 l4 p

1 r& x5 s6 |* m2 F0 K4 |这时候我们点击 Memory & File edition,点击Read,可以正常读出程序。
# {' S6 _# Z- q3 w0 p4 {, [; ]* U- }9 Y6 D1 s# _7 j6 Z
20210430234430640.png
7 d5 k# f: s# y6 [* y! m# e' G  q+ e3 @4 e2 a
接下来要进行读保护的操作。切换到 Option bytes 选项卡中,可以看到Read Out Protection 中RDP是没有勾选状态的,这表示flash memory不处于读保护的状态,然后我们要勾选它,并点击下方的Apply,然后软件就会提示选项字已经写入,我们就已经使能读保护了。
4 I( q- v  ~1 ?1 ]% r" t- K' f3 X+ }
20210430234444332.png
% P5 C% |0 B/ }; F, D4 m# Q4 G- p( I/ P, F: p: v2 d
这时候切换回Memory &File edition 选项卡,进行读操作,就会被提示读取数据失败,说明我们的读保护已经生效了。
) L$ r7 S$ z( e; l; @8 P4 @+ z, @' g! J/ k# H( c
20210430234451838.png
8 K7 l3 K# e$ m8 z1 u$ E: c4 ^0 S3 i6 q
取消读保护* G1 o+ o  R% d2 g
在进行读保护前,我们需要了解一下连接选项卡中的Mode的各个选项的含义。在文件UM2237中有说明,此处进行摘录。
# U0 U" y4 h- }, z5 j# C! `5 U3 @* v: }9 H; E& H, K
  1. 模式:
    4 S2 d- Y( u; p% y3 H
  2. – 正常:使用“Normal”连接模式时,目标是休眠的,随后挂起。使用“ResetMode”6 J) M3 i$ m) k0 {
  3. 选项来选择复位的方式. ?$ T! d1 r: I6 Y
  4. – 复位下连接:“Connect Under Reset”模式允许在执行指令之前使用复位向量捕获) |& z# Z( ~" b, K
  5. 连接到目标。这在很多情况下是很有用的,例如当目标包含了禁用JTAG/SWD引脚
    : L- c0 x: z. O7 Y9 H' M6 D
  6. 的代码时。  W( Q7 {3 w, v% M, u6 S/ e* d
  7. – 热插拔:“Hot Plug”模式下可以在不停机或复位的情况下连接到目标。这对于在
    : i" h! s7 G! ]6 \! ]8 U" a) J, p0 N
  8. 应用运行时更新RAM地址或IP寄存器非常有用。* d) O% U* J# F. X

  9. 0 @" M! }' \4 p
  10. 复位模式:  ^8 V& C; L( I/ n( _
  11. – 软件系统复位:通过Cortex-M应用中断和复位控制寄存器(AIRCR)来复位除调% O/ f% w0 n' R1 |
  12. 试以外的所有STM32组件。; z% p7 i3 t: k; }
  13. – 硬件复位:通过nRST引脚来复位STM32器件。JTAG连接器(引脚15)的RESET7 s8 E* `! D( U# i
  14. 引脚应连接到器件复位引脚。' n5 L9 f% n9 @
  15. – 内核复位: 通过应用中断和复位控制寄存器(AIRCR)仅将内核Cortex-M复位。
复制代码
# ^! }8 t% C% B9 V* g0 r: C
我们使能读保护后,也就无法通过JTAG/SWD接口访问内部flash,这对应的就是第二种情况了,所以mode我们就要选择“Connect Under Reset”,而复位模式根据情况进行选择,我使用的是SWD接口,所以选择的是"Software reset"。
! C" K) u) ]- s. _0 \) f$ N8 J! }$ J2 W/ F, u- F0 {/ q# x+ D
2021043023450091.png
5 L+ \' X4 ^2 X: x! J% w0 \! r/ V4 \7 Z1 D5 Q+ B
这时候切换到Option bytes选项卡中,取消勾选 Read Out Protection 中的RDP寄存器,然后点击Apply。然后软件提示' G  \2 A4 N; r( d- P

* j% o/ j/ k, x8 k# k"Option Bytes successfully programmed"说明我们成功取消了读保护。5 H# d1 b0 \4 ?! b" P) S
1 F3 {4 _# q4 C* V! a1 W& \
20210430234509763.png / M1 y! ^* |5 b6 w( i

  B& z0 \5 I8 s然后我们就能正常的擦除烧写程序了。
. s7 z2 p: X0 Y+ M! x
! a1 H- R, I% G 20210430234516468.png 5 Q0 v5 w5 n) u9 c1 O
————————————————
5 s* m6 n% \# Y: U$ Z7 |$ K转载:fafuwxm' z0 @2 O6 ~! L  B% u/ Z3 f) f0 E) R
4 o$ ]6 [+ R8 d6 K2 q7 g* y! j

6 v/ |- r& B$ g3 U6 f" N
# R# w& v& ^) r& o
赞 收藏 评论0 发布时间:2022-8-23 16:16

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版