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.

[参考译文] TMS320F28379S:在 TMS320F28379S 上实现 DCSM 之后、代码未从闪存执行

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1506521/tms320f28379s-code-not-executing-from-flash-after-dcsm-implementation-on-tms320f28379s

器件型号:TMS320F28379S
Thread 中讨论的其他器件: SYSCONFIG、UNIFLASH

工具/软件:

                                我正在努力开发 TMS320F28379S、并尝试使用 DCSM 实现读取保护。 但是、启用 DCSM 后、在复位或下电上电后、我的应用程序代码不再从闪存运行。

采取的步骤:
1.i 使用 DCSM 示例 SysConfig 文件来:
    a)设置密码。
    b)区域1下的安全闪存扇区 C、D、E 和 F。(该区域安全)  
    C)使用 uniflash 将配置上传到控制器。

2.然后我按照这个过程:
    a)在 CCS 中已打开 Run→Debug Configurations→Target→Flash Settings。  
    b)输入密码、单击"应用"、然后启动调试会话。
    C)闪存被擦除,代码被上传,当我点击"播放"时,应用程序运行正确。
    d)但是、在电源关闭后或按重置按钮后、该代码不会运行。
    e)我还使用 Uniflash 对此进行了测试。 我首先使用密码解锁控制器、然后上传代码。

3.之后,我再次修改了 sysconfig 文件,将闪存扇区设置为 ExeOnly 模式(安全由这个区域(EXEONLY )),更新了 Z1链路指针,并刷新了新的配置。 然后尝试步骤2。

观察结果:
初始解锁(无复位)后、通过 CCS 上传应用程序就可以正常工作。
但在下电上电或复位后、它不会运行。
使用 UniFlash、使用正确的密码解锁并刷写了应用。 它会成功上传、但同样、它不会在上传后或重置后执行。

目标:
我要实施读取保护、以便:
      1.防止代码读出。
      2.仅在解锁后允许代码上传。
      确保在刷写和复位后、应用程序代码从闪存安全地运行。

在实现 DCSM 之前:
1.一切都很好。
2.代码从闪存正确运行。
3.BMODE 和 BMSP 设置已验证且正确。

