更新历史
- 20220227
首次编辑和发布,描述了 GD32F303 MCU 的安全保护功能和初步测试结果;- 20220303
添加了进一步测试的结果;
引言
公司产品换料,使用了 GD32F3 系列的 MCU,客户要求对代码进行读保护,再查看用户手册时,看到了其提供的“安全保护”,就想通过实验来看下实际效果;
手册介绍
这里从 GD32F303 的用户手册摘录关键信息:
芯片内存结构
图1 内存基本分配表
这里我们需要注意的是,这里的主存分为了 bank0, bank1. bank0 的页大小为 2KB 每页,bank1 的大小为 4KB 每页;
且存在信息块和可选字节块,这个可选字节块也是和我们想要做的读保护息息相关的;
这里我们先明确,启用读保护功能是需要设置 可选字节块的,所以下面我们围绕可选字节块进行展开。
闪存操作说明
我们知道,常规内存编程前需要进行一定的动作,擦除、解锁等操作,这里是通过 两层解锁和先擦除后编程的:
图2 内存控制说明
通过图 2 中,我们可以得知以下关键信息:
- 内存操作前需要解锁,解锁的方式是向指定寄存器 FMC_KEY0 中写入键值;
- 可选字节的编程,是需要两层解锁的,即 FMC bank0 解锁后,还要对 FMC_OBKEY 寄存器写入相应键值解锁 可选字节寄存器的编程权限;
可选字节块说明
功能生效条件
每次系统复位后,闪存的可选字节块被重加载到FMC_OBSTAT和FMC_WP寄存器,可选字节生效。可选字节的补字节具体为可选字节取反。当可选字节被重装载时,如果可选字节的补字节和可选字节不匹配,FMC_OBSTAT寄存器的OBERR位将被置1,可选字节被强制设置为0xFF。若可选字节和其补字节同为0xFF,则OBERR位不置位。
上述我们可提取到关键信息:
- 开启读保护后,至少需要系统复位;
- 复位后检测信息不匹配后,可选字节会被强制擦除;
可选字节的具体含义见下图: