嵌入式 -固件防复制系列【1】GD32代码读保护

本文介绍了如何在GD32F3系列单片机上实现代码读保护,通过分析芯片手册,理解可选字节块功能,以及开启保护后的系统复位条件。测试结果显示,开启保护后,JFlash工具无法读取主存,且在特定条件下会触发整片擦除。由于风险较高,建议探索其他防复制方案。
摘要由CSDN通过智能技术生成

更新历史

  1. 20220227
    首次编辑和发布,描述了 GD32F303 MCU 的安全保护功能和初步测试结果;
  2. 20220303
    添加了进一步测试的结果;

引言

公司产品换料,使用了 GD32F3 系列的 MCU,客户要求对代码进行读保护,再查看用户手册时,看到了其提供的“安全保护”,就想通过实验来看下实际效果;

手册介绍

这里从 GD32F303 的用户手册摘录关键信息:

芯片内存结构

在这里插入图片描述
图1 内存基本分配表

这里我们需要注意的是,这里的主存分为了 bank0, bank1. bank0 的页大小为 2KB 每页,bank1 的大小为 4KB 每页;
且存在信息块和可选字节块,这个可选字节块也是和我们想要做的读保护息息相关的;

这里我们先明确,启用读保护功能是需要设置 可选字节块的,所以下面我们围绕可选字节块进行展开。

闪存操作说明

我们知道,常规内存编程前需要进行一定的动作,擦除、解锁等操作,这里是通过 两层解锁和先擦除后编程的:
在这里插入图片描述
图2 内存控制说明

通过图 2 中,我们可以得知以下关键信息:

  1. 内存操作前需要解锁,解锁的方式是向指定寄存器 FMC_KEY0 中写入键值;
  2. 可选字节的编程,是需要两层解锁的,即 FMC bank0 解锁后,还要对 FMC_OBKEY 寄存器写入相应键值解锁 可选字节寄存器的编程权限;

可选字节块说明

功能生效条件

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

上述我们可提取到关键信息:

  1. 开启读保护后,至少需要系统复位;
  2. 复位后检测信息不匹配后,可选字节会被强制擦除;

可选字节的具体含义见下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值