工具/软件:Linux
我正在使用运行 Linux 内核4.9.69的 am3358。 我们的板上有一些北欧无线电、作为 SPI 从属设备连接到 am3358。 我们以8MHz 的频率运行 SPI 总线。 我们所有的 SPI 事务都非常小:小于或等于64字节、但它们有很多。
虽然我们看到 CPU 使用率相当高、但在不涉及 DMA 的情况下、一切都能完美运行。 该系统完美运行了一周以上。
最近、我开始研究使用 DMA 处理 SPI 事务以尝试降低 CPU 负载。 驱动程序 SPI-OMAP2-mcspi.c 使用以下命令来决定是否使用 DMA:
#define DMA_MIN_Bytes 160
我将此值更改为0、以便 DMA 用于每个事务、这样做可以显著减少 CPU 使用量。 但是、SPI 不再完美工作。 我看到 SPI 事务在大约1/2小时到1小时后停止。 如果我将 DMA_MIN_Bytes 设置为32或64、我还会看到这种情况。
您有什么想法吗? 您是否知道在较小的事务上启用 DMA 会导致 SPI 停止工作的任何原因? 似乎没有任何错误传播到我们使用 SPI 子系统的驱动程序。 在 SPI.c 和 SPI-OMAP2-mcspi.c 中启用调试时、我没有看到任何错误
谢谢!
