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.

[参考译文] TMS320F280025C:在 DCSM 保护器件之后、程序在重新上电后无法运行

Guru**** 2399305 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1252618/tms320f280025c-after-secure-the-device-by-dcsm-the-program-cannot-run-after-repower-on

器件型号:TMS320F280025C

大家好、

这是我的客户的 DCSM 配置、此配置基于我正在使用的  dcsm_security_tool 和相关文档 spracp8a_C2000 DCSM 安全工具(修订版 A)

他们还分配了 闪存扇区14 15 至  区域1 ,这意味着他们已经分配了  GRABRAM  和  GRABSECT

具体现象是、在填充密码后、使用 JTAG 进行的仿真正常运行。 但在重新加电后、程序不能单独运行。 他们已将密码更改为他们在中设置的密码  凝胶  文件 Setup_DCSM () 停止。

客户认为程序卡在引导 ROM 中、导致程序开始时 LED 闪烁、无法正常工作。

--

谢谢、此致

耶鲁

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

    +++

    添加信息

    客户表示这个程序可以在安全的全屏区之后运行。

    但当仅保护几个扇区时无法实现。

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

    您好!

    客户表示该程序可以在安全的所有部门后运行。

    基于以上评论、我认为整个用户代码在闪存中。 请确认在执行时 ZONE1仍受保护? 进行访问所需的任何代码都驻留在相同的区域中、由于应用程序将在该区域中运行。  

    ,但不能仅保护多个扇区。

    原因可能是从不安全的闪存扇区尝试读取安全闪存扇区(在您的系统中为扇区14/15) 进行访问、由于程序可能未在运行、该扇区是不允许的。 请检查链接器命令文件 、以确保程序中的所有访问按预期进行、而不会违反任何安全规定。  

    希望这对您有所帮助

    谢谢、此致

    普拉莫德

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

    谢谢 Pramod

    是的,我的所有程序都在闪存中,我使用 dcsm_unlockZone1csm()函数在主函数初始化 PLL 后执行 zone1解密,但它在重新加电后仍不会脱机运行

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

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

    您好!

    与 您之前的帖子中 SYSCFG 快照中编程的 PSWD 相比、我看到提供给区域 CSMKEY 的密钥不同。 请检查这是否是 rootsource。  

    当您说"所有程序都在闪存中"时、请检查这些程序是否都在安全闪存区域中。 当我要求您检查您的链接器命令配置以查看是否有无法被安全阻止的访问时、这就是我的意思、安全会使您的应用程序在独立运行时中断。  

    谢谢、此致

    普拉莫德  

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

    谢谢 Pramod

    很抱歉误导了你,因为我没有保留以前密码的屏幕截图,它导致密码在两张图片上看起来不同,我可以确认我输入的密码是好的。 所有程序都存储在闪存中、但只有扇区14和扇区15受保护、非安全区域代码访问安全区域代码存在问题、因此我在程序开始时调用了解锁函数、 如果我使用程序中的解密功能没有问题,我一开始就做了解密,之后访问受保护区域应该没有问题,但它仍然不能脱机工作

    谢谢、此致

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

    如您所说、访问链接文件中的受保护区域代码确实存在问题。 当我在程序开始时调用解锁功能时、我不明白为什么无法完成受保护区域的解锁。 仅部分扇区受到保护、并且链接文件中有代码可以访问安全扇区、在这种情况下、如何解锁安全区域?

    谢谢、此致

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

    您好!

    感谢您确认您输入的密钥。 我在这里看到的是、代码中有两个区域。 一个是闪存扇区14和15中代码的安全区域。 闪存/RAM 其余部分中的其余不安全代码、我认为对于您的安全设置不安全。  

    现在、允许代码的不安全部分从代码中允许的安全部分执行代码。 但是、在此执行期间、不允许从代码的不安全区域到代码的安全区域进行读取/写入。 现在、这可以是您的应用局部变量/全局变量/栈等。任何其他可能位于代码的不安全区域的程序初始化代码。 另外、 根据本文之前的回答、如果所有闪存扇区都是安全的、则代码工作正常(请确认仅闪存扇区是安全的、或者您甚至保护了 RAM)。 这确切地表明了在代码执行的某个位置、存在从不安全的闪存/RAM 到闪存安全区域的读取访问(由于目标存储器是闪存、因此无法进行写入)。

    我建议您逐步修改链接器、方法是将一个段从不安全区域依次移到安全区域。 这将使您能够识别导致此受限写入的实际是代码的哪一部分。 然后、您 也可以将相应的段移动到安全区域、或者恰好在发生相应的写入到安全区域之前交替解锁该区域。  

    希望这是合理的。  

    谢谢、此致

    普拉莫德

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

    谢谢 Pramod

    可以、在所有闪存扇区都受保护(无 RAM 受保护)的情况下、程序可以离线运行。
    我在主要功能开始时解锁了安全区、为什么它不工作?

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

    我目前正在测试的代码是引导程序、它主要存储在扇区0至4中、但也分配扇区15的内容。 我仅保护了扇区14和15、因此它是访问安全区代码的非安全代码

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我目前测试的代码是引导程序,它主要存储在扇区0到4,但也分配扇区15的内容。 我只保护扇区14和15,所以它是访问安全区代码的非安全代码

    我认为、只要您的不安全代码从安全区域执行函数、甚至都不需要解锁。 仅当区域被锁定时、不安全代码尝试在安全区域内读取/写入代码时、才会出现该问题。 (我认为这是打破你的计划的原因)。  

    我在主函数开始时解锁了安全区,为什么它不起作用?

    我认为它一开始甚至还没有到达主代码。 有些编译器相关代码将在进入 main 之前执行、main 负责初始化代码中使用的栈和全局变量。 请在复位后尝试在将器件连接到调试器时暂停器件。 您可以考虑在 GEL 文件中解锁区域。 您应该能够在主代码处停止、然后尝试进行单步调试、看看代码执行的执行过程会持续多久。  

    谢谢、此致

    普拉莫德

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

    感谢您的耐心。
    我在 GEL 文件中的 Setup_DCSM 函数中更改了正确的密码、并重新烧写、但仍然无法离线运行!

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

    在代码未运行的情况下、您能否确认是否能够连接到 CCS 上的目标? 如果不是、请在代码中解锁 ECSL 来尝试一次。  

    无论是哪种方式、请分享您的 DCSM 设置、以及您的项目与伪代码。 我将在下周结束前的某个时候检查一下、并了解任何结果。   

     

    谢谢、此致

    普拉莫德

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

    很抱歉打扰到你普拉莫德

    另一个新问题:我的所有程序被放在闪存中,以前我加密了所有闪存扇区,程序可以脱机运行。 但是、在我更改了 ZSB 并重新加密所有闪存扇区后、这次程序无法正确离线运行。 两个加密操作都是通过 Zone1完成的

    谢谢、此致

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

    您好!

    在更改 ZSB 时、除了将所有闪存扇区安全保护为 Zone1之外、还修改了哪些其他 DCSM 设置?  此外、请分享您所做的第2区设置、以查看是否存在会阻止从闪存位置执行的任何配置。 此外、请尝试通过在应用代码开头解锁 ZONE1来执行该程序、以查看它是否起作用。  

    注:我在一周的剩余时间内休假、在接下来的一周内可以提供支持。 请期待我的答复出现延迟。  

    谢谢、此致

    普拉莫德  

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

    好的,去吧。有一个美好的假期。普拉莫德

    ZONE2保持默认配置。我尝试将程序放入以开始解锁、但它不起作用。

    最后一个图像是 zone1标头配置。期待您的响应

    谢谢、此致

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

    您好!

    请您确认程序是否在非工作案例中进入了主要功能? (您可以放入一个 while 循环、并不断切换 GPIO 以确认相同情况)。 我认为这可能是你的问题的根源。

    此外、当您说 Zone2保持默认配置时、请确保 Zone2的抓取设置为 "10而不是11"。  

    请分享您的完整安全设置和伪应用代码(如果需要、您可以移除实际应用并使用一些虚拟例程替换) 这样、我就能更好地了解为何应用程序不能在特定配置下运行以及为何在特定配置下运行。  

    只是想知道您不打算通过保护所有资源(适用于您的情况下的所有闪存扇区)来继续推进。 它也可能是安全的、这更可取。   

    谢谢、此致

    普拉莫德  

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

    谢谢 Pramod

    我在主函数中使用 GPIO 对其进行了测试、而没有转至主函数。

    对一些闪存扇区进行加密是我做过的一个小小的测试。
    现在新问题:加密所有扇区后,程序无法脱机运行


    补充说明:控制板为闪存引导、通过在硬件中上拉 GPIO24和 GPIO32、引导模式为闪存引导、在使用 DCSM 之前、控制板通电、GPIO32和 GPIO24都为高电平、在使用 DCSM 加密所有闪存扇区之后、32为高电平、 24为低电平、可能因此无法从闪存引导、如何解决此问题?
    以下是我的 DCSM 详细配置信息(所有扇区都已加密)

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

    您好!

    让我们退一步处理这个问题。 我建议您按照该顺序查看程序中断的位置。  

    1.在不配置任何 DCSM 设置的情况下运行应用程序。 (捕捉位、区域被解锁)。  我相信你已经在运行,它是正常的。  

    2. 通过配置除密码之外的所有 DCSM 设置来运行应用程序。 请将它们保留为 CSM 默认密码。 (这样做的原因是、根据链接指针、bootROM 将在这种情况下自动解锁区域、因为它是默认密码。  

    3.通过配置包括自定义 Z1 CSM 密码在内的所有 DCSM 设置来运行应用程序,您打算进行编程,但将 ZONE2保留为默认值并解锁。 这是我认为您的应用程序 无法运行的地方。  

    我对上面的2个案例很好奇、想确定这是否真的是 DCSM 设置的问题。 根据这些快照、DCSM 配置运行良好。  

    谢谢、此致

    普拉莫德