This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
CSM代码安全模块常见问题解答
该文档针对以下C2000设备系列上可用的CSM代码安全模块:
命名规则
-- CSM: Code Security Module 代码安全模块
-- ECSL: Emulation Code Security Logic 仿真代码安全逻辑
常见问题
设备出厂时,flash处于已擦除状态。在这种状态下,所有位置(包括密码)均为1(即0xFFFF)。
它是128-bit 的密码. 在flash内占连续的8 words。
当在密码位置写入全0时,这是一个永久锁定,没有擦除该密码的方法。
有关使用的特定设备的信息,请参见《系统控制和中断参考指南》的“ CSM”部分。有如下说明:
Do not use 128 bits of all zeros as the password. This automatically secures the device, regardless of the contents of the KEY register. The device is not debuggable nor reprogrammable.
如果知道密码,则可以解锁闪存并通过擦除扇区A来擦除密码。
不可以,擦除的最小单位为sector.
如果CSM被锁定,则在安全区域之外运行的代码将无法读取或写入任何安全位置。必须将CSM解锁或将代码重新定位到安全区域。
引导ROM本身是不安全的,并且引导ROM对CSM密码位置执行虚拟读取。
是的,您可以进入受保护的内存并开始执行代码而无需任何其他设置。注意:这与尝试通过数据或程序空间从Flash中读取值不同-这将被阻止。也就是说,即使CSM被锁定,在M0 SRAM中运行的代码(不安全)也可以branch到Flash中的代码。但是如果CSM被锁定,则执行完M0 SRAM的代码后将无法从flash中读取任何值。
请参阅特定设备的数据手册。CSM保护的内存将在内存映射部分中指出。
例如,如果L0显示“Secure Zone”,则它受CSM保护。
是的,这是预期的行为。在开发过程中很容易解决这个问题。您可以使用下面的解决办法:
在CCS中打开一个memory window,输入CSM密码。这将使CCS在您每次暂停或重置时读取密码。如果密码位置被删除(全部为0xFFFF),则将解锁CSM。
您可以在gel文件中放入Unlock_CSM(); gel文件会调用OnReset()函数以便在每次重置处理器时自动解锁CSM。即:
OnReset(int nErrorCode)
{
Unlock_CSM();
}
两种命令都可以。参考指南上是先对PWL进行虚拟读取,然后将密码写入KEY位置。其他一些示例可能以相反的顺序执行该操作(即加载KEY寄存器,然后对PWL进行虚拟读取)。
是。您需要构建SDFlash算法,以便它得到设备的密码并对其进行解锁。在下面的串行算法的自述文件中进行了描述::
http://emulators.spectrumdigital.com/utilities/sdflash/c2000/SDFlash_Serial_RefGuide_v3_3.pdf
常见ECSL 问题
在具有ECSL保护且不支持硬件等待重置模式的设备(例如Piccolo设备)上,如果该设备已锁定:
当设备加电时,CPU开始运行,并且会执行对ECSL保护区域的访问的指令。如果发生这种情况,ECSL将跳闸并导致仿真器连接断开。要解决此问题:
此时,您就可以继续进行操作并解锁设备了。