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

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

STM32小技巧(1) HAL自定义串口中断回调 模块化代码进行解耦
STM32小技巧(2) STM32CubeProgrammer解除读保护的方法



简述

STM32CubeProgrammer(STM32CUBEPROG)为任意环境下的STM32微控制器编程提供了
一个一体化的软件工具:多操作系统,图形用户界面或命令行界面,支持多种连接选择(JTAG、SWD、USB、UART),采用手动操作或通过脚本自动操作。

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

但是请注意,取消读保护后,将对Flash和备份SRAM执行全部擦除,也就无法读出之前的程序。

开启读保护

为了方便测试,这里还是要先说明如何使用STM32CubeProgrammer开启读保护。在进行读保护设置之前,先了解一下读保护的等级,
经评论区提醒。这里完善下说法,像 STM32F1 只有启用与不启用读保护这两种选项。
而STM32F4 的读保护有三个等级,可参考手册(RM0090 等)。
STM32F1 的读保护就是对应着 级别0 和级别1。下文通过 STM32CubeProgrammer 的 RDP (Read Protection) 寄存器操作可以看到区别。

可对 Flash 中的用户区域实施读保护,以防不受信任的代码读取其中的数据。读保护分三个 级别,具体定义如下:

● 级别 0:无读保护
将 0xAA 写入读保护选项字节 (RDP) 时,读保护级别即设为 0。此时,在所有自举配置
(用户 Flash 自举、调试或从 RAM 自举)中,均可执行对 Flash 或备份 SRAM 的读/
写操作(如果未设置写保护)。

● 级别 1:使能读保护
这是擦除选项字节后的默认读保护级别。将任意值(分别用于设置级别 0 和级别 2 的
0xAA 和 0xCC 除外)写入 RDP 选项字节时,即激活读保护级别 1。设置读保护级别
1 后:
— 在连接调试功能或从 RAM 或系统存储器自举时,不能对 Flash 或备份 SRAM 进行
访问(读取、擦除、编程)。读请求将导致总线错误。
— 从 Flash 自举时,允许通过用户代码对 Flash 和备份 SRAM 进行访问(读取、擦
除、编程)。

激活级别 1 后,如果将保护选项字节 (RDP) 编程为级别 0,则将对 Flash 和备份 SRAM
执行全部擦除。因此,在取消读保护之前,用户代码区域会清零。批量擦除操作仅擦除
用户代码区域。包括写保护在内的其它选项字节将不受影响。OTP 区域不受批量擦除操
作的影响,同样保持不变。只有在已激活级别 1 并请求级别 0 时,才会执行批量擦除。
当提高保护级别 (0->1、1->2、0->2) 时,不会执行批量擦除。

● 级别 2:禁止调试/芯片读保护
将 0xCC 写入 RDP 选项字节时,可激活读保护级别 2。设置读保护级别 2 后:
— 级别 1 提供的所有保护均有效。
— 不再允许从 RAM 或系统存储器自举。
— JTAG、SWV(单线查看器)、ETM 和边界扫描处于禁止状态。
— 用户选项字节不能再进行更改。
— 从 Flash 自举时,允许通过用户代码对 Flash 和备份 SRAM 进行访问(读取、擦
除、编程)。
存储器读保护级别 2 是不可更改的。激活级别 2 后,保护级别不能再降回级别 0 或级别 1。
注意:激活级别 2 后,将永久性禁止 JTAG 端口(相当于 JTAG 熔断)。这样,将无法执行边
界扫描。意法半导体无法对设为保护级别 2 的器件做失效分析。

级别2特别狠,无法降级,以后只能在用户代码中使用外设(Uart、USB、ETH等)获取数据进行在线升级,所以STM32CubeProgrammer 或者 Segger加密都只使用到级别1,这样用户才能取消读保护。

如果在 Reference manual 的 Option bytes 明确指出有 Level 2 则说明有。像 F1 的手册中,没有提到,这时候就需要看 PM0075 Programming manual,但是这里面也只说明了处于保护与未保护的状态。
还有一种办法进行确认,就是通过 STM32CubeProgrammer 连接设备后,通过查看 Option bytes 的RDP寄存器,F4 有三个等级可选,F1 的话,只有处于与不处于读保护的状态,经过测试,使能读保护之后,可以通过 STLINK 重新取消读保护,也就是对应着保护级别1。

正常情况下,在STM32CubeProgramer通过ST-LINK连接设备后,读取到空片的数据全为0xFF,我们随便下载一个LED的测试程序,下载进去。

在这里插入图片描述

在这里插入图片描述

此时断电重启设备,或者在MCU Core选项卡中选择复位再运行,就能看到程序在运行了。

在这里插入图片描述

这时候我们点击 Memory & File edition,点击Read,可以正常读出程序。

在这里插入图片描述

接下来要进行读保护的操作。切换到 Option bytes 选项卡中,可以看到Read Out Protection 中RDP是没有勾选状态的,这表示flash memory不处于读保护的状态,然后我们要勾选它,并点击下方的Apply,然后软件就会提示选项字已经写入,我们就已经使能读保护了。
在这里插入图片描述
上图是 F1 的 RDP 寄存器,可以看到只有 Unchecked 和 Checked 两个选项。下图是 F4 的 RDP寄存器。可以有三个保护等级可选。
在这里插入图片描述

