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

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

[复制链接]
STMCU小助手 发布时间:2022-8-23 16:16
简述, A, e/ D* v9 h. _0 G/ q9 [
STM32CubeProgrammer(STM32CUBEPROG)为任意环境下的STM32微控制器编程提供了+ x; j0 w$ J+ Q
一个一体化的软件工具:多操作系统,图形用户界面或命令行界面,支持多种连接选择(JTAG、SWD、USB、UART),采用手动操作或通过脚本自动操作。
& U: q  ~6 Y1 I* G/ ^$ [( ^: u- ~5 p
很多情况下,我们为了程序安全,都会在烧录时,使能读保护功能,这样别人就无法通过SWD/JTAG接口访问程序了。之前的STM32 ST-LINK Utility 或者 Jlink 的Segger 软件都能很方便的找到解除读保护的办法,但是新一代的烧录程序STM32CubeProgrammer就很隐蔽了,本文就是介绍了如何通过STM32CubeProgrammer进行加密和解密。3 ^4 G" ^$ m7 F2 ^2 R* n

1 t+ s3 e! n% q7 E5 a但是请注意,取消读保护后,将对Flash和备份SRAM执行全部擦除,也就无法读出之前的程序。
  F4 h% f$ c9 s# G! }4 o+ T! r& l: h7 s; E, D5 @& G7 L6 K
开启读保护) i) f' r# s. G( O: c
为了方便测试,这里还是要先说明如何使用STM32CubeProgrammer开启读保护。- j  X! h/ ?3 C3 ~# P
5 a% R$ p% V9 n  y
在进行读保护设置之前,先了解一下读保护的等级,STM32的读保护有三个等级,详情参考STM32F4xx的中文参考手册。% Q% |9 K# E: u3 v1 r

/ b) e5 Z3 r; B- y4 x可对 Flash 中的用户区域实施读保护,以防不受信任的代码读取其中的数据。读保护分三个 级别,具体定义如下:
+ I) u9 r6 o2 f! Q5 s7 H  o4 S. Q! }. ~! [
  1. ● 级别 0:无读保护0 Q2 [2 o& E4 U; R5 `
  2. 将 0xAA 写入读保护选项字节 (RDP) 时,读保护级别即设为 0。此时,在所有自举配置
    + U" P* I4 z" F' u, N: Q8 r" D
  3. (用户 Flash 自举、调试或从 RAM 自举)中,均可执行对 Flash 或备份 SRAM 的读/7 j6 q$ T% o  A5 e9 C) u5 ]5 I- c% i
  4. 写操作(如果未设置写保护)。/ k  f3 O2 C: Z( b* e8 O% @0 u9 r

  5. 2 X' L9 t4 ~: W; S+ ^
  6. ● 级别 1:使能读保护
    - h, B" q* l( I5 G& d
  7. 这是擦除选项字节后的默认读保护级别。将任意值(分别用于设置级别 0 和级别 2 的$ }3 i. k1 h1 Z
  8. 0xAA 和 0xCC 除外)写入 RDP 选项字节时,即激活读保护级别 1。设置读保护级别
    ' [6 B3 G- W3 H! I/ Y7 P
  9. 1 后:
    % b9 `) X1 S) b( c/ R2 ~* z  k
  10. — 在连接调试功能或从 RAM 或系统存储器自举时,不能对 Flash 或备份 SRAM 进行+ N: W: q7 j8 C0 F6 P7 n
  11. 访问(读取、擦除、编程)。读请求将导致总线错误。1 D( `& g1 G/ E1 h
  12. — 从 Flash 自举时,允许通过用户代码对 Flash 和备份 SRAM 进行访问(读取、擦
      F1 o/ T. B  e0 a1 Y7 @0 V
  13. 除、编程)。
    # s" W3 B! q" v" k

  14. 0 Y$ m! c" _+ P+ H
  15. 激活级别 1 后,如果将保护选项字节 (RDP) 编程为级别 0,则将对 Flash 和备份 SRAM
    0 ^! J+ r6 K9 r  [6 d
  16. 执行全部擦除。因此,在取消读保护之前,用户代码区域会清零。批量擦除操作仅擦除
    7 G8 _  ~, A/ Z# d
  17. 用户代码区域。包括写保护在内的其它选项字节将不受影响。OTP 区域不受批量擦除操" A( l2 V) v+ ]4 g$ Z7 [4 e
  18. 作的影响,同样保持不变。只有在已激活级别 1 并请求级别 0 时,才会执行批量擦除。, V8 ]( ?7 c8 R5 ^" P7 s; G' K! F
  19. 当提高保护级别 (0->1、1->2、0->2) 时,不会执行批量擦除。
    2 W+ f. l7 N* B0 ?6 A

  20. . G$ T* t) m; k; N3 ?" i) j- o
  21. ● 级别 2:禁止调试/芯片读保护1 L; ?  J( h- m
  22. 将 0xCC 写入 RDP 选项字节时,可激活读保护级别 2。设置读保护级别 2 后:) \& B9 e0 }3 c; h
  23. — 级别 1 提供的所有保护均有效。5 U! F: N* l5 u9 R
  24. — 不再允许从 RAM 或系统存储器自举。
    $ `; l* W0 R; e6 ~
  25. — JTAG、SWV(单线查看器)、ETM 和边界扫描处于禁止状态。
    . R+ ]2 y% K/ |/ j
  26. — 用户选项字节不能再进行更改。7 D/ U0 y! N! q' r$ e
  27. — 从 Flash 自举时,允许通过用户代码对 Flash 和备份 SRAM 进行访问(读取、擦" k0 \3 W0 I3 H$ w, m2 L. V
  28. 除、编程)。
    " C2 H2 x" ]" v3 }) j/ ~
  29. 存储器读保护级别 2 是不可更改的。激活级别 2 后,保护级别不能再降回级别 0 或级别 1。
    6 L" `; @. p# k# u/ z1 ~& K
  30. 注意:激活级别 2 后,将永久性禁止 JTAG 端口(相当于 JTAG 熔断)。这样,将无法执行边$ w8 `" X3 x# M( R8 t
  31. 界扫描。意法半导体无法对设为保护级别 2 的器件做失效分析。
复制代码

) h/ Q3 A- N" f; R级别2特别狠,无法降级,以后只能在用户代码中使用外设(Uart、USB、ETH等)获取数据进行在线升级,所以STM32CubeProgrammer 或者 Segger加密都只使用到级别1,这样用户才能取消读保护。
) K; a* @/ i7 @# h2 w) Q
/ K; H2 T. F- L3 G2 U正常情况下,在STM32CubeProgramer通过ST-LINK连接设备后,读取到空片的数据全为0xFF,我们随便下载一个LED的测试程序,下载进去。  }% n/ B8 ~5 i( [7 C+ E

2 @* C+ w3 p4 f" z: p# f 20210430234352757.png . [: M5 }$ e8 ?! ]7 s* [7 \4 y
( \3 @! j+ t; u% Y( _! E  R9 s! M6 L
2021043023440294.png
8 ~5 m  P2 L; o/ l: j# S/ o* @
8 `  P# o# ]6 ]8 n, S此时断电重启设备,或者在MCU Core选项卡中选择复位再运行,就能看到程序在运行了。
2 X& U9 }" `. v4 h
! G, _3 ~, @8 @$ b; r 20210430234415110.png
1 ~- _; J1 t5 ~) h4 O3 e9 @5 `% A/ |6 L
这时候我们点击 Memory & File edition,点击Read,可以正常读出程序。. V9 e; R6 I& e7 q# ]8 R- t6 c: L
$ ]' a$ W9 d$ L( k( d4 {
20210430234430640.png
4 [8 V7 L5 P' y5 E  ~2 f2 B0 M- z: }( w: s5 E5 t# L
接下来要进行读保护的操作。切换到 Option bytes 选项卡中,可以看到Read Out Protection 中RDP是没有勾选状态的,这表示flash memory不处于读保护的状态,然后我们要勾选它,并点击下方的Apply,然后软件就会提示选项字已经写入,我们就已经使能读保护了。6 s& u2 @/ H" T

6 {3 D; F7 j$ d- ~- ^1 L 20210430234444332.png
2 p, m: m7 t. G4 L8 w# G/ P" Q+ L9 W  C7 G. T4 Z& n% u1 `- \
这时候切换回Memory &File edition 选项卡,进行读操作,就会被提示读取数据失败,说明我们的读保护已经生效了。. R/ S$ f+ L$ Z8 q. q9 J

