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-TDA4VM:A72和 R5F 内核之间的 IPC 通信

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

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1394740/sk-tda4vm-ipc-communication-between-a72-and-r5f-cores

器件型号:SK-TDA4VM
主题中讨论的其他器件:TDA4VM

工具与软件:

您好、TI 团队:

我们参考的是最新的 PDK

平台开发套件(PDK)—平台开发套件(PDK)- Jacinto 用户指南(TI.com)

我正在处理一个涉及 TDA4VM SoC 的项目、我需要将图像数据(100x100 RGB 8位)从运行 Linux 的 A72内核传递到运行 TI-RTOS 的 R5F (MCU 域)内核。 并发回一个信号(文本)以确认接收到的图像。  

我的目标是将共享存储器和虚拟化概念用于内核间通信。

我有一些问题、并希望获得有关实施该计划的最佳实践的指导。

在 DDR 中为图像数据分配共享存储器的建议方式是什么? 应该分配固定的缓冲区大小、如何确保正确对齐?

如何设置 VRING 以进行从 A72到 R5F 的通信? A72至 R5F 和 R5F 至 A72通信是否应该有单独的 Vrings?

考虑到图像数据可能很大、我如何管理同步并确保数据一致性?

传输图像数据的最佳方法是什么? 我是否应该使用单个大的缓冲区(如何在单个缓冲区中传输大量数据? RPMsg 可以传递496个字节)、还是更好地将映像拆分成更小的块?

在 TDA4VM SoC 中将共享存储器用于图像数据传输时、是否有任何具体的注意事项或限制需要注意?

我们可以看到类似这样的示例应用吗? 其中数据存储在共享存储器中并发送到 MCU 域中的 r5f 内核

谢谢

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

    您好!

    当然,请允许我一些时间,我将详细阐述和回答你的问题。

    此致

    Tarun Mukesh

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

    谢谢。

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

    TI-RTOS (免费 RTOS)

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

    尊敬的 Gowtham:

    感谢您的理解。 我将在星期一之前回复此 E2E。

    此致

    Tarun Mukesh

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

    您好!

    VRING 缓冲区用作共享存储器以传输数据。 必须在系统范围内保留。 必须将环形缓冲器的基地址和大小提供给 IPC LLD。 所有核心应用程序都必须相同。 内核组合之间的环形缓冲区的单个存储器范围在库内部进行计算。 IPC 示例中使用的默认基地址和大小为

    设备
    基址
    大小
    TDA4VM 0xAA000000 0x1C00000

    在 IPC_initVirtIO()调用期间、将从应用程序传递 vring 基地址和大小。

    此外、与运行 Linux 的 MPU 进行通信时使用的环形缓冲存储器必须在系统范围内保留。 环形缓冲区的基地址和大小与未运行 Linux 的内核之间使用的不同。 当 Linux 使用分配的地址更新内核的资源表时、会将环形缓冲区的基址和大小提供给 IPC LLD。 Linux 从第一个存储器区域分配基址。

    对于将使用 Linux IPC 的应用程序、需要资源表。 示例资源表可在 IPC 示例中找到:

    设备
    资源表示例位置
    TDA4VM src ipc_rsctable.h

    资源表必须至少有一个条目(即 VDEV 条目)、才能定义 IPC 与 Linux 通信所用的 vring。 或者、资源表也可以有一个跟踪条目、用于定义远程内核跟踪缓冲区的位置。

    VDEV 条目将地址指定为 RPMSG_VRING_ADDR_ANY、这意味着该地址将在加载期间由 Linux 驱动程序分配。 从 DTS 文件中为远程内核指定的第一个存储器区域进行分配。

    例如、如果 mcu_r5fss0_core0的 dts 条目为

    reserved_memory:reserved-memory{
    #address-Cells =<2>;
    #size-cells =<2>;
    范围;
    
    mcu_r5fss0_core0_dma_memory_region:r5f-dma-memory@a0000000{
    compatible ="共享 DMA-POOL";
    REG =<0 0xa0000000 0 0x100000>;
    无地图;
    };
    
    mcu_r5fss0_core0_memory_region:r5f-memory@a0100000{
    compatible ="共享 DMA-POOL";
    REG =<0 0xa0100000 0 0xf00000>;
    无地图;
    };}
    
    

    然后、mcu_r5fss0_core0的 vring 的分配将来自0xa0000000条目。

    请注意、此地址特定于 Linux<->远程内核 VRING、并且与调用 IPC_initVirtio 时在远程内核固件中提供给 Virtio 模块的地址不同。

    默认情况下、每个池的第一个1MB 用于与远程处理器内核通信的 Virtio 和 vring 缓冲区。 剩余的15MB 分割区用于远程内核外部存储器(程序代码、数据等)。

    前1 MB 是 Linux 用于 IPC 的、因此您不应将任何文本或代码链接到该区域、它也应在 R5 MPU 中标记为非缓存。 资源表实体需要位于15MB 外部存储器段的开头。

    在 vring 传输中、默认情况下 SW 最大缓冲区是256个512字节的缓冲区

    Vring 可以传输一条最大496字节的有效载荷消息。 对于大于496字节的数据、应用需要反汇编和汇编数据包。


    对于更大的数据、建议使用共享存储器、并传输指针以加快传输速度。 需要根据处理器对考虑缓存。

    我希望这能解答您的疑问。

    此致

    Tarun Mukesh

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

    您好!

    感谢您的响应。

    在视觉应用示例中、当涉及图像通过/处理相关时使用了 openvx。 是否有任何 示例说明我们可以在不使用 openvx 依赖项的情况下传递图像?  

    对于更大的数据、建议使用共享存储器并传输指针以加快传输速度。 需要根据处理器对考虑缓存

    ->是否有任何样例应用程序我们可以通过  

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

    您好!

    在 vision 应用程序示例中、当谈到图像传递/处理相关问题时、使用了 openhx。 是否有任何 示例说明我们可以在不使用 openvx 依赖项的情况下传递图像?  [报价]

    否、我们没有其他任何示例。

    ->我们是否有任何此方面的示例应用程序可以通过 

    openvx 框架本身就是基于这个概念,视觉应用中的所有示例都使用这个框架并完成它。 除此之外、我们在 SDK 中没有任何其他示例。

    此致

    Tarun Mukesh

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

    你(们)好  

    感谢您的响应

    如果要将数据从 A72共享到 MCU R5F 内核、则可以使用 TI openVx 方法共享大型数据缓冲区?

     

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

    您好!

    在 SDK 中、默认情况下它不会启用、但我们可以启用它。 如果是在 openVx 方法上、您可以提出另一个线程。

    此致

    Tarun Mukesh