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.

[参考译文] M4F0-AM243X:如何对 MCU-PLUS-SDK 进行编码以从 R5F0-0内核重新启动 M4F0-0内核

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1386624/mcu-plus-sdk-am243x-how-to-code-to-restart-m4f0-0-core-from-the-r5f0-0-core

器件型号:MCU-PLUS-SDK AM243X

工具与软件:

您好!

    我想  从 R5F0-0内核上对 M4F0-0内核进行软件复位。 我使用以下代码、类似于启动过程、尝试 重新启动 M4内核以从 main()运行、但未成功。  

    Bootloader_socCpuRequest(CSL_CORE_ID_M4FSS0_0);
    Bootloader_socCpuSetClock(CSL_CORE_ID_M4FSS0_0, 400*1000000);
    Bootloader_socCpuPowerOnResetM4f(CSL_CORE_ID_M4FSS0_0,1);

    Bootloader_socCpuResetRelease(CSL_CORE_ID_M4FSS0_0, 0);
    Bootloader_socCpuRelease(CSL_CORE_ID_M4FSS0_0);


R5F0-0内核 运行这些代码后、可以从 CCS 调试控制台中看到以下错误、如下图所示。

我想知道为什么会发生这些错误? 为什么  M4F0-0内核无法成功重新启动? 以及如何 仅从 R5重新启动 M4?  

谢谢你。

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

    您好、

    如果您希望复位 M4F 内核、则可以复位、但 R5F 内核也会影响相同的复位。

    您需要执行热复位。

    Bootloader_socCpuPowerOnResetM4f API 仅执行本地 CPU 复位、这意味着您的 CPU 寄存器将被清除并具有默认值、然后您的应用将从 c_init 函数(启动代码   )开始执行、这意味着 M4F 内核将使用零值初始化未初始化   的变量、SP (栈指针)将使用用户定义的 RAM 存储器位置进行初始化。

    热复位意味着 SOC 将从 RBL→SBL→Application 开始引导。

    请使用 SoC_generateSwWarmResetMcuDomain  用于从 R5F 或 M4F 内核重置整个 SOC 的 API。

    此致、

    Anil。

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

    但当我使用 Bootloader_socCpuPowerOnResetM4f API 时、为什么我的 应用程序无法从 c_init 函数(启动代码)开始执行? 以及为什么 从 CCS 调试控制台报告以下错误(例如"can't run target CPU、device is locked in hardfault or in NMI")、如图所示  

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

    您好、

    在代码序列中、再次使用 Bootloader_socCpuPowerOnResetM4f API 中的 IRAM 默认值进行初始化。

    通常情况下、一旦 IRAM 被初始化、用户就不会接触 IRAM 的启动、而这可能会成为问题。

    您可以尝试使用下面的代码、然后查看是否有任何问题。

    此代码对 M4F 内核进行 CPU 本地复位。

    这里我的建议是、如果您希望从 R5F 复位 M4F、则只能启用热复位。

        retVal = Sciclient_pmSetModuleRst(TISCI_DEV_MCU_M4FSS0_CORE0, 1, SystemP_WAIT_FOREVER);
        if(0 != retVal)
        {
        DebugP_log("[Error] Sciclient Reset Assertion failed!!!\r\n");
        DebugP_assert(FALSE);
        }
    
        retVal = Sciclient_pmSetModuleRst(TISCI_DEV_MCU_M4FSS0_CORE0, 0, SystemP_WAIT_FOREVER);
        if(0 != retVal)
        {
        DebugP_log("[Error] Sciclient Reset Deassert failed!!!\r\n");
        DebugP_assert(FALSE);
        }

    此致、

    Anil。

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

    谢谢你。 问题已解决。