在STM32MP1芯片的开发框架中,RPMsg协议可以让Cortex-A7和Cortex-M4双核间实现数据的交互。
如何要实现依赖于RPMsg协议的其他功能,重要的是要了解该协议尚未设计为直接传输高数据速率流。所以,需要根据用例约束对实现进行调整

  • 对于控制和低数据速率交换,RPMsg就足够了。

  • 对于高速率传输和大数据缓冲区,应首选间接缓冲区交换模式。

目前无法提供严格的规则来指导开发者选择哪一个来实现。 这取决于用例,但还取决于:

  • Cortex CPU的加载

  • 进程优先级

  • 抢占(例如中断和安全服务)

  • 在RPMsg实例上实现的其他服务。

  • ....

本文的目的是帮助选择最适合的实现。如果这还不够,另一种方法是首先实现direct模式,然后在系统中测试它的性能。

Direct buffer exchange mode

这种模式包括使用RPMsg缓冲区在处理器之间传输数据。

  • RPMsg消息包含有效数据。

  • 内存分配仅限于RPMsg缓冲区分配。

  • RPMsg客户端实现在代码实现方面非常简单。

image
建议使用直接缓冲区交换实现

  • 用于控制消息,例如控制远程处理器应用程序

  • 交换低数据速率流(类似于低数据速率总线)。

有关应用程序示例,请参阅可用项目列表并查看OpenAMP TTY echo应用程序。

Indirect buffer exchange mode

这种模式也被称为“大数据缓冲区交换”或“大数据”。它包括使用RPMsg来携带对其他一些包含有效数据的缓冲区的引用。其他的缓冲区可以是:

  • 任何大小

  • 通过多种方式分配,在缓存或非缓存内存,DDR或MCU SRAM

  • 被映射后可通过应用程序直接访问

  • 由DMA或任何主外设访问

此实现允许限制生产者和消费者之间的数据复制,为应用程序等缓冲区客户机提供直接的数据访问。
image
在以上概述中,以rpmsg sdb为例。它为应用程序提供了一个接口来与远程处理器分配和交换缓冲区。
建议使用此实现

  • 高速率传输

  • 用于实时传输(如音频缓冲区)

  • 特权动态缓冲区分配和/或最小值

  • 以适应现有的Linux框架或应用程序

有关可以为大型数据缓冲区交换实现的机制的详细信息,请参阅如何使用协处理器交换大型数据缓冲区。

github.com/STMicroel...
github.com/STMicroel...

作者:SteveChen  创建时间:2024-09-18 14:30
最后编辑:SteveChen  更新时间:2024-10-18 15:16
上一篇:
下一篇: