打印
[研电赛技术支持]

GD32F303RCT6不小心将读保护开启,导致后续程序烧不进去的解决办法

[复制链接]
2676|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nawu|  楼主 | 2023-11-13 10:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
错误现象
用j-flash v7.68b软件通过ARM仿真器设置接口为SWD烧录编译好的目标.bin文件,第一次烧录成功,后面再也烧录不进,出现现象
如下图:

推测原因,flash的读保护被打开

判断读保护开启的方法
GD和ST系列的选项字节处是读保护是否开启的判断位置
参考如下链接:GD32的flash读保护和写保护
查看memory map 选项字节所在的地址
如下图:


选项字节里具体的各个位的含义,课参考如上链接


每次系统复位后,闪存的可选字节块被重加载到FMC_OBSTAT和FMC_WP寄存器,可选字节生效。可选字节的补字节具体为可选字节取反。当可选字节被重装载时,如果可选字节的补字节和可选字节不匹配,FMC_OBSTAT寄存器的OBERR位将被置1,可选字节被强制设置为0xFF。

用JLink-commander查看选项字节地址处的值
参考链接如下:
JFlash软件解锁GD32MCU

上述链接的查看方法可取,解锁方法不行

解锁读保护
还是用jlink的软件:J-Link STM32 Unlock



这里选择ST的型号,为啥选ST的,一方面因为GD的型号不全,另一方面选择GD的型号可能解锁指令不能用,后面新的J-Flash版本应该会逐步完善GD。下面给出一些对应的参考型号,不唯一,大体原则就是FLASH大小保持一致。
GD32E230系列 <—> STM32F030系列
例如:GD32E230F4 <—> STM32F030F4
GD32E230R8 <—> STM32F030R8


GD32F10X,GD32F30X,GD32E103,GD32F3X0 <—> STM32F103系列
例如:GD32F103C8 GD32F303C8 GD32E103C8 GD32F3x0C8<—> STM32F103C8


GD32F450 <—> STM32F429系列
例如:GD32F450VE <—> STM32F429VE
————————————————
版权声明:本文为CSDN博主「GK小卜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42224577/article/details/134188910

使用特权

评论回复
沙发
qcliu| | 2023-12-5 16:39 | 只看该作者
一般来说我们可以通过硬件方式解决这个问题吗

使用特权

评论回复
板凳
tpgf| | 2023-12-5 17:30 | 只看该作者
在代码里边我们可以实现读保护吗

使用特权

评论回复
地板
drer| | 2023-12-6 13:00 | 只看该作者
这种读保护和我们常说的加密根本就是两码事吧

使用特权

评论回复
5
coshi| | 2023-12-6 13:51 | 只看该作者
可以全部擦掉之前写入的代码吗

使用特权

评论回复
6
kxsi| | 2023-12-6 14:38 | 只看该作者
一般情况下,什么样的操作会导致读保护呢

使用特权

评论回复
7
wiba| | 2023-12-6 15:29 | 只看该作者
如果程序写不进去的时候如何判定是读保护引起的呢

使用特权

评论回复
8
申小林一号| | 2024-4-30 17:20 | 只看该作者
非常不错的帖子,值得推广扩散!!!

使用特权

评论回复
9
大鹏2365| | 2024-6-30 23:24 | 只看该作者
  • 根据GD32L系列的参考手册,检查读取到的值是否启用了读保护。

使用特权

评论回复
10
大鹏2365| | 2024-6-30 23:24 | 只看该作者
连接成功后,使用命令读取选项字节的地址:
shell
J-Link> mem32 0x1FFFF800 16

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

3307

帖子

3

粉丝