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.

[参考译文] TMS320F28379D:电源复位后从闪存运行双核代码

Guru**** 2574255 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1269934/tms320f28379d-dual-core-code-run-from-flash-after-reset-of-power

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

我尝试为我的应用使用两个内核的 CPU 1和 CPU 2。 我的 CPU 1运行 PWM、ADC 和其他外设的所有代码。 但是、我也将在 CPU 2中读取 ADC 结果寄存器、并将其用于短路保护(这是一项时间关键型任务)。 我想让 CPU 1和 CPU 2的代码都在闪存上运行。 当我在各自 CPU 的闪存中转储代码时、它就会这样做。 但是、如果我将电源重置到 DSP (即关闭然后再次打开)、CPU2将无法实现预期的行为。 我的预期行为是指在 CPU2的代码中、我已在主函数中切换 GPIO 并将其设置为高电平。 在复位时、当我观察到示波器中 GPIO 的状态时、我没有看到它为高电平。

注意:我在复位后没有连接调试器。 我的要求是一次性转储代码、即使在复位后、它也应从两个内核运行。

如果有人能对此提供帮助、那就足够了。

 

谢谢。

南普拉兰布克

(Hind 整流器高级研发工程师)

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

    Prarambhik,

    我建议查看其中一个双核 C2000Ware 示例、它们设置为从闪存运行。  最可能的情况是、如果您看不到项目是独立运行的、那么代码的起始点没有正确映射到闪存引导的引导位置。  我会为两个 CPU 示例查看.cmd 文件、因为它们将具有正确的映射。  

    其中一个示例的路径如下:C:\ti\c2000\C2000Ware_5_00_00_00\driverlib\f2837xd\examples\dual\memcfg\

    此致!

    马修

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

    Matthew 您好!

    我找不到您当前引用的示例。 可能是因为我的 C2000ware 版本低于5.0.0.0。 我附上了我在您提到的路径中找到的内容的屏幕截图。 是否有任何其他相同的基准。

    谢谢。

    Prarambhik

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

    Prarambhik,

    感谢更新、您可以使用 LED 文件夹中的示例1、我已选中、它具有类似的配置详细信息。  似乎有一个针对 CPU1的 FLASH_Standalone 的构建配置、我会使用这个配置。  现在、两个器件的默认值都适用于 RAM 目标、只需右键点击每个项目并从列表中选择 Build Configurations 并更改为闪存。

    此致!

    马修

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

    Matthew 您好!

    感谢您提供参考、我将对其进行研究。

    我有一个普遍的怀疑。 我看到有3部分答案或解决方案可以解决 CPU1/CPU2在电源复位时未在闪存中运行的代码。 根据我的理解、这3项内容如下:

    1.使用 IPC Boot Status。 在 ti 示例中、我看到 IPC 引导状态在独立和闪存的 if def (预定义符号)下调用。 因此、根据我的要求、我会在连接调试器后转储代码、然后移除调试器、即使在复位时、我的应用仍然应该在闪存中运行。 我没有办法动态包含和删除独立选项、这在重置电源时是必需的、但两个内核仍必须通过 IPC 握手从闪存运行。 我的理解是否正确、如果是、是否有机制可以避免这种情况并仍使用 IPC Boot Status 来协调两个 CPU?

    2.配置引导 ROM 引脚。 我曾尝试将 GPIO 19和84配置为引导模式引脚(我知道它使用了72和84、但我的应用使用 GPIO72进行 EMIF 配置)。 我遵循了一些步骤。  

              a.在 CPU1中、将 GPIO 初始化为输出、将其上拉、然后将所有权转移给 CPU2。

              b.在 CPU2中、我将 GPIO 设置为高电平、然后使用 DCSMZ1Regs.Z1_BOOTCTRL 将其配置为引导模式引脚0和1、然后将 Key 设置为0x5A、将 Boot Mode 设置为0x0B (引导至闪存)。 DCSM 的这一部分在 EALLOW 和 EDIS 下完成。  

    此外、在执行这些操作之后、当我进行调试时、没有看到 DCSM 寄存器在 CPU2中使用我提供的值进行更新。 我在 CPU1中重复了同样的事情,只是消除了所有权转让,并看到了相同的结果。 是否需要执行这些操作的任何其他步骤?

    需要更新的.cmd 链接器文件。 我不太清楚需要对此文件进行哪些更新。 我已经在 ti 文件夹的以下位置获取了与中给出的文件相同的文件: D:\ti\ccs1240\ccs\ccs_base\cc2000\include。 您能否建议对要进行的相同更改进行修改、以便在复位后在闪存中启用 CPU2代码的入口点? 注意:我已包含 CodeSTartBranch.asm 文件。

    最后、为了在没有调试器的情况下执行双核闪存编程并且在复位时成功运行、所有这3个步骤是否是针对同一问题的3种不同的解决方案?

    我是使用该 DSP 的新手、因此要探索它。 如果您能回答问题、将会有所帮助

    谢谢。  

    Prarambhik

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

    Matthew、您好!

    只是为了跟进、我在回复您时错误地点击了"这个已解决我的问题"。 我们能否继续讨论此主题或我是否需要创建一个单独的主题?

    谢谢。

    Prarambhik

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

    Prarambhik,

    是的、我们可以继续使用该主题、无需重新归档。  让我浏览一下您的最新回复并在此处回复您。

    马特

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

    Matthew 您好!

    感谢您的确认。 等待您对问题的反馈。

    Prarambhik

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

    Prarambhik,

    对于 Q1、此设置旨在当 CPU1指示 CPU2执行什么操作时区分从闪存引导和 RAM 引导。  如果您希望 CPU2以不同方式引导、则可以更改此函数中的参数。  如果两个内核上的所有内容都已加载到闪存中、您可以将此保留为闪存引导

    引导控制引脚被编程到 OTP (一次性可编程)存储器中、因此当您尝试在代码中写入这些更改时、您无法正确看到这些更改。  如果您在 CCS 中打开闪存工具、则可以直接对这些位置进行编程。

    以下是地址、但我建议仅使用闪存工具来完成此操作。

    我会从一个已为 CPU2_FLASH 执行预先制作的.cmd 文件开始。  您应该在与上述相同的路径中看到此文件;2837xD_FLASH_lnk_cpu2.cmd 。它将正确设置代码入口点。

    此致!
    马修

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

    Matthew、您好!

    对延迟回复表示歉意。 我尝试使用的链接器 cmd 文件已经可用、但在复位后无法引导 CPU2。 我仍然认为 CPU2中代码的入口点未被正确识别、并且它在执行 BOOT_ROM 代码后处于等待状态(可能)。

    此后、我尝试在两个内核之间进行 IPC 握手、结果成功了。 现在、在 DSP 电源复位后、CPU1和 CPU2均可启动。

    感谢您解析查询。

    此致、

    Prarambhik