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.

[参考译文] AM625:A53 和 M4 内核之间是否有共享存储器块?

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1594266/am625-is-there-a-shared-memory-block-between-the-a53-and-m4-cores

器件型号: AM625

我正在开发基于 AM62x 的定制设计。 设计的一部分将是与 PRU 内核进行实时采样、并与 A53 内核共享生成的数据;这部分已经有详细记录且便于理解。

设计的下一部分将使用 M4 内核执行较慢的实时采样、并与 A53 内核共享生成的数据。 对于这一部分、我无法发现任何可用于在 M4 和 A53 内核之间共享数据的公共存储器缓冲区。 具体思路是分配一个共享存储器区域、让 M4 内核向该区域写入数据、然后 A53 可以从该区域中读取该数据。

我已经了解如何执行 IPC、例如让 M4 内核通知 A53 内核数据在共享缓冲区中可用。 理论上、我可以使用 IPC 机制(例如 RPMsg)将 M4 内核上生成的数据发送到 A53 内核、但 RPMsg(以及实际上任何 IPC 机制)相对较慢且延迟较高、因此我真的不希望这样做。 理想的做法是能够使用已分配给它的 RAM 的一些现有部分、或者分配一个可由 M4 和 A53 内核访问的新 RAM 块。 这是可能的吗?

谢谢、
Cody

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

    您好 Cody、

    Zerocopy 示例

    请首先查看 zerocopy 示例。 在本例中、我们分配一个共享存储器区域以传递实际数据、然后在数据准备好使用时使用 RPMsg 作为通知机制:
    https://git.ti.com/cgit/rpmsg/rpmsg_char_zerocopy/

    请注意、“master"分支“分支适用于 Linux 内核 6.6 和 6.12、而“ti-linux-6.1"适用于“适用于 Linux 内核 5.10 和 6.1。

    MCU+代码有点旧、因此道歉。 我没有带宽来将其更新为较新版本的 MCU+ SDK。

    缺少最新修复程序?  

    嗯,我们合并了一些修复程序,以说明如何检测 remoteprocX 值,但出于某些原因,这些提交尚未从内部代码库中生成到公共存储库。 我正在与开发团队跟进。 期待很快看到这些额外的提交。 我确实在以下 ti-rpmsg-char 存储库中看到了“add API“提交: https://git.ti.com/cgit/rpmsg/ti-rpmsg-char/log/ 

    快速讨论通知延迟  

    RPMsg 不会像中断那样快的通知机制、而是(此时)我可以提供的标准代码。 我希望在 2026 年对独立中断的选项进行更多深入研究、我们将了解是否有时间解决该问题。

    请注意、复制的字符数量对 RPMsg 延迟有很大影响。 如果您想了解 RPMsg 延迟、请查看我新的 rpmsg_char_benchmark 项目: https://git.ti.com/cgit/rpmsg/ti-rpmsg-char/tree/examples 

    我测试了 1 到 495 个字符(加上空终止字符)。 我假设 RPMsg 只是不能工作,如果你试图发送 0 个字符,但我没有试图看看是否有办法完全绕过 virtio 缓冲区副本.

    此致、

    Nick