LINUX--DMA用于数据传输--从SPI--tx读取到usart-RPi

LINUX--DMA用于数据传输--从SPI--tx读取到usart-RPi,linux,embedded-linux,raspberry-pi,dma,Linux,Embedded Linux,Raspberry Pi,Dma,DMA实际上是如何工作的是我所知道的理论-- 但是在编程中,我们必须如何管理它呢 我正在使用RPI,并期待使用DMA实现以下操作。 假设我想使用SPI---TX读取数据----USART从SD卡读取数据 我必须为数据传输编写例程并将其发送给dma,还是由dma tx和rx通道处理 要使用什么linux内部构件 一些专家能告诉我们在这方面应该采取什么步骤吗。我是DMA编程新手。lin您可以查看Raspberrypi SoC硬件规格。 Broadcom DMA支持SPI发送/接收和SD主机接口。

DMA实际上是如何工作的是我所知道的理论--

但是在编程中,我们必须如何管理它呢

我正在使用RPI,并期待使用DMA实现以下操作。
假设我想使用SPI---TX读取数据----USART从SD卡读取数据

我必须为数据传输编写例程并将其发送给dma,还是由dma tx和rx通道处理

要使用什么linux内部构件


一些专家能告诉我们在这方面应该采取什么步骤吗。我是DMA编程新手。lin

您可以查看Raspberrypi SoC硬件规格。

Broadcom DMA支持SPI发送/接收和SD主机接口。这意味着它至少可以支持设备到内存(我不确定broadcom SoC是否支持设备到设备DMA)

不同的SoC具有不同的DMA配置方式。 例如,它只需要在一些简单的DMA引擎上分配源地址、递增/递减(长度)、目标地址、递增/递减(长度)、计数器和中断。 完成DMA传输后,它将触发中断

大致回顾Broadcom的SoC。 它还有其他选项,例如:等待、永久映射。
我不是Broadcom SoC专家,也许您可以使用默认值来配置它

“从SD读取…到USART”-对于DMA或PIO来说,在主存中缓冲数据是标准。很少执行设备到设备的传输,对于典型的硬件来说根本不可能。DMA中的“M”表示“内存”,因此DMA控制器在设备之间和内存之间进行传输。一些DMA控制器也会执行mem-to-mem-xfer。SPI和USART驱动程序可能已经使用DMA。你打算重写SPI和USART驱动程序吗?+1。这是一个真正的问题。事实上,在大多数ARM设计中,SPI和UART传输之间存在冲突。看见