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.

[FAQ] CSM代码安全模块常见问题解答

CSM代码安全模块常见问题解答

 

该文档针对以下C2000设备系列上可用的CSM代码安全模块:

 

命名规则

-- 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”引导模式。
  • 重置设备。
  • 重新连接仿真器。

 

此时,您就可以继续进行操作并解锁设备了。