首页 > 解决方案 > linux中的SPI和DMA有什么关系?

问题描述

在我看来,SPI 和 DMA 都是控制器。

SPI是一种通信工具,DMA可以在没有CPU的情况下传输数据。

系统 API,如spi_sync()spi_async(),由 CPU 控制。

那么SPI with DMA是什么意思,是不是说DMA可以在没有CPU的情况下控制SPI API呢?还是SPI控制使用CPU但数据直接传输到DMA?

标签: linuxspidma

解决方案


SPI 不是工具,它是一种通信协议。典型的微控制器在硬件中实现了该协议,该协议可以通过读/写给定控制器地址空间中的专用寄存器来访问。

微控制器上的 DMA 通常用于将寄存器的内容移动到内存中,反之亦然。DMA有时可以配置为写入特殊数量的读/写或增加或减少内存的源地址和目标地址等。

如果你有一个支持 DMA 的 SPI 的微控制器,这通常意味着你可以在内存中有一些数据,这些数据将被传输到 SPI 单元以发送多个数据字节,而无需 CPU 内核本身的干预。或者自动从 SPI 读取一定数量的数据字节到内存,而不会浪费 cpu 内核。

如何配置此类 DMA SPI 传输已写入控制器的数据表中。类型的范围非常广泛,因此在不了解微类型的情况下无法在此处给出具体信息。

用于处理 SPI 的 linux API 通过使用驱动程序中的微控制器特定实现来抽象 DMA 和 SPI 的访问。

如果您想使用 API 来访问您的 SPI,或者您想实现设备驱动程序以使 linux API 在您的特定控制器上工作,目前还不清楚。

不可能在这里给您一个一般性的介绍来编写内核驱动程序或从您的数据表中逐个寄存器澄清。如果您需要更多信息,您必须使您的问题更加具体!


推荐阅读