GD32篇 一、GD32程序设置读保护,防止程序被读取

GD32篇 记录

一、GD32开发版程序设置读保护,防止程序被读取

二、GD32TIMER输出PWM

平台:PC
系统:Win10 1909
开发版:GD32F103RCT6
软件:Keil、STM32 ST-LINK Utility

STM32 ST-LINK Utility下载链接:密码2022



前言

在实际发布的产品中,在GD32芯片的内部FLASH存储了控制程序,如果不作任何保护措施的话,可以使用下载器直接把内部FLASH的内容读取回来,得到bin或hex文件格式的代码拷贝,别有用心的厂商会利用该方法山寨产品。
为了解决这个问题,GD32芯片提供了好几种保护内部Flash不被轻易读取的方式,但是一般在默认的情况下这个功能是没有打开的。


一、STM32 ST-LINK Utility?

STM32 ST-LINK Utility这个软件工具其实主要就是配套“ST-LINK”这个下载工具一起使用的上位机软件。因此使用STM32 ST-LINK Utility上位机软件需要有一个ST-LINK工具才行。它的功能和J-Link对应的工具类似,用于烧写代码。

STM32 ST-LINK Utility工具在产品开发过程中测试一些其他版本的代码,可以直接下载hex,而不用打开工程再编译去下载。 当你开发完一个STM32产品,需要量产的时候,就可以用这个工具直接下载hex代码,对代码加密(读保护)

二、使用步骤

1.ST-LINK Utility界面介绍

安装下载完成之后打开就是这个界面

STM32 ST-LINK Utility

点击Target

点击Target

接着点击Connect

出现一下信息就说明成功读取到了内部的Flash了

连接成功

很明显,已经通过ST-Link用 STM32 ST-LINK Utility读取出来了Flash 的内容,我甚至还可以保存成BIN文件
读取Flash测试

2.写入数据

接下来往Flash里面写一些内容,测试一下

代码如下(示例):

const char FIRMWARE[] __attribute__((section(".ARM.__at_0x08010000")))   ={
   
   "WRITE FLASH"};
const char g_revision_datetime[]__attribute__((section(".ARM.__at_0x08010020")))  = __DATE__" "  __TIME__;

在0x08010000这里写入“ WRITE FLASH”
在0x08010020 纪录编译代码时间

完成后编译代码,写入到芯片上,然后打开ST-LINK Utility
如下图

读Flash

keil

时间差不多
时间
可以看到,用ST-link脸上GD32 的芯片,用ST-LINK Utility完全可以读出Flash的内容

在这里插入图片描述


三、GD32FMC介绍

可选项字节块编程
闪存结构

对于GD32F10x_MD,闪存页大小为1KB。
对于主存储闪存容量不多于512KB的GD32F10x_CL 和GD32F10x_HD,闪存页大小为2KB。例如RCT6
对于主存储闪存容量不少于768KB的GD32F10x_CL和
GD32F10x_XD,使用了两片闪存;前512KB容量在第一片闪存(bank0)中,后续的容量在第
二片闪存(bank1)中。其中bank0的闪存页大小为2KB,bank1的闪存页大小为4KB。主存储
闪存的每页都可以单独擦除。闪存结构见下图。

闪存结构

GD32F103RCT6属于GD32F10x_HD系列产品,每页的字节是2K,总共的Flash有256K,也就是0-127页

FMC相关的寄存器
/* FMC and option byte definition */
#define FMC                        FMC_BASE                       /*!< FMC register base address */
#define OB                         OB_BASE                        /*!< option bytes base address */

/* registers definitions */
#define FMC_WS                     REG32((FMC) + 0x00U)                          /*!< FMC wait state register */
#define FMC_KEY0                   REG32((FMC) + 0x04U)                          /*!< FMC unlock key register 0 */
#define FMC_OBKEY                  REG32((FMC) + 0x08U)                          /*!< FMC option bytes unlock key register */
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值