我们要锁定闪存的上半部分包含一些 NMV RO 配置信息、引导加载程序和 CCFG。 从0x0009 C000到 0x000B 0000的所有内容。
我正在使用 FlashProtectionSet ()首先设置 FLASH_WRITE_PROTECT (用 FlashProtectionGet ()读回它) ,然后用 FlashProtectionSave ()将它保存到 CCFG 中。 设置后、FlashProtectionSet 和 FlashProtectionGet 看起来都工作了、从而显示其已锁定。 显然、它不会在复位后持续。
但是、我随后将同一偏移传递到 FlashProtectionSave、这有时会返回成功而有时也会返回错误。 CCFG 反映返回值。
扇区0x4e (0x0009c000)是 RO
扇区0x4e (0x0009c000)保存成功
扇区0x4f (0x0009e000)是 RO
扇区0x4f (0x0009e000)保存成功
扇区0x50 (0x000a0000)是 RO
扇区0x50 (0x000a0000)保存成功
扇区0x51 (0x000a2000)是 RO
扇区0x51 (0x000a2000)保存成功
扇区0x52 (0x000a4000)是 RO
扇区0x52 (0x000a4000)保存失败
扇区0x53 (0x000a6000)是 RO
扇区0x53 (0x000a6000)保存失败
扇区0x54 (0x000a8000)是 RO
扇区0x54 (0x000a8000)保存失败
扇区0x55 (0x000AA000)是 RO
扇区0x55 (0x000AA000)保存成功
扇区0x56 (0x000ac000)是 RO
扇区0x56 (0x000ac000)保存成功
扇区0x57 (0x000ae000)是 RO
扇区0x57 (0x000ae000)保存失败
扇区0x58 (0x000b0000)是 RW
扇区0x58 (0x000b0000)保存成功
我还尝试了禁用 HWI、它正在使用 driverlib 中的 ROM 函数、因此我无法轻松地遍历代码。 尝试 ROM 调试定义失败、且程序未引导。
以下代码:
//将 RO NVS 锁定到并包括 CCFG
// 0x9C000 - 0xB2000
对于(扇区=(MEM_NVS_RO_START / FlashSectorSizeGet ());扇区< sectorCount;扇区++)
{
uint32_t offset =扇区* FlashSectorSizeGet ();
FlashProtectionSet (偏移、FLASH_WRI TE_PROTECT);
Hwi_disable ();
CMD_printf ("\tSector 0x%02x (0x%08x)是%s\n"、扇区、偏移、
(FlashProtectionGet (offset)= FLASH_WRITE_PROTECT)? "RO":"RW";
uint32_t 结果= FlashProtectionSave (偏移);
CMD_printf ("\tSector 0x%02x (0x%08x)保存%s (%u)\n"、扇区、偏移、
(结果= FAPI_STATUS_SUCCESS)? "成功":"失败"、结果);
Hwi_enable ();
}
CMD_printf ("引导加载程序和 NVM RO 已锁定\n");
附带问题、要锁定 CCFG 存储器、我需要锁定扇区0x58、(0xB0000 - 0xB2000 )是否正确? 即闪存末尾上方的扇区。 或者我是否需要锁定最后一个可用扇区、即 CCFG 中的扇区127? 我是否应该尝试将所有扇区从0x4e 锁定到0xff、即使它们不是有效的闪存位置?