一般情况下,在开发阶段并不需要代码安全保护,只有当软件开发完成后才需要。在代码烧进Flash存储器前(或烧进ROM前),可选择一个密码来保护自己的代码。一旦密码烧进PWL后,复位DSP或令CSMSCR寄存器中的FORCESEC位为1,DSP就处于安全状态。在安全存储器外面运行程序不需要密码,但调试时若访问安全存储器就需要密码。
CSM的寄存器见表2-7。
表2-7 代码安全模块CSM寄存器
CSM状态和控制寄存器(CSMSCR)的格式为
●位15,FORCESEC:写1可以清零KEY寄存器,并使DSP安全(Security)。
●位14~1,保留。
●位0,SECURE:只读位,反映了DSP目前的状态。
1 DSP安全,CSM锁定。
0 DSP不安全,CSM被解锁。
在很多情况下需要使DSP不安全,下面是一些典型情况:
1)通过调试器(例如CCS)进行代码开发时。
2)用TI公司的烧写软件进行Flash烧写编程时。一旦用户提供了密码,烧写软件就使DSP中的安全逻辑失效,并开始对Flash编程。Flash烧写软件可以在没有密码的情况下使一个新DSP中的安全逻辑失效,因为新DSP中的Flash是擦除过的,其内容是全l。然而,对一个包含用户密码的DSP重新编程时则需要密码。
3)由应用程序确定的环境。例如,用片内的导引加载器编程Flash,或者需要在外部存储器或片内没有安全保护的存储器中执行代码,同时又需要对受保护的存储器进行查表操作时。建议一般不要这样做,因为从外部程序中提交密码会降低安全性。
为了使模块不安全,所有上述提到场合的操作方法都是一样的,此过程称为密码匹配流程(PMF),图2-6描述了该操作流程。PWF本质上就是一个从PWL中进行8次虚读(Dummy Read)并对KEY寄存器进行8次写的过程。
图2-6 密码匹配流程PMF
PMF在进行解除DSP的安全性操作时可能遇到两种情况:
【情况1】如果DSP在PWL处有密码,则须进行如下操作来解除安全保护。
①从PWL处进行8次虚读。
②写密码到KEY寄存器。
③如果密码正确,DSP就不安全了,否则DSP仍保持安全。(www.daowen.com)
【情况2】如果DSP没有密码保护,那么在PWL处应该是全1,那么须进行如下操作。
①从PWL处进行虚读。
②上面的操作完成后,DSP立刻就不安全了,可以随意对存储器进行操作。
说明:如果要解除存储器的安全保护,对存储器进行读写或编程前,不管DSP是否受到密码保护,一定要先进行虚读操作。虚读就是PWL中的内容实际上是不能读出的,执行读操作后读出的数据与PWL中真正的内容并不一致(全1和全0除外)。
例2-1 解除DSP对L0和L1 SARAM安全保护的C语言程序。
inti5,i;
volatileint ∗PWL; //PWL指针
PWL=&CsmPwl.PSWD0; //指向PSWD0处,即0x3F 7FF8处
for(i5=0;i5<8;i5++)i=∗PWL++; //进行8次虚读
//如果PWL=全1,以下代码对未保护的CSM是不必要的
//向关键字寄存器写密码
//asm(“EALLOW”); //密码寄存器受EALLOW保护,解除访问保护
//CsmReg.KEY0=PASSWORD0;
…
//CsmReg.KEY7=PASSWORD7;
//asm(“EDIS”); //恢复访问保护
重新保护的C代码为,
volatile int ∗PWL=0x0AE0; //CSM寄存器文件,设置FORCESEC位
asm(“EALLOW”); //CSMSCR寄存器受EALLOW保护
∗PWL=0x8000;
asm(“EDIS”);
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。