2012-12-03 79 views
0

如何DMA實際工作是理論,我知道; - http://en.wikipedia.org/wiki/Direct_memory_accessLINUX - DMA數據傳輸 - 從SPI讀取--- TX到USART - RPI

但在規劃如何,我們對其進行管理?

我正在使用RPI &期待使用DMA執行以下操作。
假設如果我想使用SPI ----讀取數據---從SD卡讀取到USART。

我是否必須爲數據傳輸寫程序&將它們給予dma或者它是由DMA tx & rx通道處理?

什麼是linux內部使用它?

一些專家可以告訴我們在這方面要遵循哪些步驟。我是DMA編程的新手。林

+0

*「從SD讀到USART」* - 對於DMA或PIO,在主存中緩衝數據是常態。設備到設備的傳輸很少執行,對於典型的硬件根本無法實現。 DMA中的「M」用於「存儲器」,因此DMA控制器在設備之間和存儲器之間進行傳輸。還有一些DMA控制器也會使用mem-to-mem xfers。 SPI和USART驅動程序可能已經使用DMA。你打算重寫SPI和USART驅動程序嗎? – sawdust

+0

+1。這是一個真正的問題。事實上,在大多數ARM設計中,SPI和UART傳輸之間存在衝突。請參閱http://dics.voicecontrol.ro/process_mails/arata_discutia/139618/DMA_Corrupts_UART_RX.html –

回答

0

您可以檢查Raspberrypi SoC硬件規格。 http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf

Broadcom DMA支持SPI TX/RX和SD主機接口。這意味着它至少可以支持設備到內存(我不確定broadcom SoC是否支持設備到設備DMA)。

不同的SoC有不同的DMA配置方式。例如,只需在一些簡單的DMA引擎上分配源地址,遞增/遞減(長度),目標地址,遞增/遞減(長度),計數器和中斷。 當完成DMA傳輸時,它將觸發中斷。

粗略回顧了Broadcom的SoC。 它有其他選項,例如:WAITS,PERMAP。 我不是Broadcom SoC專家,也許你可以使用默認值來配置它。