我正在开发 TMS320F28035 SCI 引导加载程序、一切都运行良好、但如果我使用修复密码锁定器件、则 csmUnlock 不工作。 我在内核文件中进行了更改
uint16 CsmUnlock()
{
/*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。
asm (" EALLOW");//密钥寄存器受 EALLOW 保护
*CSM++= 0x1234;//在0xAE0处注册 KEY0
*CSM++= 0xFFFF;//在0xE1处注册密钥1
*CSM++= 0xFFFF;//在0xAE2处注册密钥2
*CSM++= 0xFFFF;//在0xAE3处注册密钥3
*CSM++= 0xFFFF;//在0xAE4上注册 KEY4
*CSM++= 0xFFFF;//在0xAE5上注册 KEY5
*CSM++= 0xFFFF;//在0xAE6上注册 KEY6
*CSM++= 0xFFFF;//在0xAE7上注册 KEY7
asm (" EDIS");*
易失性 uint16温度;
//使用当前密码加载密钥寄存器。 0xFFFF 是虚拟的
//密码。 用户应将其替换为正确的 DSP 密码。
EALLOW;
// CsmRegs.KEY0 = 0xFFFF;
// CsmRegs.key1 = 0xFFFF;
// CsmRegs.key2 = 0xFFFF;
// CsmRegs.key3 = 0xFFFF;
//CsmRegs.KEY4=0xFFFF;
//CsmRegs.KEY5=0xFFFF;
//CsmRegs.KEY6 = 0xFFFF;
//CsmRegs.KEY7=0xFFFF;
CsmRegs.KEY0 = 0x1234;
CsmRegs.key1 = 0xFFFF;
CsmRegs.key2 = 0x5678;
CsmRegs.key3 = 0xFFFF;
CsmRegs.KEY4 = 0x4321;
CsmRegs.KEY5=0xFFFF;
CsmRegs.KEY6 = 0x8765;
CsmRegs.KEY7=0xFFFF;
EDIS;
//执行密码位置的虚拟读取
//如果它们与密钥值匹配,CSM 将解锁
temp = CsmPwl.PSWD0;
temp = CsmPwl.PSWD1;
temp = CsmPwl.PSWD2;
temp = CsmPwl.PSWD3;
temp = CsmPwl.PSWD4;
temp = CsmPwl.PSWD5;
temp = CsmPwl.PSWD6;
temp = CsmPwl.PSWD7;
//如果 CSM 未锁定,则返回成功,否则返回
//失败。
if (CsmRegs.CSMSCR.bit.SECURE_=0)返回 STATUS_SUCCESS;
否则返回 STATUS_FAIL;
}
我已锁定设备的修复密码