CSM代码安全模块常见问题解答
该文档针对以下C2000设备系列上可用的CSM代码安全模块:
- F28M35x
- 2806x
- 2802x
- 2803x
- 2833x
- 2823x
- 280x
- 281x
命名规则
— CSM: Code Security Module 代码安全模块
— ECSL: Emulation Code Security Logic 仿真代码安全逻辑
常见问题
Q: CSM 自动锁定的情况是怎样的?
- 如果将密码编程到flash中,则CSM会在复位时锁定,并保持这种状态,直到执行密码匹配流程为止(请参阅特定设备的系统控制和中断指南)。
- 如果应用程序已解锁设备,则可以通过向CSMSCR寄存器的FORCESEC位写入1来强制重新锁定。
Q: 为什么全是0xFFFF's 是不安全的?
设备出厂时,flash处于已擦除状态。在这种状态下,所有位置(包括密码)均为1(即0xFFFF)。
Q: 密码password有多少位?
它是128-bit 的密码. 在flash内占连续的8 words。
Q: 将全零写入密码位置后,如何解锁CSM?
当在密码位置写入全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.
Q: 是否有擦除密码的方法?
如果知道密码,则可以解锁闪存并通过擦除扇区A来擦除密码。
Q: 是否可以只擦除密码而不擦除全部扇区A?
不可以,擦除的最小单位为sector.
Q: 为什么在不安全的内存中运行的代码无法从安全内存或flash中读取/写入?
如果CSM被锁定,则在安全区域之外运行的代码将无法读取或写入任何安全位置。必须将CSM解锁或将代码重新定位到安全区域。
Q: CSM是否会阻止在引导ROM中运行的引导加载程序boot loader?
引导ROM本身是不安全的,并且引导ROM对CSM密码位置执行虚拟读取。
- 如果未设置设备密码,则它将解锁CSM,引导加载程序将能够写入secure memory。
- 如果对设备密码进行了编程,则CSM将保持锁定状态。在这种情况下,引导加载程序将无法写入secure memory。可以尝试在secure memory(例如Flash)中的应用程序中提供自己的加载程序loader。使用此加载程序,您将可以加载到secure memory。
Q: 代码正在CSM保护区之外运行,并且CSM已锁定。它可以branch到受CSM保护的内存中的代码吗?
是的,您可以进入受保护的内存并开始执行代码而无需任何其他设置。注意:这与尝试通过数据或程序空间从Flash中读取值不同-这将被阻止。也就是说,即使CSM被锁定,在M0 SRAM中运行的代码(不安全)也可以branch到Flash中的代码。但是如果CSM被锁定,则执行完M0 SRAM的代码后将无法从flash中读取任何值。
Q: 如何确定CSM保护哪些内存?
请参阅特定设备的数据手册。CSM保护的内存将在内存映射部分中指出。
例如,如果L0显示“Secure Zone”,则它受CSM保护。
Q: CCS每次重置设备时,CSM都会锁定。这是预期的行为吗?有没有解决的办法?
是的,这是预期的行为。在开发过程中很容易解决这个问题。您可以使用下面的解决办法:
在CCS中打开一个memory window,输入CSM密码。这将使CCS在您每次暂停或重置时读取密码。如果密码位置被删除(全部为0xFFFF),则将解锁CSM。
您可以在gel文件中放入Unlock_CSM(); gel文件会调用OnReset()函数以便在每次重置处理器时自动解锁CSM。即:
OnReset(int nErrorCode)
{
Unlock_CSM();
}
Q: 要解锁CSM,首先读取虚拟读取还是首先加载KEY寄存器?
两种命令都可以。参考指南上是先对PWL进行虚拟读取,然后将密码写入KEY位置。其他一些示例可能以相反的顺序执行该操作(即加载KEY寄存器,然后对PWL进行虚拟读取)。
Q: 如果受密码保护,是否可以使用SDFlash通过串行端口对设备进行编程?
是。您需要构建SDFlash算法,以便它得到设备的密码并对其进行解锁。在下面的串行算法的自述文件中进行了描述::
http://emulators.spectrumdigital.com/utilities/sdflash/c2000/SDFlash_Serial_RefGuide_v3_3.pdf
常见ECSL 问题
Q: 当尝试连接锁定的设备时,为什么CCS会给我一个emulator错误?
在具有ECSL保护且不支持硬件等待重置模式的设备(例如Piccolo设备)上,如果该设备已锁定:
当设备加电时,CPU开始运行,并且会执行对ECSL保护区域的访问的指令。如果发生这种情况,ECSL将跳闸并导致仿真器连接断开。要解决此问题:
- 断开仿真器的连接。
- 将启动引脚设置为“ WAIT”启动模式。注意:在2833x / 2823x上,标记为“loop to check”引导模式。
- 重置设备。
- 重新连接仿真器。
此时,您就可以继续进行操作并解锁设备了。
Annie Liu:
我们建议您在发布新问题之前先搜索 E2E支持论坛,E2E支持论坛已经拥有数十万个已得到解答的话题。 这通常是解决问题的最快方法。