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.

[参考译文] SK-AM62P-LP:如何将 R5F_MCU 访问到 R5F_WKUP 域

Guru**** 2430620 points
Other Parts Discussed in Thread: SK-AM62P-LP, UNIFLASH, AM62P

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1506169/sk-am62p-lp-how-to-access-r5f_mcu-to-r5f_wkup-domain

器件型号:SK-AM62P-LP
Thread 中讨论的其他器件: UNIFLASHAM62P

工具/软件:

您好、

我目前使用的是 SK-AM62P-LP 电路板、使用 PSDK 版本 09.02.01.10 和 MCU+SDK 版本 09.02.01.08。

我想了解从 R5F_MCU 域到 R5F_WKUP 域的通信是否可行。 如果是、您能否分享相关的用户指南或文档?

例如、我有一个数字传感器与 R5F_MCU 连接、我想从 R5F_WKUP 域读取传感器数据。

此致、
维拉潘迪扬五世

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

    您能否在 linker.cmd 中添加以下补丁并重试:

    diff --git a/examples/drivers/ipc/ipc_notify_echo/am62px-sk/wkup-r5fss0-0_freertos/ti-arm-clang/linker.cmd b/examples/drivers/ipc/ipc_notify_echo/am62px-sk/wkup-r5fss0-0_freertos/ti-arm-clang/linker.cmd
    index d30c445..a66de26 100644
    --- a/examples/drivers/ipc/ipc_notify_echo/am62px-sk/wkup-r5fss0-0_freertos/ti-arm-clang/linker.cmd
    +++ b/examples/drivers/ipc/ipc_notify_echo/am62px-sk/wkup-r5fss0-0_freertos/ti-arm-clang/linker.cmd
    @@ -165,5 +165,7 @@ MEMORY
         DDR_FS_STUB    (RWIX)      : ORIGIN = 0x9CA00000 LENGTH = 0x00008000
         /* DDR for DM R5F code/data [ size 28 MiB + 992 KB] */
         DDR                         : ORIGIN = 0x9CA08000 LENGTH = 0x1C00000
    +    /* This section is used by the SBL to temporarily load the appimage for authentication */
    +    APPIMAGE  : ORIGIN = 0x84000000 , LENGTH = 0x1900000 
     
     }

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

    尊敬的会议:

    我们添加了提供的补丁、现在它可以正常工作、这意味着引导时没有错误。  

    现在、我们想知道如何将数据从 MCU_R5 传输到 WKUP_R5。 是否有任何特定的 API 可用于此目的?  

    请提供必要的细节。

    此致、

    Veerapandiyan  

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

    你好 Veerapandiyan ,我很高兴你能够得到 IPC Notify 工作. 您可以按照示例更好地了解流程、但我想说主 API 是  

    IpcNotify_sendMsg()  

    API 列表 :AM62Px MCU+ SDK:用于 IPC Notify 的 API

    谢谢您、

    Paula

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

    尊敬的 Paulo:
    好的。 我将检查并更新。

    此致、
    维拉潘迪扬五世

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

    您好 Paula、

    我阅读了  API 列表 :AM62Px MCU+ SDK:用于 IPC Notify 的 API、并尝试将消息从 MCU_R5 发送到 WKUP_R5、但 WKUP 端未接收到。  

    我在 WKUP 域中找不到任何用于接收消息的 API。 如有、请随时分享。

    此致、

    维拉潘迪扬五世

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

    Veerapandiyan、您能告诉我您是如何测试的?

    运行 OOB IPC Notify 时、您是否会在 MCU_R5 和 WKUP_R5 内核中打印如下消息?  

    WKUP_R5F
        DebugP_log("[IPC NOTIFY ECHO] All echoed messages received by main core from %d remote cores !!!\r\n", numRemoteCores);
        DebugP_log("[IPC NOTIFY ECHO] Messages sent to each core = %d \r\n", gMsgEchoCount);
        DebugP_log("[IPC NOTIFY ECHO] Number of remote cores = %d \r\n", numRemoteCores);
        DebugP_log("All tests have passed!!\r\n");
    MCU_R5F
        DebugP_log("[IPC NOTIFY ECHO] Remote Core waiting for messages from main core ... !!!\r\n");
        DebugP_log("[IPC NOTIFY ECHO] Remote core has echoed all messages !!!\r\n");
    如果是、则应该成为有关如何修改示例的问题。
    总之、该示例在远程内核 (MCU_R5F) 上的作用是:
    1) 在初始化期间、远程内核注册一个回调函数来处理传入消息
    status = IpcNotify_registerClient(gClientId, ipc_notify_msg_handler_remote_core, NULL);
    2) 然后,当收到一条消息时,它将回调函数并使用发回该消息 I pc Notify_sendMsg()
    void ipc_notify_msg_handler_remote_core(uint16_t remoteCoreId, uint16_t localClientId, uint32_t msgValue, void *args)
    {
        /* Echo the message back to the sender */
        IpcNotify_sendMsg(remoteCoreId, localClientId, msgValue, 1);
    
        /* Check if this is the last message in the sequence */
        if(msgValue == (gMsgEchoCount-1))
        {
            SemaphoreP_post(&gRemoteDoneSem);
        }
    }
    因此、更改 msgValue 以在 WKUP_R5 中看到它应该是一个问题。
    您可以尝试的另一种选择是   通过更改此处的顺序、使用 MCU_R5F 作为主内核、并使用 WKUP_R5 作为远程器件:
    examples\drivers\ipc\ipc_notify_echo\ipc_notify_echo.c
    #if defined(SOC_AM62PX)
    /* main core that starts the message exchange */
    uint32_t gMainCoreId = CSL_CORE_ID_WKUP_R5FSS0_0;
    /* remote cores that echo messages from main core, make sure to NOT list main core in this list */
    uint32_t gRemoteCoreId[] = {
        CSL_CORE_ID_MCU_R5FSS0_0,
        CSL_CORE_ID_MAX /* this value indicates the end of the array */
    };
    #endif
    注意:如果修改  ipc_notify_echo.c 、不要忘记重建库示例:
    • cd C:\ti\mcu_plus_sdk_am62px_11_00_00_16
    • gmake libs profile=debug
    请告诉我该怎么做。 或者、如果仍然遇到问题、如何重现问题
    谢谢您、
    Paula
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Paula、

    我们试图根据你以前的建议来实施它。 但这是不起作用的。

    1.请查看下面的图像执行命令 5(共 9 个)是 R5、6(共 9 个)是 MCU  

    2.请参阅 MCU_R5 和 wkup_R5 的 ipc_echo_notify.c 文件

    3.请注意,它显示所有测试均已通过,但消息未出现  

    请帮助解决此问题。

    此致、

    维拉潘迪扬五世

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

    你好  Veerapandiyan ,我明天将致力于重现这个问题

    谢谢您、

    Paula

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

    尊敬的会议:
        好的。我正在等待你的答复。
    此致、
    Veerapandiyan 五.

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

    尊敬的会议:
        我还在等待你的答复。
    此致、
    Veerapandiyan 五.

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

    尊敬的会议:
        我还在等待你的答复。
    此致、
    Veerapandiyan 五.

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

    尊敬的会议:

    我还在等待你的答复。

    此致、

    Veerapandiyan  

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

    尊敬的 Veerapandiyan:我的设置与您的不同、遇到了一些问题、因此我无法重现问题。 我将与会议合作,并保持你发布.

    让我确认您的当前问题、您在 WKUP R5F 内核中没有看到 IPC Notify 中完成的更改、也没有看到 MCU RF5 UART 日志。 对当前情况的理解是否正确?

    谢谢您、

    Paula  

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

    您好 Paula、

    问题是、如果更改了 MCU IPC Notify、我想看到 WKUP_R5 的 UART 日志中反映的更改。

    我期待着你的答复。

    此致、
    Veerapandiyan v

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

    嗨  Veerapandiyan ,我能够重现这个问题,即使在清理项目和删除“调试“文件夹后,我看不到打印的“msgValue"。“。 我可以看到从另一个 UART(稍后打印 Linux 引导)的“ipc_notify_msg_handler_remote_core"外部“外部打印的其他消息。
    因此、我尝试了不同的方法、并将收到的消息保存在缓冲区中、以便稍后可以打印。 这似乎正常工作。 下面的代码被截取

    位于 ipc_notify_echo.c 中

    为此文件添加一些全局变量

    /* Array to store received messages for analysis */
    #define MAX_MSG_LOG 1000
    uint32_t gReceivedMessages[MAX_MSG_LOG];
    uint32_t gMsgLogIndex = 0;

    将收到的消息保存在缓冲区中  

    void ipc_notify_msg_handler_remote_core(uint16_t remoteCoreId, uint16_t localClientId, uint32_t msgValue, void *args)
    {
        /* Store message in array for later analysis (store every 1000 message to avoid overflow) */
        if(msgValue % 1000 == 0 && gMsgLogIndex < MAX_MSG_LOG)
        {
            gReceivedMessages[gMsgLogIndex] = msgValue;
            gMsgLogIndex++;
        }
        /* on remote core, we have registered handler on the same client ID and current core client ID */
        IpcNotify_sendMsg(remoteCoreId, localClientId, msgValue, 1);
    
    
        /* if all messages received then post semaphore to exit */
        if(msgValue == (gMsgEchoCount-1))
        {
            SemaphoreP_post(&gRemoteDoneSem);
        }
    }

    在末尾打印

    void ipc_notify_echo_remote_core_start()
    {
        int32_t status;
        uint32_t i;
    
        SemaphoreP_constructBinary(&gRemoteDoneSem, 0);
    
        /* register a handler to receive messages */
        status = IpcNotify_registerClient(gClientId, ipc_notify_msg_handler_remote_core, NULL);
        DebugP_assert(status==SystemP_SUCCESS);
    
        /* wait for all cores to be ready */
        IpcNotify_syncAll(SystemP_WAIT_FOREVER);
    
        DebugP_log("[IPC NOTIFY ECHO] Test - Remote Core waiting for messages from main core ... !!!\r\n");
    
        /* wait for all messages to be echo'ed back */
        SemaphoreP_pend(&gRemoteDoneSem, SystemP_WAIT_FOREVER);
    
        DebugP_log("[IPC NOTIFY ECHO] Test - Remote core has echoed all messages !!!\r\n");
    
        /* Print summary of stored messages */
        DebugP_log("[IPC NOTIFY ECHO] Summary of stored messages (every 1000):\r\n");
        for(i = 0; i < gMsgLogIndex && i < 10; i++)  /* Print first 10 stored messages */
        {
            DebugP_log("  Stored msg[%d] = %d\r\n", i, gReceivedMessages[i]);
        }
        if(gMsgLogIndex > 10)
        {
            DebugP_log("  ... and %d more stored messages\r\n", gMsgLogIndex - 10);
        }
    }

    Cortex-R5F 控制台

    ðð[IPC Notify echo]测试 — 远程内核等待来自主内核的消息...!!!
    [IPC Notify echo ]测试 — 远程内核已回显所有消息!!!
    Ð[IPC Notify echo]测试 — 远程内核等待来自主内核的消息...!!!
    [IPC Notify echo ]测试 — 远程内核已回显所有消息!!!
    [IPC Notify echo]存储的消息摘要(每 1000 条):
    存储的 msg[0]= 2000
    存储的 msg[1]= 3000
    存储的 msg[2]= 4000
    存储的 msg[3]= 5000
    存储的 msg[4]= 6000
    存储的 msg[5]= 7000
    存储的 msg[6]= 8000
    存储的 msg[7]= 9000
    存储的 msg[8]= 10000
    存储的 msg[9]= 11000
    ...和 988 更多存储的消息

    我没有将 Cortex-R5F 更改为主内核、但该方法应该也适用于这种情况

    谢谢您、

    Paula

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

    您好 Paula、

    很抱歉、延迟的回复。

    我们的理解是您仅在 MCU_R5 中发送和接收数据/消息。 我们需要实现的是从 MCU_R5 发送数据并在 WKUP_R5 中接收数据。 我们尝试以这种方式实现您的代码、但它无法正常工作。

    从 MCU_R5 发送:

    2.在 WKUP_R5 收到

    MCU_R5 控制台:

    4. WKUP_R5 控制台:

    5. Linux 引导控制台:



    此致、
    Veerapandiyan 五.

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

    Veerapandiyan 不确定我是否理解当前的问题。

    在上一篇文章中、我测试了 如何将数据/消息从 WKUP_R5F 发送到 MCU_R5F、然后循环回到。 在数组中保存 MCU_R5F 正在接收的内容、并在所有消息回显后最后打印该内容。

    在测试中、我将 MCU_R5F 更改为主内核、并将 WKUP_R5F 更改为远程器件

    #if defined(SOC_AM62PX)
    /* main core that starts the message exchange */
    //uint32_t gMainCoreId = CSL_CORE_ID_WKUP_R5FSS0_0;
    uint32_t gMainCoreId = CSL_CORE_ID_MCU_R5FSS0_0;
    /* remote cores that echo messages from main core, make sure to NOT list main core in this list */
    uint32_t gRemoteCoreId[] = {
        //CSL_CORE_ID_MCU_R5FSS0_0,
        CSL_CORE_ID_WKUP_R5FSS0_0,
        CSL_CORE_ID_MAX /* this value indicates the end of the array */
    };
    #endif

    以下控制台结果的屏幕截图:

    我还要分享我的“ipc_notify_echo.c"。“。 我对这两个工程使用了相同的“ipc_notify_echo.c"(“(ipc_notify_echo_am62px-sk_wkup-R5fss0-0_freertos_ti-arm-clang 和 ipc_notify_echo_am62px-sk_mcu-R5fss0-0_freertos_ti-arm-clang )

    e2e.ti.com/.../3515.ipc_5F00_notify_5F00_echo.c

    让我知道这是否有帮助或我是否有误解

    谢谢您、

    Paula

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

    您好 Paula、

    感谢您在这段时间内的合作。 现在工作正常。  

    我从 MCU_R5 发送数据、并在 WKUP_R5 上接收数据。

    此致、

    维拉潘迪扬五世

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

    很棒的 Veerapandiyan、谢谢你让我知道

    Paula