打印
[APM32F4]

实测APM32F407的写保护功能效果

[复制链接]
518|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 onemoren 于 2025-7-9 17:26 编辑

实测APM32F407的写保护功能效果

不知道大家有没有遇到FLASH中的代码擦除或篡改的情况,这种机率是很低很低的。只有在大批量生产和使用的情况下有可能遇到。有安全意识的嵌入式工程师会充分利用MCU的写保护功能来增强设计的可靠性。这里以APM32F407作为例子,来看看FLASH写保护的效果。

1.写保护的作用和目的
写保护(Write Protection)主要用于防止Flash存储区的代码或非易失性数据被意外擦除或篡改。当保护启用时,任何尝试写入受保护扇区的操作都会触发Flash错误标志(WRPERR),确保关键数据的安全性。

2.保护颗粒度
APM32F407支持扇区级保护,可灵活选择需保护的扇区(共12个用户扇区:0-11)。每个扇区通过选项字节(Option Bytes)中的FMC_OPTCTRL[NWPROT]位独立控制保护状态:
◦ NWPROT= 1:取消写保护
◦ NWPROT = 0:启用写保护(默认值0xFFF,即所有扇区未保护)

3.实现过程与代码示例
// 示例:启用扇区写保护(需使用HAL/LL库)
HAL_FLASH_Unlock();           // 解锁Flash控制器
HAL_FLASH_OB_Unlock();        // 解锁选项字节
// 配置写保护参数(以保护扇区0为例)
FLASH_OBProgramInitTypeDef OBConfig;
OBConfig.OptionType = OPTIONBYTE_WRP;
OBConfig.WRPSector = OB_WRP_SECTOR_0; //  选择扇区
OBConfig.WRPState = OB_WRP_ENABLE;     // 启用保护
HAL_FLASHEx_OBProgram(&OBConfig);      // 应用配置
HAL_FLASH_OB_Lock();          // 锁定选项字节
HAL_FLASH_Lock();             // 锁定Flash控制器

4.使用烧录工具和JLINK测试效果
1)使用轩微烧录器烧录程序,选择的程序是简单的GPIO翻转程式:
2)烧录器界面上,配置扇区0为写保护扇区:
3)烧录后重启MCU,使用JLINK连接检查,确认烧录正常,写保护生效:
4)在0扇区有写保护的基础上,尝试用JLINK去擦除扇区0,会出现写保护错误标志,确认写保护有生效:

5)对比不对扇区0加写保护,对扇区0做擦除操作的效果:

图片6.png (260.17 KB )

图片6.png

使用特权

评论回复
沙发
风暴之眸| | 2025-7-9 17:19 | 只看该作者
这个写保护的作用还要是利用起来。
可以保护我的Bootloader的启动部分不被意外改写

使用特权

评论回复
板凳
星辰伴梦| | 2025-7-12 10:32 | 只看该作者
感谢分享!APM32F407的写保护功能对于防止代码被篡改确实非常重要,尤其是在安全要求较高的应用中。你的测试结果很有说服力。

使用特权

评论回复
地板
作业天敌在此| | 2025-7-12 18:42 | 只看该作者
感谢分享!APM32F407的写保护功能对于提高系统安全性确实很重要。你的测试结果很有参考价值,特别是对于我们这些在设计阶段就要考虑安全性的工程师。

使用特权

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

本版积分规则

46

主题

66

帖子

2

粉丝