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 和闪存问题

Guru**** 1831610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/939603/faq-common-csm-and-flash-questions

有时设备可能会意外锁定。  本常见问题解答解决了一些常见的原因。

C2000培训视频:https://training.ti.com/search-catalog/field_language/ZH-CN?keywords=C2000&start%5Bdate%5D=&end%5Bdate%5D=

C2000培训小程序码

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    代码安全模块(CSM)简介

    CSM 记录在特定器件的系统控制和中断指南中。 本页是指以下 C2000器件系列上提供的代码安全模块:

    命名规则

    • CSM:代码安全模块
    • ECSL:仿真代码安全逻辑
    • 密码位置:CSM 密码是一个存储在8个闪存字中的128位值。 密码地址指的是这8个字。

    CSM 出现安全性的原因

    在5种不同的情况下、CSM 要么是安全的、要么是安全的:

    1. 密码匹配流程尚未完成
    2. CSM 已被有意地编程为密码
    3. CSM 已在不知情的情况下使用密码进行编程
    4. 通过将所有零编程到密码位置、CSM 已经被永久保护
    5. 由于 VDD3VFL 电源信号不存在、闪存未通电

    上述条件的解决方案如下:

    1. 针对所使用的特定 TMS320F28xxx 器件、按照《系统控制和中断参考指南》的 CSM 部分中描述的方法运行密码匹配流程。 通过选择 GEL -> Code Security Module -> Unlock_csm ()、可以从 CCS 内的器件 GEL 文件中轻松使用此功能。
    2. 使用之前编程到 CSM 的密码解锁 CSM。 《TMS320F28xxx DSC 的闪存编程解决方案》(SPRAAL3)应用手册中讨论了使用 CCS 片上闪存编程器解锁 CSM 的过程。
    3. 编程到闪存的前一个.out 文件可能包含写入密码位置的数据。 在本例中、CCS 提供的十六进制转换实用程序可用于将.out 文件转换为十六进制格式、并确定将哪些数据写入密码位置。 然后、这些值可被用于解锁 CSM。 如果这个.out 文件没有显示写入密码位置的数据或者.out 文件不可用、那么闪存不能解锁并且芯片应该被更换。
    4. 无法解锁 CSM、因为所有零都永久地保护 CSM。 CSM 本可以被永久锁定在目的上、也可以是电源故障的结果、也可以是通过在前一编程周期中停止擦除过程来实现的。  SPRAAL3对此进行了进一步讨论
    5. VDD3VFL 信号要么不存在、要么没有为 闪存提供一个干净的电源轨、从而导致闪存不受电。 这需要在目标板上进行纠正。  SPRAAL3对此进行了进一步讨论。 如果设备在插槽中,请确保设备正确就位并连接良好。

    在任何这些情况下、如果 CSM 是安全的并且密码未知、则无法解锁以重新编程。

    停止擦除操作

    如果擦除操作被中断且不允许完成、闪存可能会被耗尽。 发生这种情况时、器件可能会开始无法擦除。 擦除算法不应被停止、这也会影响 CSM 密码。 如果密码处于未知状态、则无法恢复设备。 这也会使 CSM 中的所有零产生永久锁定。 TMS320F28xxx DSC 的闪存编程解决方案(SPRAAL3)应用手册中对此进行了进一步讨论。

    CSM 常见问题

    问:CSM 自动锁定的情况是什么? 它是确定性的吗?

    • 如果一个密码被编程到闪存中、CSM 在复位时被锁定并且保持这种状态直到密码匹配流程被执行(请参阅针对特定器件的系统控制和中断指南)。
    • 如果一个应用已经解锁器件、它可以通过向 CSMSCR 寄存器中的 FORCESEC 位写入1来强制重新锁定。

    问:为什么所有0xFFFF 都不安全?

    当器件出厂时、闪存处于擦除状态。 在此状态下、包括密码在内的所有位置都为1 (即0xFFFF)。

     

    问:有多少个密码?

    有一个128位密码。 它占用闪存中的8个连续字。

     

    问:在所有零都被写入密码位置后、如何解锁 CSM?

    当所有零写入密码地址时、这是一个永久锁定、没有方法可以擦除此密码。 这在针对所使用的特定器件的系统控制和中断参考指南的 CSM 部分中进行了记录。 本节提供以下说明:

    不要将128位全为零的密码用作密码。 这会自动保护器件、而不管 KEY 寄存器的内容如何。 该器件既不可调试、也不可重新编程。

     

    问:是否有任何方法可以删除密码?

    如果您知道密码、则可以通过擦除扇区 A 来解锁闪存并擦除密码

     

    问:是否有任何方法可以在不擦除所有扇区 A 的情况下擦除密码?

    否 可被擦除的最小内存量是一个扇区。

     

    问:在非安全存储器中运行的代码无法读取/写入安全存储器或闪存-为什么?

    如果 CSM 被锁定、那么在安全区域之外运行的代码将无法读取或写入任何安全位置。 CSM 必须被解锁或者代码必须被重新定位至其中一个安全区域。

     

    问:CSM 是否会阻止在引导 ROM 中运行的引导加载程序?

    引导 ROM 本身不安全、引导 ROM 执行 CSM 密码位置的虚拟读取。

    • 如果未对器件密码进行编程、则这将解锁 CSM、引导加载程序将能够写入安全存储器。
    • 如果器件密码已编程、则 CSM 将保持锁定状态。 在这种情况下、引导加载程序将无法写入安全存储器。 一个选项是在安全存储器(如. x)中的应用程序中提供您自己的加载程序 闪存)。 使用此加载程序、您将能够加载到安全存储器中。

    Q:代码在 CSM 受保护区域之外运行、CSM 被锁定。 它能否分支到 CSM 受保护存储器内的代码?

    是的、您可以分支到受保护的存储器中并开始执行、而无需任何额外的设置。

    注意:这与尝试通过数据或程序空间从闪存读取值不同-这将被阻止。 例如、即使 CSM 已锁定、在 M0 SRAM (不安全)中运行的代码也可以分支到闪存中的代码。 如果 CSM 被锁定、从 M0 SRAM 运行的代码将不能从闪存中读取任何值。

     

    问:如何判断哪些存储器受 CSM 保护?

    请参阅特定器件的数据手册。 受 CSM 保护的存储器将在存储器映射部分中指示。 例如、如果 L0显示"安全区域"、则它受 CSM 保护。

     

    问:每次我通过 Code Composer 复位器件时 CSM 都会锁定。 这是预期行为吗? 是否有解决方法?

    是的、这是预期行为。 在开发过程中很容易解决这个问题。 您可以执行以下两项操作之一。

    1. 在 CCS 中打开 CSM 密码的存储器窗口。 这将强制 CCS 在每次暂停或复位时读取密码。 如果密码位置被擦除(全部为0xFFFF)、那么这将解锁 CSM。
    2. 在 GEL 文件中、将 unlock_csm();GEL 调用放入 OnReset()函数中、以便在每次处理器复位时自动解锁 CSM。 即:
    1
    2.
    3.
    4.
    OnReset(intnErrorCode)
    {
       Unlock_CSM();
    }

    问:要解锁 CSM、虚拟读取是首先进行的还是首先加载密钥寄存器?

    任何一个订单都可以正常工作。 参考指南说明先执行 PWL 虚拟读取、然后将密码写入密钥位置。 其他一些示例可能以相反的顺序执行它(即加载 KEY 寄存器、然后对 PWL 进行虚拟读取)。

     

    问:如果器件受密码保护、是否可以使用 SDFlash 通过串行端口对其进行编程?

    是的。 需要构建 SDFlash 算法、使其知道器件的密码并可以解锁。 这很容易实现、并在串行算法的自述文件中进行了说明: http://emulators.spectrumdigital.com/utilities/sdflash/c2000/SDFlash_Serial_RefGuide_v3_3.pdf

    ECSL 常见问题解答

    问:当我尝试连接到锁定的器件时、为什么 Code Composer Studio 会给我一个仿真器错误?

    在具有 ECSL 保护且不支持硬件复位等待模式的器件(例如 Piccolo 器件)上、如果器件被锁定:

    器件上电后、CPU 将开始运行、并可能执行访问 ECSL 受保护区域的指令。 如果发生这种情况、ECSL 将跳闸并导致仿真器连接断开。 要解决此问题:

    1. 断开仿真器。
    2. 将引导引脚设置为"等待"引导模式。 注意:在2833x/2823x 上、这被记录为"要检查的循环"引导模式。
    3. 重置设备。
    4. 重新连接仿真器。

    此时、您应该能够继续并解锁设备。