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.

[参考译文] TMS320F28375D:在启用 DCSM 的情况下、通过 C2000上的 EMIF 进行自编程

Guru**** 2413160 points
Other Parts Discussed in Thread: C2000WARE, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1365591/tms320f28375d-self-programming-via-emif-on-a-c2000-with-dcsm-enabled

器件型号:TMS320F28375D
主题中讨论的其他器件:C2000WAREUNIFLASH

尊敬的专家:

我的客户使用 F28375D 创建了定制电路板。
当他们在启用了 DCSM 的 C2000上通过 EMIF 执行自编程时、软件重写失败。
TI 提供的闪存 API 用于自编程、并且除非启用了 DCSM、否则可以执行自编程而不会出现任何问题。

问:使用启用了 DCSM 的 FlashAPI 执行自闪存时、是否需要任何设置或预防措施?

[DCSM 设置]

  • Z1-LinkPointer1~3保持在默认值0xFFFFFFFF
  • 将所有 Z1-CSMPSWD0~3设置为0xFFFFFFF1
  • 将 Z1-GRAMPSECT 设置为0x0AAAAAAA
  • 将 Z1-GRABRAM 设置为0x10005555
  • *除上述情况外,保留为默认值

他们尝试使用示例源来设置以下寄存器、该示例源支持使用 DCSM 作为参考进行自编程、但这并没有改善这种情况。
c2000\C2000Ware_5_01_00_00\device_support\f2837xd\examples\cpu1\flash_programming_dcsm\cpu01/flash_programming_dcsm_cpu01.c

  • DcsmCommonRegs.FLSEM = 0xA501;
  • Flash0EccRegs.ECC_ENABLE_bit.enable = 0x0;

自编程期间、DSP 从获取模式启动。

此致、
o h

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

    您好。 H、

    当与一个存储器区域相对应的 GRABRAM/GRABSECT 位被编程为"10"并且该区域被锁定时、该存储器区域将无法访问:

    谢谢!

    卢克

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

    Luke、您好!

    感谢您的答复。

    您能告诉我如何解决它吗?
    例如、我们可以通过参考 TRM 的以下章节并整合发布代码来解决这个问题吗?
    ・3.13.3.2 CSM 密码匹配流程
    ・3.13.3.3具有和不具有代码安全的区域的取消保护注意事项
    将・3.13.3.3.1 C 代码示例更改为取消保护 C28x Zone1

    如果有其他方法、请告诉我。

    此致、
    o h

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

    您好。 H、

    您可以通过更新 LINKPOINTER 并将 GRABSECT/GRABRAM 字段重新编程为正确的值来解决此问题。

    以下视频系列介绍了 LINKPOINTER 概念以及 DCSM 概述:

    https://www.ti.com/video/series/C2000-dual-code-security-module.html

    谢谢!

    卢克

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

    Luke、您好!

    这是否意味着以下方法是唯一的选项?
    通过更新 LINKPOINTERT 来更新 GRABSECT/GRABRAM 以解锁 DCSM→通过 EMIF 更新固件→更新 GRABSECT/GRABRAM 以锁定 DCSM

    此致、
    o h

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

    嗨、O.H.

    您要更新的固件是位于安全还是不安全的存储器中? 如果位于安全存储器中、则在通过 EMIF 进行编程之前仍需要解锁 DCSM。 否则、将您希望编程为不安全的所有位置指定为可解决问题。

    谢谢!

    卢克

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

    Luke、您好!

    感谢您的答复。

    以下是客户的意见。
    ============================

    一个自编程功能被放置在 RAM 中。 整个 RAM 和闪存区域设置为安全区域。

    作为参考、下面是自编程步骤。
    ​​在下面的步骤7中、校验和值不匹配。

    1. 打开电源并启动设备(从 Getmode 启动)。 初始化完成后、进入正常例程。
      此时、RAM 中还放置了一个自编程功能。
    2. 通过 EMIF 发送一条执行自编程的命令。
    3. 分支到自编程处理
    4. 将 FLSEM 全部设置为0xA501。 将 Flash0EccRegs.ECC_ENABLE_bit.enable 设置为0x0。
    5. 删除特定闪存扇区
    6. 通过 EMIF 读取数据并进行重写。
    7. 关闭电源、将 DSP 设置为 WaitBoot 模式、并使用 UniFlash 执行校验和。

    我将验证更新 LINKPOINTER、但请允许我进一步确认这一点。

    Q2:更新 LINKPOINTER 时、是否可以将相同的 LINKPOINTER 地址设置为非安全、执行自编程、然后将其设置为安全?
    例如:将 Z1-LINKPOINTER1更改为 Z1-LINKPOINTER2→执行自编程→写入 ZoneSelectBlock2
    如果有任何有关在不使用 Uniflash 或 CCS 的情况下使用 C 代码设置 secure (写入 ZoneSelectBlock)的参考信息、请告诉我。

    Q3:由于 LINKPOINTER 只有29位有效、这是否意味着在一个器件上最多可以进行29个安全设置?

    此致、
    o h

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

    您好。 H、

    客户是否使用了安全复制代码功能?

    谢谢!

    卢克

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

    Luke、您好!

    当前设置不使用 EXEONLY 闪存/RAM。

    这是否意味着需要"安全复制代码"?
    如果是、您能告诉我原因吗?

    此致、
    o h

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

    您好。 H、

    如果正在执行向安全闪存复制和写入存储器的功能存储在非安全存储器中、那么这可能是导致问题的原因。 什么代码正在将您的代码复制到闪存中?

    谢谢!

    卢克