本帖最后由 IFX_Lingling 于 2024-1-15 16:29 编辑
XMC4800 flash security
1:第一部分是flash的加密:
Flash 中有一个特殊的区域 UCB(User Configuration Block),用于 Flash 加密。UCB 区域分为 UCB0,UCB1,UCB2 这三个 1K 的区域,分别分配给 3 个用户使用。每个的权限有所不同,UCB0 用户有对芯片全局读保护和写保护权限,UCB1 用户有对芯片写保护权限,UCB2 用户有对芯片进行 OTP 保护权限。一般比较常用的是全局读保护,即把 PROCON0 的 bit15 值为 1,复位后 Flash 就被读保护了。PROCONx 寄存器是只读的,它会在复位后从 UCB 的对应位置把值 load 进来。
Flash 的加密流程是:
把 PROCNx 的内容配置好,先写 UC Page0
再把 confirmation code 设为 0x8AFE15C3,然后再写 UC Page2
复位后 Flash 就加密了
在代码段的操作可以调用flash的API:
XMC_FLASH_InstallProtection(0, 0x8000, 0x7E0, 0x7E0);
XMC_FLASH_ConfirmProtection(0);
这两条语句执行完成以后,芯片就处于加密的状态了。
但是在程序的开发过程中会涉及到解密,解密分为两个方向:
1: 临时解密
XMC_FLASH_lDisableReadProtectionCommand55(0x7E0,0x7E0);
临时解密以后再调用语句void XMC_FLASH_ResumeProtection(void)就可以了。
2: 永久解密
永久解密的做法操作次数是收到限制的。推荐只是操作4次。这个可以看XMC4800 reference manual 。
永久解密代码操作:
//XMC_FLASH_VerifyReadProtection(0x7E0, 0x7E0);
//XMC_FLASH_EraseUCB(XMC_FLASH_UCB0);
具体的寄存器部分可以看下面截图:
|