STM32如何优雅的使用MDK工具解除芯片读保护?

文章介绍了在STM32芯片量产时通常会开启读保护,这导致调试不便。通过使用MDK,可以将解除读保护的代码加载到RAM中运行,从而在不影响FLASH读保护的情况下进行调试。具体步骤包括设置MDK目标、定义宏、重定位代码到RAM、创建运行RAM的文件并调整编译设置。这种方法允许快速切换目标以解除读保护,提高开发效率。
摘要由CSDN通过智能技术生成

经历过产品量产的同学应该都知道,芯片一般会在出厂时开启读保护:要么在代码中加入,要么在烧录程序后人工通过软件开启该功能,比如 STM32 ST-LINK Utility:

当然也可以使用该工具关闭读保护功能。

为了保证程序不被读取,大多数产品应该会直接在量产代码中加入该功能,但这样会导致一个麻烦的问题:无法正常调试。

每次下载后,如果代码出现问题,都需要在线调试,而你的代码为了不忘记,默认就是开启读保护功能的,所以每次下载后,如果发现问题,你可能要找一个工具,如 J-Flash 或者上面的软件负责关闭读保护,让我们的开发效率降低不少。

是否有更好的方法解除读保护呢?

今天介绍一种使用 MDK 解除读保护的方法,毕竟 MDK 软件绝大部分道友都会安装,所以使用它是最合适的。

首先,说说它的读保护原理。

读保护功能是通过设置相应的 Option Bytes 来实现的,并且掉电不会消失,和 ROM 类似。

而解除是则是复位相应的 Option Bytes 来实现,掉电也不会消失,但是不同的是,设置完之后,芯片自动会擦除整颗芯片,这样你也就不能通过解除读保护进而读取整颗芯片代码了。

但是,你会发现一个现象,即使你无法读取 FLASH 的代码,你仍然可以通过上述工具连接芯片,这样就给我们使用 MDK 解除读保护创造了条件。

在以前的笔记里面,有介绍如何使代码运行在 RAM 中,既然读保护保护的是 FLASH 区,RAM 并不受影响,那么我们就可以将我们解除的代码加载到 RAM 中运行,如此就可以通过 MDK 解除芯片的读保护了。

具体操作如下(如下操作不懂的,请看以前写的笔记《STM32工程模板建立之 RAM 目标(五)》):

1、设置新的目标,比如:

然后设置该目标的输出目录,这样只要编译一次,之后就可以直接切换目标后直接点击 debug,不需要重复编译,相当方便(和正常输出目录不同)。

新建两个目录,并选择对应的目录即可

2、切换到新目标,然后再 C/C++ 选项卡中增加新宏 READ_PROTECT。

然后在代码中根据该宏加入解除读保护代码

3、将代码地址重新定位到 RAM 中(0x20000000 为 RAM 首地址,假设 64 K 空间)

4、新建 run_ram文件,内容如下:

保存到工程目录下,然后将其正确添加:

去掉勾选(这样就不会下载程序到 FLASH了):

5、编译,然后点击Debug 即可,此时程序应该自动停止在断点处 __breakpoint(0),说明解除代码已经顺利运行完成。

Enjoy it!!!

每次需要解除芯片读保护功能时,只要切换目标后即可成功解除(前提是已经编译过一次了),相当方便,当然你如果不想编译,也可以直接生成一个 axf 文件保存起来,只要每次加载这个文件即可成功解除。

一次设置,永不烦恼,相当的实用!

本文摘自网络,版权归原作者所有,如有侵权请联系我删除。

### 回答1: STM32是STMicroelectronics(意法半导体)推出的一系列32位微控制器(MCU)系列产品。STM32芯片内部集成了Flash存储器,该存储器用于存储程序代码和数据。为了确保程序代码和数据的安全性,STM32提供了一种Flash保护的功能。 Flash保护使得数据或代码不被非授权访问和复制,保护了知识产权和软件的安全。在STM32芯片中,Flash保护可以通过设置相应的Flash控制寄存器来实现。 通常,Flash保护提供了两种级别:级别1和级别2。级别1可以保护程序代码、EEPROM数据和Option Bytes(包含了设备的一些基本配置)不被非法取;级别2在级别1的基础上提供了进一步的保护,可以防止任何方式的取,包括自带的调试功能以及外部编程方式。 要设置Flash保护,首需要对Flash设备进行解锁,然后根据需求设置相应的保护级别。在解锁过程中,必须提供正确的密钥以确认授权。一旦Flash保护被设置,只有通过解密才能取该区域的数据。 需要注意的是,一旦设置了Flash保护,将无法再进行擦除或编程操作。所以在设置Flash保护之前,必须确保程序代码、数据和设备选项已经写入Flash中,并且不再需要修改。 总结来说,STM32芯片的Flash保护功能通过设置相应的寄存器来实现,以保护程序代码和数据的安全。但需要注意的是,设置Flash保护后将无法再修改Flash内容,所以在设置前需要确保Flash中的数据已经完整且不再需要修改。 ### 回答2: STM32的Flash保护功能是指通过设置特定的寄存器位来保护Flash存储器中的内容,防止未经授权的取或修改。Flash保护功能可以有效保护应用程序的机密性以及保护重要代码和数据不被盗取或恶意篡改。 STM32芯片提供了多种级别的Flash保护,可以根据需要进行灵活的配置。主要有两种级别的Flash保护: 1. 全域级别的Flash保护:可以保护整个Flash存储器中的内容,使其无法被取。设置该级别的保护后,所有的Flash存储器都无法取,包括应用程序的代码和数据。只能进行写操作,但无法取其内容。 2. Bank级别的Flash保护:可以对Flash存储器的不同区域进行不同的保护设置。可以设置某些Flash存储器区域只能写入而不能取,另一些区域允许既取又写入。 使用STM32的Flash保护功能需要通过编程STM32芯片的Flash保护寄存器来实现。具体的步骤包括设置保护级别、选择Flash存储器区域、设置保护位等。保护设置通常在芯片初始化之前进行,以确保代码和数据的安全性。 需要注意的是,一旦Flash保护被设置,就无法再对其进行修改或取消。因此,在设置Flash保护之前,务必仔细考虑保护级别和区域的设置,以免造成不可逆的数据丢失或功能限制。 总结起来,STM32的Flash保护功能可以有效保护代码和数据的安全性,防止未经授权的取和修改。通过合理配置保护级别和区域,可以提高系统的安全性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值