这时候切换回Memory &File edition 选项卡,进行读操作,就会被提示读取数据失败,说明我们的读保护已经生效了。

在这里插入图片描述

取消读保护

在进行读保护前,我们需要了解一下连接选项卡中的Mode的各个选项的含义。在文件UM2237中有说明,此处进行摘录。

模式:
– 正常:使用“Normal”连接模式时,目标是休眠的,随后挂起。使用“ResetMode”
选项来选择复位的方式
– 复位下连接:“Connect Under Reset”模式允许在执行指令之前使用复位向量捕获
连接到目标。这在很多情况下是很有用的,例如当目标包含了禁用JTAG/SWD引脚
的代码时。
– 热插拔:“Hot Plug”模式下可以在不停机或复位的情况下连接到目标。这对于在
应用运行时更新RAM地址或IP寄存器非常有用。

复位模式:
– 软件系统复位:通过Cortex-M应用中断和复位控制寄存器(AIRCR)来复位除调
试以外的所有STM32组件。
– 硬件复位:通过nRST引脚来复位STM32器件。JTAG连接器(引脚15)的RESET
引脚应连接到器件复位引脚。
– 内核复位: 通过应用中断和复位控制寄存器(AIRCR)仅将内核Cortex-M复位。

我们使能读保护后,也就无法通过JTAG/SWD接口访问内部flash,这对应的就是第二种情况了,所以mode我们就要选择“Connect Under Reset”,而复位模式根据情况进行选择,我使用的是SWD接口,所以选择的是"Software reset"。

在这里插入图片描述

这时候切换到Option bytes选项卡中,取消勾选 Read Out Protection 中的RDP寄存器,然后点击Apply。然后软件提示

"Option Bytes successfully programmed"说明我们成功取消了读保护。

在这里插入图片描述

然后我们就能正常的擦除烧写程序了。

在这里插入图片描述

  • 13
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
### 回答1: STM32G0系列微控制器的保护功能是为了保护芯片内部的程序代码不被非授权人员取或复制。如果需要解除STM32G0芯片保护功能,可以按照以下步骤操作: 1. 准备相关工具:需要准备一台烧录器、连接线和开发环境。 2. 连接烧录器:将烧录器通过连接线连接到目标STM32G0芯片的SWD接口上。确保连接正确,并确认烧录器和芯片之间的通信正常。 3. 打开开发环境:打开支持STM32G0芯片的开发环境(如Keil、STM32CubeIDE等),创建一个新项目或打开现有项目。 4. 设置保护解除:在开发环境中,找到芯片选择、目标设备或调试配置等选项,进入芯片配置界面。在芯片配置界面中,找到保护或安全选项,并将其设置为解除保护。保存配置。 5. 烧录解除保护代码:在开发环境的烧录界面中,选择烧录操作。确保选择的芯片型号和连接方式正确,并勾选上解除保护选项。然后点击烧录按钮开始烧录解除保护代码。 6. 烧录完成:等待烧录完成,烧录器会显示烧录状态和结果。如果解除保护成功,烧录器会提示解除保护成功的信息。 7. 验证解除保护:重启芯片或将电源重新接入芯片,然后通过开发环境或其他方法芯片的代码和数据。如果能够正常取,说明已成功解除STM32G0芯片保护功能。 需要注意的是,解除STM32G0芯片保护功能可能会对芯片的安全性产生影响,建议在确保芯片的安全性要求不高或已经备份好代码的情况下进行操作。操作过程中请谨慎,并遵循技术规范和合法使用的原则。 ### 回答2: STM32G0系列微控制器支持保护功能,该功能可以防止未经授权的存储器取操作。然而,有时候我们可能需要解除保护以进行进一步的开发或测试。下面是简要的步骤: 1. 准备工作:首先,我们需要一台支持SWD(串行线级调试)的STM32开发板(例如ST-Link V2)以及适当的软件工具(例如ST-Link Utility或STM32CubeProgrammer)来进行连接和操作。 2. 连接硬件:使用适当的线缆将STM32开发板与电脑连接。确保连接正确并稳定。 3. 打开软件工具:打开ST-Link Utility或STM32CubeProgrammer软件。 4. 连接目标设备:在软件工具中,选择正确的芯片型号(STM32G0系列)和连接方式(SWD)。 5. 连接目标设备:点击连接按钮,确保软件能够正确地识别并与目标设备建立连接。 6. 解除保护:在软件工具的选项菜单中,找到或选择"保护"选项。然后,点击解除保护按钮。根据提示操作,并等待解除保护的完成。 7. 执行其他操作:一旦保护成功解除,您可以进行进一步的开发、烧录或测试操作。 请注意,解除保护可能会有风险,并有可能使设备变得不可用。为了确保操作的安全性,请务必谨慎行事,并备份重要数据。此外,解除保护可能违反相关法律法规,因此请确保您具备相关的授权或许可证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值