请求:
有人请检查我的实现方法、 提供任何更正建议并帮助我解决启用 DCSM 后复位后应用程序无法从闪存运行的问题。

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

    您好:

    当您说代码不运行时、您到底看到了什么? 调试器是否断开连接? 代码似乎在某个地方遇到了断点吗?

    可能会发生以下两种情况之一:

    1) ECSL 保护:当程序计数器位于安全存储器区域时、只要发生调试停止或调试器尝试连接到器件、ECSL 保护就会生效。 复位器件将导致 DCSM 被锁定并激活 ECSL 保护。 若要使用启用了 DCSM 的调试器、必须使用"等待引导"模式而不是闪存引导、这样 ECSL 就不会导致调试器断开连接。

    2)您的代码在禁用 DCSM 时正常工作、不再正常工作、因为不安全区域中的代码正在尝试访问安全存储器。

    谢谢您、

    Luke

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

    您好 Luke、

    按照我的观察

    [引述 userid="515467" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1506521/tms320f28379s-code-not-executing-from-flash-after-dcsm-implementation-on-tms320f28379s

    观察结果:
    初始解锁(无复位)后、通过 CCS 上传应用程序就可以正常工作。
    但在下电上电或复位后、它不会运行。
    使用 UniFlash、使用正确的密码解锁并刷写了应用。 它会成功上传、但同样、它不会在上传后或重置后执行。

    [/报价]

    1.等待引导模式的用法是什么 、我需要从闪存运行应用程序代码。 因此、 我将 Get 引导至 FLASH 引导。

    2.如何查找不安全区域中的哪个代码部分访问安全区域中的代码我只实现了基本的 LED 闪烁代码。

    当您说代码未运行时、您确切地看到了什么? 调试器是否断开连接? 代码似乎在某个地方遇到了断点吗?

    我可以说、复位后代码未从闪存执行、解锁后使用 uniflash 上传代码时代码也是如此。

    但代码在解锁后使用 CCS 上传代码后运行。

    请提供我希望解决这个问题的内容和地点  

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

    您好:

    仅当启用了 DCSM 时、才等待引导用于调试。 即使应用程序代码入口点位于安全的存储器区域、它也允许您通过 JTAG 连接到器件。

    您可以通过修改引导模式选择引脚来临时选择等待引导。

    即使未连接 JTAG、LED 似乎也不闪烁。 您能否通过获取 Memory Browser 的屏幕截图、分享您在地址0x78000至0x78040处编程的值?

    谢谢您、

    Luke

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1.初始解锁(无复位)后、通过 CCS 上传应用程序工作正常。
    2.但在下电上电或重置后、它不会运行。

    您好、

    在 GrabRam GrabEXEonly 锁定(安全) B0Z1、B1Z1扇区0-7之后、我们有同样的问题 x49c MCU。 默认链路指针 LP (0x1FFFFFFF)不再与 DCSM 寄存器 LP 值(0xFFFFFFFF)匹配。 奇怪的是、在将 LP MSB 位28更改为 TRM 中规定的合法值后、B0Z1 (0x5F000)和 B0Z2 (0x5F100)会保持(0xFFFFFFFF)。 奇怪的是 、软复位后引导至闪存会运行伟大的 CCS 调试运行应用、在 GEL 代码解锁默认 CSMPWDKEY 后。 甚至可以在 UniFlash 软复位后(而不是 POR 或硬件复位后)启动至闪存。  

    尽管 似乎导致 GPIO 引导模式选择引脚被忽略;只要默认链路指针从0x1FFFFFFF 变为有效、DCSM 逻辑就会忽略 OTP 未编程(0x5F)、DCSM 寄存器 BOOTDEF = 0xFFFFFFFF 就会置位。 看似在默认情况下读取 OTP 位置后、引导模式引脚设置为出厂模式。 可能还有一种选择、使应用不在 GPIO 引脚上中继将0x5A 编程到如下所示的 OTP 中。

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

    您好 Luke、

    请查看下面提到的屏幕截图、并 针对此问题提供进一步的步骤或解决方案建议。

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

     还可以查看 DCSM 寄存器0x5F000、0x5F050并注意是否设置了任何链路指针错误标志位。 我们的引导问题最终与软件相关、删除了 CMD 部分#pragma、将函数加载到高速 LSRAM 中。 在调试时效果良好、不是在 POR 或硬复位时。

    花了一段时间来确定是因为#pragma 部分很多。  

    祝你好运。

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

    尊敬的 Genatco:

    或者还可以查看 DCSM 寄存器0x5F000、0x5F050并注意是否设置了任何链路指针错误标志位

    感谢您迄今为止的答复和帮助。

    我仍然面临着我的代码在 CCS debug 中运行正常的问题, 但在下电上电或 通过 UniFlash 进行硬件复位或刷写后不执行 、当启用 DCSM 时。

    根据您提到的、问题似乎可能是由于使用#pragma CODE_SECTION或通过.cmd文件放置在 LSRAM 中的函数或代码段所致。

    我对此还不熟悉、我不完全了解如何解决该问题。

    我的问题是:  

    1.是否有任何参考文档或链接 、如果您能指导我通过步骤解决此问题、我将不胜感激。

    DCSM 实现后、如何检查是否正确实现。

    3.现在使用 CCS 上传代码时执行 DCSM 后、代码仅在控制器处于 SCI 引导模式时转储、并且当控制器处于引导至闪存模式时收到低功耗模式错误。

    请查找之前的聊天内容、以供我的设置参考。

    再次感谢您的时间和支持!

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

    尊敬的 Rajamurugan:

    1.您可以查阅 TRM 中 Sysctrl 一章的 DCSM 部分、并在 E2E 上查找其他帖子、以检查是否遇到类似问题。

    2.您可以解锁 DCSM 并查看 OTP 位置(0x78000至0x783FF)以检查是否已编程正确的 OTP 值。

    3.如果您通过 DCSM 保护了闪存、那么在闪存引导模式下将无法通过 JTAG 连接。

    谢谢您、

    Luke

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

    您好 Luke、

    我的问题已解决

    我已经部分保护了所使用的闪存、并使一些已使用的闪存不受保护  

    我已使用"View"->"Memory Allocation"进行检查、然后在下电上电后确保正确执行代码。