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.

[参考译文] TMS320F28377D:保存引导(重新启动) CPU2的方法

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/609190/tms320f28377d-save-way-to-boot-restart-cpu2

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

使用以下代码重新启动 CPU2时遇到问题(当然在 CPU1上运行):

EALLOW;
//将脉冲重置到 CPU2
DevCfgRegs.CPU2RESCTL.ALL = 0xA5A50001;
DELAY_US (100);
DevCfgRegs.CPU2RESCTL.ALL = 0xA5A50000;
EDIS;
//并重新启动 CPU2
IPCBootCPU2 (C1C2_Brom_BOOTMODE_BOOT_FROM _FLASH);

此代码在加电后工作正常、但可能无法在稍后重新启动。

调试 CPU2的引导代码我注意到文件 c2brom_boot.c 中的变量 c2brom_status 在复位后或至少在函数 c2brom_system_init ()的开头未初始化。

在函数 c2brom_system_init()中,引导过程显示了一个接一个地设置一个位。 CPU1等待引导状态的低4位上的特殊模式(0x2)、以查看 CPU2已成功引导。

由于 c2brom_status 未初始化且通常从 LSB 设置开始、因此无法达到模式0x2、而是0x3。 因此引导失败。

由此产生的问题是:
如何以节省的方式从闪存重新启动 CPU2?

此致
Stefan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用了 IPCBootCPU2的最新控制套件驱动程序(2.10)。 现在我已经看到在 C2000驱动程序(C2000Ware_1_00_01_00)中有一个修复程序、仅检查 C2_BootROM_BOOTSTS_SYSTEM_READY 位。 如果 LSB 已设置、这会有所帮助、但如果在复位后设置了 C2_BootROM_BOOTSTS_SYSTEM_READY、这不起作用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Stefan、
    这是否解决了您的问题,或者您是否正在等待某些方面的澄清?

    此致
    Baskaran
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为 c2brom_status 缺少初始化是 CPU2引导代码中的一个错误。
    新驱动程序中的权变措施有助于确保进程不会卡住、但可能会导致不等待 CPU2准备就绪。 因此、我认为应该有更好的权变措施来真正节省重新启动 CPU2的方法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Stefan、

    CPU2应用程序在启动后可以立即复位 c2brom_status 字。 我们将其留给用户应用程序、以读取状态并清除状态。 如果引导 ROM 清除状态、则可能会使应用程序处于不知道发生了什么情况的状态。

    随 ROM 源提供的引导 ROM 映射文件应具有 c2brom_status word 的地址。

    希望这对您有所帮助。

    此致
    Santosh Athuru