[APM32F4] 实测APM32F407的写保护功能效果

[复制链接]
 楼主| onemoren 发表于 2025-7-9 14:13 | 显示全部楼层 |阅读模式
本帖最后由 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翻转程式:
图片1.png
2)烧录器界面上,配置扇区0为写保护扇区:
图片2.png
3)烧录后重启MCU,使用JLINK连接检查,确认烧录正常,写保护生效:
图片3.png
4)在0扇区有写保护的基础上,尝试用JLINK去擦除扇区0,会出现写保护错误标志,确认写保护有生效:
图片4.png

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

图片6.png
风暴之眸 发表于 2025-7-9 17:19 | 显示全部楼层
这个写保护的作用还要是利用起来。
可以保护我的Bootloader的启动部分不被意外改写
星辰伴梦 发表于 2025-7-12 10:32 | 显示全部楼层
感谢分享!APM32F407的写保护功能对于防止代码被篡改确实非常重要,尤其是在安全要求较高的应用中。你的测试结果很有说服力。
作业天敌在此 发表于 2025-7-12 18:42 | 显示全部楼层
感谢分享!APM32F407的写保护功能对于提高系统安全性确实很重要。你的测试结果很有参考价值,特别是对于我们这些在设计阶段就要考虑安全性的工程师。
作业粉碎机 发表于 2025-7-15 10:10 | 显示全部楼层
楼主的测试很详细,APM32F407的写保护功能确实对于防止代码被篡改非常重要,特别是在安全要求高的场合。
夜幕叙事曲 发表于 2025-7-16 10:25 | 显示全部楼层
这个flash的选项字还可以通过jcommand来这样修改。
我还一直使用jflash的带选项字的方式来更新。挺不方便的。
幻想收藏家 发表于 2025-7-17 12:15 | 显示全部楼层
感谢分享!APM32F407的写保护功能对于防止代码被篡改确实非常重要,特别是在安全要求较高的应用中。你的测试结果很有参考价值。
旧时光放映机 发表于 2025-7-17 20:40 | 显示全部楼层
感谢分享!这种写保护机制对于提高嵌入式系统的安全性确实非常重要。你提供的代码示例和测试结果都很有参考价值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

66

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

46

主题

66

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部