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.

[参考译文] AM62A3:SPI DMA 问题

Guru**** 2416110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1532075/am62a3-spi-dma-issue

器件型号:AM62A3

工具/软件:

我们使用了 am62a34 SOC。 我们使用的 SDK 版本是 ti-processor-sdk-linux-edgeai-am62a-evm-10_01_00_05。

目前、当我们使用 SPI 发送和接收数据时、我们发送和接收的数据大小为 32 个字节。 我们发现、当 SPI 应用调用 ioctl (SPI_FD、SPI_IOC_message (1)、&transfer) 时、它从不返回、导致应用程序冻结。
我们已经确定、在驱动程序文件 spi-omap2-mcspi.c 中、程序将一直滞留在“wait_for_comletion_interruptible (x)“行上、这会导致 ioctrl 函数不返回。 同时、我们观察到、当该块发生时、也没有触发 DMA 中断、导致未调用 SPI 的回调函数。

我们注意到论坛上也出现了类似的问题。Linux/AM3358:SPI DMA 问题 — 处理器论坛-处理器 — TI E2E 支持论坛

当传输的字节小于 160 时、我们使用 DMA。 为什么这会导致问题?

2.目前是否有任何修补程序可用于此问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid=“587980" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1532075/am62a3-spi-dma-issue 当发送的字节小于 160 时、我们使用 DMA。 为什么这会导致问题?

    您是否已修改驱动程序代码以执行此操作?

    您是否修改过任何其他内容?

    此致、Andreas

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

    我们没有修改驱动程序代码。 我们的 SPI 在从模式下运行、因此无论发送的字节数如何、始终使用 DMA。

    我们使用的 Linux 版本是 6.6.58:

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

    该问题是否与 DMA 的 FIFO 相关?

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

    当 SPI 驱动器被异常阻止时、我们同时调整了 DMA 的 FIFO 阈值。 目前、DMA 的 FIFO 阈值为 1 个字节。 当我们将其调整为 32 个字节时、问题仍然存在。 我们检查了 MSPI CFG_IRQSTATUS 寄存器、发现 OOW 被设置为 1、表示已达到当前 FIFO 阈值并且应该触发了 DMA 中断。 但此时没有发生 DMA 中断。 这是什么原因造成的?