【发布时间】:2021-10-27 01:38:18
【问题描述】:
在我看来,SPI 和 DMA 都是控制器。
SPI是一种通信工具,DMA可以在没有CPU的情况下传输数据。
spi_sync()或spi_async()等系统API由CPU控制。
那么SPI with DMA是什么意思,是不是说DMA可以在没有CPU的情况下控制SPI API呢?还是SPI控制使用CPU,但数据直接传输到DMA?
【问题讨论】:
在我看来,SPI 和 DMA 都是控制器。
SPI是一种通信工具,DMA可以在没有CPU的情况下传输数据。
spi_sync()或spi_async()等系统API由CPU控制。
那么SPI with DMA是什么意思,是不是说DMA可以在没有CPU的情况下控制SPI API呢?还是SPI控制使用CPU,但数据直接传输到DMA?
【问题讨论】:
SPI 不是工具,它是一种通信协议。典型的微控制器在硬件中实现了该协议,可以通过读/写给定控制器地址空间中的专用寄存器来访问。
微控制器上的 DMA 通常用于将寄存器的内容移动到内存中,反之亦然。 DMA 有时可以配置为写入特殊数量的读/写或增加或减少内存的源地址和目标地址等。
如果你有一个支持 DMA 的 SPI 的微控制器,这通常意味着你可以在内存中有一些数据,这些数据将被传输到 SPI 单元以发送多个数据字节,而无需 CPU 内核本身的干预。或者自动从 SPI 读取一定数量的数据字节到内存,而不浪费 cpu 内核。
如何配置此类 DMA SPI 传输已写入控制器的数据表中。类型的范围非常广泛,因此在不知道微类型的情况下无法在此处给出具体信息。
处理 SPI 的 linux API 是通过使用驱动程序中的微控制器特定实现来抽象 DMA 和 SPI 的访问。
目前还不清楚您是想使用 API 来访问您的 SPI,还是想实现设备驱动程序以使 linux API 在您的特定控制器上工作。
这里不可能给你一个一般性的介绍来写一个内核驱动程序或者从你的数据表中逐个寄存器澄清。如果您需要更多信息,您必须使您的问题更加具体!
【讨论】: