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.

[参考译文] AM3352:SPI 块读取问题

Guru**** 2542530 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/616659/am3352-spi-block-read-issues

器件型号:AM3352

您好!  

我的客户写道:

对 AM335x SPI 接口有一点背景知识。  

我们正在使用 SPI1接口的“主同步发送和接收模式”来连接 FPGA。 因此、MOSI 和 MISO 线路在 SPI 事务期间与 AM335x 输出时钟完全同时处于活动状态。 这当然会使 FPGA 读取变得有点困难、因为数据基本上必须在 SPI 事务开始时立即准备就绪、 因此,我一直在使用不同的 SPI 速度和 SPI 字位长度来将时间累积到周期中,以便能够实时返回读取的数据。  在过去的电路板开发过程中,我们在 SPI (硬件和 Linux)方面遇到了很多早期开发问题,但现在我们正在清理问题,并尝试提高性能,以便加快网络速度。  

使用 Linux SPIDEV,我们已经尝试了 SPI 性能,并且能够使 SPI 块写入工作,以便通过 SPI 将数据包写入 FPGA,但无法使 SPI 块读取工作, 我认为这在考虑之后是合理的、因为通过 MISO 线路读回 AM335x 的数据必须通过 MOSI 线路同时驱动、因为这两条线路在主 TX/RX 模式下同时处于活动状态。 我们的 Linux 固件示例表明、存在某种可以解决此问题的同步块读取/写入功能;但是、我们尚未实现的内核版本4.1.18支持此功能。  

因此、我认为固件在块读取期间会执行虚拟块写入、以便将读取的数据驱动回 AM335x、作为块读取。 这似乎会给同时在两个方向上运行块式事务的 SPI 控制器带来瓶颈、但可能会起作用。   

问题是、我们在这里是否处于如何通过 SPI 从 FPGA 进行块读取的正确轨道? 如果有更好的方法来提高 SPI 在两个方向上的性能、我们不希望走得太远。 更新到较新版本的 Linux 是否可以为我们解决此问题?  

是否有关于内核迁移或通过 SPI 进行块读取的最佳方法的建议?

谢谢!  Blake

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

    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Blake、

    我需要在下周返回办公室后做一些实验、但我有几个问题:

    1) 1)当前使用的内核版本是什么?
    2) 2)查看内核文档、spidev 似乎在4.1.18之前支持全双工-问题是 spidev 还是 TI 驱动程序?
    3) 3)对于全双工、此[1]示例代码是否正常工作、是否按照 spidev 文档[2]末尾所述进行了修改?

    此致、
    Mike

    [1] elixir.free-electrons.com/.../spidev_fdx.c (注意、这是在较旧内核中的/Documentation/spi 中找到的)
    [2] www.kernel.org/.../spidev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mike:

    请参阅客户提供的以下内容:

    我们的固件工程师之一负责处理 Linux 代码:

     以下是我的答案:  

      1.      内核版本为3.12.10。
      2. 2.     问题出在 TI 驱动程序、CPU 的使用增加到50%。
      3. 3.     无法回答,原因是缺少引用…。 [布莱克: 我的错误-事后我已将其发送]  

    在块写入的情况下,我们使用“写入”系统调用,而不是“IOCTL”。 SPIDEV 中的写入调用将在内部调用 MCSPI API 以写入 OMAP2_MCSPI_TX0寄存器。 在此当前内核中、DMA 在编译中被禁用。  

    SPIDEV 确实支持全双工、我需要您的帮助来分析 Teledyne 上的 SPI 信号。  

    总结并添加… 我们希望在主 Tx/Rx 模式下提高 SPI 的性能,我们认为这很可能需要使用 DMA 引擎和内部 SPI FIFO 的代码。 无论 TI 是指向支持此功能的较新代码、还是我们必须自行添加功能、TI 都希望帮助我们规划一条实现此目标的前进道路。

    谢谢!

    Blake

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

    您好、Blake、

    我在内核版本3.8中看到了对 MCSPI 的 DMA 引擎支持、因此我认为它应该出现在3.12中。

    MCSPI 的内核文档有一个保留 DMA 通道的示例:  

    此 E2E 主题还提供了一些附加信息:  

    此致、
    Mike

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    客户将详细介绍该数据。 我们可能希望结束这项工作、因为我怀疑他将在2到3周后回到我们身边。

    感谢您的帮助!

    Blake