linux中SPI和DMA是什么关系?

What is the relationship between SPI and DMA in linux?

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

SPI是一种通讯工具,DMA可以不用CPU传输数据。

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

那么SPI with DMA是什么意思,是不是意味着DMA不带CPU也可以控制SPI API?或者SPI控制使用CPU但数据直接传输到DMA?

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

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

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

如何配置此类 DMA SPI 传输已写入控制器的数据表中。类型跨度非常大,不知道微类型就不能在这里给出具体信息。

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

目前尚不清楚您是想使用 API 访问您的 SPI,还是想实现一个设备驱动程序以使 linux API 在您的特定控制器上工作.

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