1. 程式人生 > >PCI總線 DMA burst 基本概念

PCI總線 DMA burst 基本概念

一個 ans 數據塊 transfer pga href 鏈表 操作 str

轉載地址:http://blog.csdn.net/sunjiajiang/article/details/7945057

DMA和burst不是一個概念。

DMA傳送不經過CPU的控制,假如硬盤的數據不能經過DMA控制器讀到內存,那麽每完成一次將硬盤的數據讀出來,再存放到內存的操作,都要通過CPU運行幾條讀寫指令來完成,這時CPU就做不了別的事了,如果有DMA控制器,則這個過程不需要CPU的參與,只需要占用總線就可以了。CPU還可以去完成別的運算。

Burst操作還是要通過CPU的參與的,與單獨的一次讀寫操作相比,burst只需要提供一個其實地址就行了,以後的地址依次加1,而非burst操作每次都要給出地址,以及需要中間的一些應答、等待狀態等等。如果是對地址連續的讀取,burst效率高得多,但如果地址是跳躍的,則無法采用burst操作

一般芯片的dma有基本功能。

1、普通的內存、外設間互傳數據,一次性的。

PCI設備DMA控制器,設置好後DMA 控制器的寄存器,PCI設備就會通過PCI總線向其他設備發送信號。

2、支持鏈表的,美其名曰“scatter”,內核有struct scatter可以參考。

說一下註意點:

dma有burst、burst size、transfer的概念:

burst:

dma實際上是一次一次的申請總線,把要傳的數據總量分成一個一個小的數據塊。比如要傳64個字節,那麽dma內部可能分為2次,一次傳64/2=32個字節,這個2(a)次呢,就叫做burst。這個burst是可以設置的。這32個字節又可以分為32位 *8或者16位*16來傳輸。

transfer size:

就是數據寬度,比如8位、32位,一般跟外設的FIFO相同。

burst size:

就是一次傳幾個 transfer size.

配置數據寬度為32位。一次傳8個32位=32個字節。

那麽如果總長度為128字節,那麽實際dma設置的長度為 128/32 = 4.

很好的一篇文章:基於FPGA的PCI接口DMA傳輸的設計與實現

http://www.docin.com/p-755091145.html

轉載自:http://blog.csdn.net/qingfengtsing/article/details/24124661

PCI總線 DMA burst 基本概念