( j) T( F% X+ X' C: d 20210430234451838.png
" l$ c, {% g& O/ K" q2 P; K9 N4 j- Q$ b
取消读保护4 j6 ]+ z2 x( O1 h  ~6 u6 K' E
在进行读保护前,我们需要了解一下连接选项卡中的Mode的各个选项的含义。在文件UM2237中有说明,此处进行摘录。
8 p* `! p, v! u& x& S
1 F0 K( j0 O/ H- n# {1 s4 X- H
  1. 模式:( l" K! u/ d' ^1 D. y, u
  2. – 正常:使用“Normal”连接模式时,目标是休眠的,随后挂起。使用“ResetMode”
    8 D2 o' b" r9 _& N4 l5 j" {: n+ R
  3. 选项来选择复位的方式
    3 ~; P, L/ K( H, \9 S
  4. – 复位下连接:“Connect Under Reset”模式允许在执行指令之前使用复位向量捕获  ]4 n& J3 b/ H% C3 ?( Z0 ~7 a
  5. 连接到目标。这在很多情况下是很有用的,例如当目标包含了禁用JTAG/SWD引脚
    / C% k4 c9 z+ M8 n4 I
  6. 的代码时。
    0 e2 U3 C& P: g5 D" M
  7. – 热插拔:“Hot Plug”模式下可以在不停机或复位的情况下连接到目标。这对于在
    ' M% I% B% Q: G" Z- e
  8. 应用运行时更新RAM地址或IP寄存器非常有用。
    ) ]" k0 p  S2 ?4 w& t
  9. 6 o) x7 y# x+ E& e
  10. 复位模式:, O/ p* p- o6 ?2 u  S& h' K5 J
  11. – 软件系统复位:通过Cortex-M应用中断和复位控制寄存器(AIRCR)来复位除调
    3 A9 ]$ f9 l' Y- A! s; d
  12. 试以外的所有STM32组件。) ~3 I, J; p2 n3 j
  13. – 硬件复位:通过nRST引脚来复位STM32器件。JTAG连接器(引脚15)的RESET6 k; K0 V& o1 m, r5 ]+ o
  14. 引脚应连接到器件复位引脚。# A2 R$ x: A+ F1 ], a! B) ]# V
  15. – 内核复位: 通过应用中断和复位控制寄存器(AIRCR)仅将内核Cortex-M复位。
复制代码

: |% L0 r) z/ S0 c我们使能读保护后,也就无法通过JTAG/SWD接口访问内部flash,这对应的就是第二种情况了,所以mode我们就要选择“Connect Under Reset”,而复位模式根据情况进行选择,我使用的是SWD接口,所以选择的是"Software reset"。6 H( g+ t6 o) Y. p& s

3 O. V/ U8 p  h! @5 g  }& F 2021043023450091.png + Y9 c" R* `9 V/ d$ m; {

2 C$ e- y% g# x5 p" ?, C这时候切换到Option bytes选项卡中,取消勾选 Read Out Protection 中的RDP寄存器,然后点击Apply。然后软件提示
, d3 L% o5 U; B4 y8 N+ e: a& F3 G- z. N
"Option Bytes successfully programmed"说明我们成功取消了读保护。6 M, \3 H% V" {! p7 F, g8 f, O

+ u- M! E& R$ C) Q0 V 20210430234509763.png
& j0 n8 V4 W: V
* J+ i1 v5 c6 R: k然后我们就能正常的擦除烧写程序了。) W. W& X* A1 j1 J5 v

! j+ ?$ y# m8 Z  v5 l 20210430234516468.png
. o, D7 [0 r' N# I————————————————7 A, O- W9 q2 y4 _8 \! |
转载:fafuwxm
5 q1 G5 {3 u6 ^4 M) c- {" r) o* x4 ~/ @4 k. P

) Z9 T6 l2 f2 ?- _% O! P# [. N/ M
收藏 评论0 发布时间:2022-8-23 16:16

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版