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.

[参考译文] TMS320F2.8377万D:CPU2的看门狗重置后出现引导问题

Guru**** 2585275 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/653999/tms320f28377d-boot-problem-after-watchdog-reset-of-cpu2

部件号:TMS320F2.8377万D

我正在使用CCS调试2.8377万D。 在我的应用程序中,我要分别重置CPU1和CPU2。 F2837xD外设驱动程序库提供了一个名为 sysctl_resetDevice()的函数来执行看门狗重置。

它适用于CPU1,即在CPU1看门狗重置后,CPU1的PC将再次进入main()。 但是,CPU2无法正常工作。 CPU2的看门狗重置后,PC将转至0x3fe44e,即ESTOP0。 同时,CPU1运行正常。 然后使用CCS重置并重新启动CPU2,CPU2可以再次运行。

问题1:CPU2的CCS复位和看门狗复位有何区别?

根据TRM, CPU2的CCS复位和看门狗复位如下所示。

CPU2重置看门狗后,为什么CPU2不能再次转至main()?

问题2: 在仿真模式下,CPU2的引导顺序是什么?

在我的项目中,CPU1不发送IPC命令来引导CPU2。 这是否意味着CPU2可以在仿真模式下自行启动而无需CPU1控制?

当CPU2进入等待引导模式时,它将保持复位并等待CPU1发出的引导命令。 仿真模式下的CPU2是否如此?

问题3:CPU1是否有任何方法可以在不中断CPU1的情况下重置CPU2?

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

    您好Vesgine,

    [引述]问题1:CPU2的CCS复位和看门狗复位有何区别? [/引述]

    虽然两个重置功能看起来相同,但行为会略有不同。 调试重置后,CPU保持停止状态,当您重新启动时,CCS将运行Gel文件并强制PC具有入口点,因此引导ROM可能无法运行,在WD重置的情况下,CPU将始终通过BootROM运行。

    [报价]问题2: 在仿真模式下,CPU2的引导顺序是什么? [/引述]

    这在"图3-5. CPU2 Emulation Boot Flow (CPU2仿真引导流)" 。 您需要 在0xD00位置具有正确的值才能通过仿真引导正确引导。 是的,如果此位置的值不正确,则它将处于等待引导状态。

    [引述]问题3:CPU1是否有任何方法可以在不中断CPU1的情况下重置CPU2? [/引述]

    如果需要从CPU1执行代码以重置CPU2,必须中断CPU1。  只要触发CPU2看门狗,它就会在CPU1上生成NMI (检查NMIFLG部分),用户应用程序的CPU1 NMI处理程序应重新引导CPU2 (通过发送正确的IPC命令)。

    此致,

    Vivek Singh

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

    我在CPU1的main()函数中添加以下代码:

    同时(1)

    ....
    如果((sysctl_getNMILFlagStatus()& sysctl_NMI_CPU2WDRSN)== sysctl_NMI_CPU2WDRSN)

    IPCBootCPU2 (C1C2_Brom_bootmode_boot_fove_flash);
    sysctl_clearAllNMIFlags();
    }
    ....
    }
    当CPU2看门狗重置时,CPU1成功执行上述代码。 但CPU2仍转到0x3fe44e,即ESTOP0。 CPU2的0xD00处的值为0x025A,这意味着CPU2将处于等待模式。
    我认为CPU2的PC即使在等待模式下也不应转至0x3fe44e。 那么,我的项目中是否存在问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您为CPU1编写的代码可帮助独立应用程序。 连接调试器后,您需要使用引导至闪存设置初始化0xD00。 在我看来,如果连接了调试器,并且CPU2在waitboot中启动,则它将转到Estop,但我会仔细检查并确认。

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

    您好,

    在下列情况下-

    [引述]在我看来,如果调试器已连接且CPU2在waitboot中启动,则它将转到Estop,但我会仔细检查并确认。 [/引述]

    我已确认这是预期行为。 如果连接了调试程序,则如果没有有效的引导模式设置(或WAITBOOT),CPU将在紧急停止时停止。

    此致,

    Vivek Singh