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