你好
我正在尝试实施代码安全模块。 我对它的实施有几个问题。
- 如果我正确理解文献、128位密钥必须包含在存储器位置0x3F 7FF8-0x3F 7FFF 的引导加载程序中。
- 应用程序代码加载(刷写)后,安全密钥(128位)存储在 DSP2803xSystemCtrl.c 文件中,我们使用 csmUnlock()函数将写入闪存的内容与存储在 DSP2803xSystemCtrl.c 文件中的内容进行比较。 是这样吗?
文献中写入的函数没有意义第一个函数 dspUnsecure();通过存储密钥的闪存存储器并将其与名为"temp"的变量进行比较,然后它分配 CSM 寄存器值。 这不应该使用 CSM 值检查存储器?
void dspUnsecure (void) { volatile int * csm =(volatile int *) 0x000AE0;//csm 寄存器文件 volatile int * PWL =(volatile int *) 0x003F7FF8;//密码位置 volatile int tmp; int i; //读取128位密码位置(PWL) //在地址0x3F 7FF8-0x3F 7FFF 处的闪存中 //如果器件是安全的、则读取的值将是 //实际上没有加载到 temp 变量中,所以 //这称为虚拟读取。 对于(i=0;i<8;i++) tmp =* PWL++; //如果密码地址(PWL)都为1 (0xFFFF), //则器件现在将不安全。 如果是密码 //不是全1 (0xFFFF)、则需要以下代码 //取消 CSM 的安全保护。 //将128位密码写入密钥寄存器 //如果此密码与中存储的密码匹配 // PWL 则 CSM 将变得不安全。 如果没有 //匹配、则器件将保持安全。 //示例密码为: //使用0x111122223344455556677778888。 EALLOW;//密钥寄存器受 EALLOW 保护 *CSM++= 0x1111;//寄存器 KEY0位于0xAE0 *CSM++= 0x2222;//在0xE1处注册密钥1 *CSM++= 0x3333;//在0xAE2处注册密钥2 *CSM++= 0x4444;//在0xAE3处注册密钥3 *CSM++= 0x5555;//在0xAE4处注册 KEY4 *CSM++= 0x6666;//在0xAE5上注册 KEY5 *CSM++= 0x7777;//在0xAE6上注册 KEY6 *CSM++= 0x8888;//在0xAE7上注册 KEY7 EDIS; }
Nexwe 有一个安全函数 dspSecure();该函数将新值重新分配给 CSMCR 指针,即0x00AEF,现在是0x8000,我不知道它在做什么。 是否分配了新密码?
这是代码
void dspSecure (void) { 易失性 int * CSMSCR = 0x00AEF;//CSMSCR 寄存器 //设置 FORCESEC 位 EALLOW;/CSMSCR 寄存器受 EALLOW 保护。 * CSMSCR = 0x8000; EDIS; }
写入错误的代码是否是用于保护 DSP 的方法?
谢谢