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

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

[复制链接]
STMCU小助手 发布时间:2022-8-23 16:16
简述4 b" F7 c  z2 M  y
STM32CubeProgrammer(STM32CUBEPROG)为任意环境下的STM32微控制器编程提供了
5 V* ?, U3 ?" I  Y一个一体化的软件工具:多操作系统,图形用户界面或命令行界面,支持多种连接选择(JTAG、SWD、USB、UART),采用手动操作或通过脚本自动操作。
$ ]- W  E2 p) Q  q3 D. \2 }. C* s, z
很多情况下,我们为了程序安全,都会在烧录时,使能读保护功能,这样别人就无法通过SWD/JTAG接口访问程序了。之前的STM32 ST-LINK Utility 或者 Jlink 的Segger 软件都能很方便的找到解除读保护的办法,但是新一代的烧录程序STM32CubeProgrammer就很隐蔽了,本文就是介绍了如何通过STM32CubeProgrammer进行加密和解密。
: H2 u$ ~0 U1 \; o4 A! Q7 W0 o! Q4 P5 P" d. U8 @  r; S- S* O
但是请注意,取消读保护后,将对Flash和备份SRAM执行全部擦除,也就无法读出之前的程序。
  E2 @5 a% U& G! S; t# W; }; B
, V3 _, e9 e* x$ H: E3 ~, x开启读保护8 h) @+ W9 H  L. j! R  |$ O
为了方便测试,这里还是要先说明如何使用STM32CubeProgrammer开启读保护。: w' N0 K. e( k, s; V8 d

