onemoren 发表于 2025-7-9 14:13

实测APM32F407的写保护功能效果

本帖最后由 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= 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做擦除操作的效果:

风暴之眸 发表于 2025-7-9 17:19

这个写保护的作用还要是利用起来。
可以保护我的Bootloader的启动部分不被意外改写

星辰伴梦 发表于 2025-7-12 10:32

感谢分享!APM32F407的写保护功能对于防止代码被篡改确实非常重要,尤其是在安全要求较高的应用中。你的测试结果很有说服力。

作业天敌在此 发表于 2025-7-12 18:42

感谢分享!APM32F407的写保护功能对于提高系统安全性确实很重要。你的测试结果很有参考价值,特别是对于我们这些在设计阶段就要考虑安全性的工程师。
页: [1]
查看完整版本: 实测APM32F407的写保护功能效果