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.

[参考译文] CCS/TMS320F2.8377万D:闪存在安全模式下出现故障

Guru**** 2587745 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/660432/ccs-tms320f28377d-flash-memory-fails-in-secure-mode

部件号:TMS320F2.8377万D
主题:controlSUITE中讨论的其他部件

工具/软件:Code Composer Studio

尊敬的专家:

我正在6.1 环境中调试F2.8377万D。 我有将8个字编程到CPU2闪存的代码。 我使用controlSUITE device_support V200中的闪存API示例程序(但下载了最新的F021库)。 在非安全模式下进行调试时,写入闪存将正常。 但是,当我对CSM进行编程并锁定设备时,编程失败。 其他代码在安全时运行正常。

闪存编程例程在安全RAM区域D1中运行,要写入的扇区为L,即从0xBA000开始。 整个闪存也被设置为安全,即Z1_GRABECT中有代码0x15.5555万,Z1_GRABRAM中有代码0xD0.5555万。 我有默认的Z1区域,即所有F的链接指针。

闪存编程说明指出,如果编程代码和闪存都是安全的,则写入不需要解锁。 但是,我也尝试了一个版本,在调用F021例程之前运行解锁例程,但结果仍然不成功。

出于某种原因,在非安全模式下成功写入之前,我还需要两次后续的闪存擦除F021调用。 安全版本中也包含这些内容。 我想优化级别在这里没有任何重要性,因为库函数中的所有内容都已完成? (我的-O 1和速度与大小为5),时钟频率为180MHz。

我找不到关于闪存ECC内存范围安全/不安全设置的任何提及,所以我猜它无关紧要? 我刚刚注意到,如果我使用的闪存写入示例不包括CPU2的ECC,则CPU1从CPU2接收到启动错误,因此我需要使用ECC写入版本。

有什么想法出错了吗? 设置安全锁时调试相当困难,因此我需要专家的意见!

此致,

Jouko

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

    为了避免zone1和zone2之间的冲突,DCSM寄存器中提供了信号量(FLSAM)来配置Flash寄存器(有关此寄存器的更多详细信息,请检查TRM)。 在初始化闪存并调用闪存API函数之前,用户应用程序应配置此信号寄存器。 请检查您是否配置了此项。 我将请我们的安全专家查看此帖子。

    另请参阅此维客 :processors.wiki.ti.com/.../C2000_Flash_FAQ
    请搜索"当Flash API擦除或编程失败时,我们可以考虑哪些常见调试提示?" 在Wiki中。 它提到应检查FLSEM配置。

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

    我只激活了zone1 (即所有z2设置都是0xFFFFFFFF),所以我想知道是否会发生冲突?
    我有另一个没有激活安全码的主板,并在那里检查FLSEM是0,它没有被更改(它似乎也是重置默认值)。
    由于调试方面的困难,无法检查安全板中的情况(我可能需要添加一个
    额外的主板开关,允许更轻松地从闪存模式更改启动等待/启动,以便我可以解锁
    设备或安全运行),但由于FLSEM在我的代码中未更改,它可能保持在0?

    我也尝试查看其他常见问题。

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

    Juko,

    您需要将FLSEM值设置为'1'以启用Zone1的闪存编程操作。

    请进行此更改,它应该可以解决此问题。

    此致,

    Vivek Singh

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

    首先是关于手册版本的问题,因为我有一个版本spruhm8e.pdf (2015年9月),它对FLSEM字段的描述略有不同,即当SEM=00时,"...注册表可以由从任何位置运行的代码写入,不受任何限制"。
    我提出这一问题是因为这一添加似乎没有什么区别(我仍然需要验证它-这一观察基于我的代码行为,但我需要焊接开关以更容易在启动模式之间切换, 并能够转到调试器进行检查)。 也许新手册也有其他更改。

    我还从示例代码中添加了ECC禁用指令,但由于我的芯片版本较新,
    正如预期的那样,它并不相关。

    FLSEM也有关键字段。 我先写了,然后写了SEM字段。 也许它们需要在同一个周期中编写??

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

    Jouko,您好!

    [引述]首先问一个关于手册版本的问题,因为我有一个版本spruhm8e.pdf (2015年9月),它对FLSEM字段的描述略有不同,即当SEM=00时,"...可通过从任何位置运行的代码写入寄存器,不受任何限制"。 [/引述]

    你是对的。 我们修改了新文档中的描述,因为它有点令人困惑,因此有些用户没有抓住信号来进行安全闪存操作(如您所提到的)。

    [引述] FLSEM也有关键字段。 我先写了,然后写了SEM字段。 也许它们需要在同一个周期中编写?? [/引述]

    正确。 键值和信号值需要一起写入(例如 0xA501)。

    此致,

    Vivek Singh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢Vivek和Vamsi,他们解决了问题。 我应该加载更清晰的新手册。 样本程序中有一个用于闪存泵卡滞的命令,但它只在两个芯之间切换,而不是在区域之间切换!

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

    Jouko,您好!

    没问题。 很高兴问题得到解决。 闪存泵信号与此不同。 我假设您所引用的示例程序不能保护设备,因此它不能切换闪存信号。

    此致,

    Vivek Singh