工具与软件:
尊敬的 Expert:
客户将控制内核/驱动程序层的 SPI0以与 FPGA 通信。
这种通信需要非常实时。 写入 SPI 后、必须等待接收到的结果。
它需要每125us 执行一次读取和写入操作。
SPI0的设置将在哪里? 至于如何调用和使用它、是否有任何类似的相关示例可供参考?
谢谢
Daniel
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.
工具与软件:
尊敬的 Expert:
客户将控制内核/驱动程序层的 SPI0以与 FPGA 通信。
这种通信需要非常实时。 写入 SPI 后、必须等待接收到的结果。
它需要每125us 执行一次读取和写入操作。
SPI0的设置将在哪里? 至于如何调用和使用它、是否有任何类似的相关示例可供参考?
谢谢
Daniel
您好、Andreas
通信协议非常复杂。 客户在图表中展示了控制顺序、希望它更易于理解。
客户知道它很难在 Linux 中实现。 在其现有产品中、它们也在 Linux 驱动程序中实现。
为了实现这一目的、客户直接控制 CPU 中与 SPI 相关的寄存器。 程序代码的以下部分
这在 Cavium CN7020 1GHz 中实现:


您能看到我通过消息发送给您的图文件中的控制顺序吗?
谢谢
Daniel
Daniel、您好!
您能在我通过消息发送给您的图文件中看到控制顺序吗?
我得到了文件、它非常详细且易于理解、谢谢。
我需要花一些时间消化所有内容、但最简单的方法可能是创建概念验证、以真正尝试其工作效果。 从屏幕截图上可以看出、您可能已经有 Linux 代码/驱动程序?
从较高层次看、存在两个潜在的挑战:
有效 SPI 吞吐量
您说 CPU <-> FPGA 之间的 SPI 速度限制为12MHz、但如果需要、似乎应该可以提高速度、因为客户控制通信的两端、不是吗?
该文档还说明了无法使用 DMA 模式。 如果您在我们无 DMA 模式的当前 SDK 中使用 AM62'x SPI 模块、则传输期间会存在"字节间隙"、从而降低您的有效吞吐量。 通常、客户可以提高 SPI 速度来解决此问题、或使用 DMA。 请注意、这些间隙的长度取决于您配置的 SPI 时钟频率(较高频率->较短间隙)。
下面是有关 DMA 如何帮助减少这些"字节间隙"的一些信息和示例: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1356551/faq-am6x-optimizing-spi-transfer-inter-byte-gaps-using-the-dma-in-linux
实时行为
似乎每125us 一次的循环传输就有许多硬实时要求、包括多字节发送/处理/接收活动。 一般来说、对于常规 Linux 而言、严格的硬标题很难满足、因为在这种情况下、中断和任务切换延迟可能有数百种。 两个可能的选择...
此致、Andreas