7 j+ ^( l2 ~. j% U0 ?在进行读保护设置之前,先了解一下读保护的等级,STM32的读保护有三个等级,详情参考STM32F4xx的中文参考手册。: d) ^6 }* P: w! N  [" ~" ^+ A

. ]4 H% ?! ?; F" B$ g+ S% X可对 Flash 中的用户区域实施读保护,以防不受信任的代码读取其中的数据。读保护分三个 级别,具体定义如下:
4 h8 u( d. D) B5 ^. @3 }0 G2 J9 G6 ]- c( ~$ @5 x# E
  1. ● 级别 0:无读保护7 P+ T+ {- N5 K
  2. 将 0xAA 写入读保护选项字节 (RDP) 时,读保护级别即设为 0。此时,在所有自举配置1 N' o5 R' m0 r2 V& S
  3. (用户 Flash 自举、调试或从 RAM 自举)中,均可执行对 Flash 或备份 SRAM 的读/* B" d$ X* K) d) G0 C/ v( T
  4. 写操作(如果未设置写保护)。# Q2 |  ^1 b+ B6 ?: z

  5. & _% i/ S, ^1 Y: M0 S
  6. ● 级别 1:使能读保护& E( E* h& J# ]
  7. 这是擦除选项字节后的默认读保护级别。将任意值(分别用于设置级别 0 和级别 2 的
    5 D/ [/ a' R' B
  8. 0xAA 和 0xCC 除外)写入 RDP 选项字节时,即激活读保护级别 1。设置读保护级别
    ( w! G7 X* ~* Z& q& z
  9. 1 后:
    # z, }% |* Y9 t
  10. — 在连接调试功能或从 RAM 或系统存储器自举时,不能对 Flash 或备份 SRAM 进行$ H0 S5 \, p* T9 S1 }
  11. 访问(读取、擦除、编程)。读请求将导致总线错误。) V; r3 y8 `( r# Q0 E" E( k% I6 W" P
  12. — 从 Flash 自举时,允许通过用户代码对 Flash 和备份 SRAM 进行访问(读取、擦
    # q2 K* ^5 I3 c" T& |6 P2 k
  13. 除、编程)。
    2 y- B! J& j0 j( I% P* B( Q

  14. ) a2 x" B  Y, V; o1 y: r
  15. 激活级别 1 后,如果将保护选项字节 (RDP) 编程为级别 0,则将对 Flash 和备份 SRAM) h, {& A. W: C" M! I2 [( x
  16. 执行全部擦除。因此,在取消读保护之前,用户代码区域会清零。批量擦除操作仅擦除, m; t  J; c7 X8 Z4 H
  17. 用户代码区域。包括写保护在内的其它选项字节将不受影响。OTP 区域不受批量擦除操
    # @! N6 @  m* C0 U$ @- a5 H
  18. 作的影响,同样保持不变。只有在已激活级别 1 并请求级别 0 时,才会执行批量擦除。3 g- Z2 n5 n9 f- B3 ~- {
  19. 当提高保护级别 (0->1、1->2、0->2) 时,不会执行批量擦除。0 w; Q) Z8 K) u0 I4 r, s6 C' {
  20. * S8 K5 Y. U+ {: B! R
  21. ● 级别 2:禁止调试/芯片读保护& H$ H) }" n2 ^& S% {8 `
  22. 将 0xCC 写入 RDP 选项字节时,可激活读保护级别 2。设置读保护级别 2 后:7 d: \( d1 D; k7 I0 Z
  23. — 级别 1 提供的所有保护均有效。
    ' o# w" t, s  Q3 R3 ?  {8 O
  24. — 不再允许从 RAM 或系统存储器自举。
    * ^- _! c) T, l" d2 K
  25. — JTAG、SWV(单线查看器)、ETM 和边界扫描处于禁止状态。+ l  h/ \9 K& c+ G0 H
  26. — 用户选项字节不能再进行更改。
    ; ^6 v% Z! d" h
  27. — 从 Flash 自举时,允许通过用户代码对 Flash 和备份 SRAM 进行访问(读取、擦9 p- l- }5 J, R/ \& o% f. W
  28. 除、编程)。
      A3 a8 W7 E% ?- g: k& B$ D
  29. 存储器读保护级别 2 是不可更改的。激活级别 2 后,保护级别不能再降回级别 0 或级别 1。$ j( D' p; H) h1 {/ H
  30. 注意:激活级别 2 后,将永久性禁止 JTAG 端口(相当于 JTAG 熔断)。这样,将无法执行边* ^9 _. |" v1 j9 W8 ~6 o) y! U
  31. 界扫描。意法半导体无法对设为保护级别 2 的器件做失效分析。
复制代码
0 c& Y8 A, ?3 q  ?
级别2特别狠,无法降级,以后只能在用户代码中使用外设(Uart、USB、ETH等)获取数据进行在线升级,所以STM32CubeProgrammer 或者 Segger加密都只使用到级别1,这样用户才能取消读保护。
4 Z- j. X/ g3 M4 n3 N; ~/ I
' n! w, g1 P2 d6 D5 C正常情况下,在STM32CubeProgramer通过ST-LINK连接设备后,读取到空片的数据全为0xFF,我们随便下载一个LED的测试程序,下载进去。
1 a" [* _$ K; Z$ O: y% ~
3 m4 N' t# l3 ~( T/ N- f  g0 l 20210430234352757.png
9 M+ h" T3 `' f* ]1 a% z/ K! y6 ~) {1 h2 p& h, A+ y# s
2021043023440294.png / D, T5 ?7 \: s$ ~
5 m- l8 e" w3 n+ O1 T
此时断电重启设备,或者在MCU Core选项卡中选择复位再运行,就能看到程序在运行了。7 ~2 Z5 |3 t2 [( d& u/ {1 @

7 C, R- @* L* n2 }3 {; w 20210430234415110.png
) n  h7 ?# y- J7 O( i! t+ n: W* K- r" P- |
这时候我们点击 Memory & File edition,点击Read,可以正常读出程序。% j- ^4 a1 h% A5 U' Z$ \
7 _& r. n1 h/ U7 P
20210430234430640.png
4 w3 @" X7 A7 {7 }( r. H
) h; g' i( S% \/ g7 {接下来要进行读保护的操作。切换到 Option bytes 选项卡中,可以看到Read Out Protection 中RDP是没有勾选状态的,这表示flash memory不处于读保护的状态,然后我们要勾选它,并点击下方的Apply,然后软件就会提示选项字已经写入,我们就已经使能读保护了。) G+ a+ S: S+ K/ L6 c

) m3 X4 G! m* d7 G2 }% A 20210430234444332.png
$ J) l" J  j3 z" j  i- i. B- ]' G1 k& g, v8 I4 U
这时候切换回Memory &File edition 选项卡,进行读操作,就会被提示读取数据失败,说明我们的读保护已经生效了。
1 S  U' M7 J+ U: c0 M7 e
8 ]( J: p, h5 H 20210430234451838.png
  M( h5 ~+ A; ]7 {( W& B' ^* k, ~! i. Y. v7 v
取消读保护
  i: P' N3 U' i* T( n在进行读保护前,我们需要了解一下连接选项卡中的Mode的各个选项的含义。在文件UM2237中有说明,此处进行摘录。
( R; e2 S% ~2 N  |- Y) b1 ~
/ M( }6 x  I% c
  1. 模式:
    8 \- @5 r& ?: J* C& d
  2. – 正常:使用“Normal”连接模式时,目标是休眠的,随后挂起。使用“ResetMode”
    6 T; S$ i7 f& a/ w1 ^
  3. 选项来选择复位的方式1 ~/ r: w) X1 r2 D
  4. – 复位下连接:“Connect Under Reset”模式允许在执行指令之前使用复位向量捕获
    ) k* \/ }! a7 L3 }+ `
  5. 连接到目标。这在很多情况下是很有用的,例如当目标包含了禁用JTAG/SWD引脚) l( s% d9 {. U2 f4 L# G" `
  6. 的代码时。
    6 I, d6 t* D$ e
  7. – 热插拔:“Hot Plug”模式下可以在不停机或复位的情况下连接到目标。这对于在+ M  i% r' h0 l8 Y( o+ N4 J
  8. 应用运行时更新RAM地址或IP寄存器非常有用。
    ; e; i4 j- z& j! R) @; {9 H
  9. 6 k. v, V& @' u) G. X" M' y
  10. 复位模式:
    2 Y  R# [! v3 _4 c8 N
  11. – 软件系统复位:通过Cortex-M应用中断和复位控制寄存器(AIRCR)来复位除调7 c% W0 k) E7 `. D, i/ \( m% k
  12. 试以外的所有STM32组件。9 n8 f% v0 D9 \4 X- n6 m' L
  13. – 硬件复位:通过nRST引脚来复位STM32器件。JTAG连接器(引脚15)的RESET. {2 e) y/ e8 o7 G9 [
  14. 引脚应连接到器件复位引脚。
    ) e1 @2 _9 V1 U1 k7 U8 s. D" X' `
  15. – 内核复位: 通过应用中断和复位控制寄存器(AIRCR)仅将内核Cortex-M复位。
复制代码

+ N, C$ p$ o/ G; W. ^# s) e5 e我们使能读保护后,也就无法通过JTAG/SWD接口访问内部flash,这对应的就是第二种情况了,所以mode我们就要选择“Connect Under Reset”,而复位模式根据情况进行选择,我使用的是SWD接口,所以选择的是"Software reset"。
& Y& V8 g2 s8 h2 X& m( u* J" b7 E4 p( l
2021043023450091.png 4 f7 P/ T  G" [. k  p1 H7 T

6 Y: g! t. V* z9 x. ^$ @9 t这时候切换到Option bytes选项卡中,取消勾选 Read Out Protection 中的RDP寄存器,然后点击Apply。然后软件提示6 H/ [3 T! ~) s; t. y/ ~/ d
* I0 V7 H" i7 d6 x( y* ^
"Option Bytes successfully programmed"说明我们成功取消了读保护。  }! H1 X' e* d4 z6 ~5 v! z; X+ x4 H/ n" P

% K  V+ J; {# m1 Y/ w7 W8 n 20210430234509763.png # ~: x2 q2 `" B
8 p: M8 O2 }; L2 n/ O, G
然后我们就能正常的擦除烧写程序了。! d4 {. S6 Z# M0 G

% F5 w& C( D# W0 E0 ^' D' \ 20210430234516468.png # K  h7 V  w/ S1 D# ~, ]
————————————————5 ~' Q! Q) y3 I' u9 t. e  S7 ~
转载:fafuwxm
8 e% M% g  g- ?7 T1 z1 L
. J3 T' H8 A8 k. L2 |" F& \
; n# D' P* R/ k7 I
! R& R4 i4 [% P$ _+ u. y" A  L
赞 收藏 评论0 发布时间:2022-8-23 16:16

举报

0个回答

所属标签

相似技术帖

官网相关资源

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