DMA資料傳輸

2021-08-20 05:51:40 字數 3506 閱讀 1002

sd主控制器與系統儲存空間進行資料傳輸時使用sdma或adma2傳輸方式,需要配置的引數包括:一次傳輸的資料塊數、每塊資料大小、傳輸邊界、傳輸方向、傳輸資料首位址、dma傳輸模式等資訊

(1)單dma傳輸(sdma)

單dma傳輸的流程圖如下圖所示,在這種模式下,資料搬運通過sdma完成,無需處理器參與,釋放了cpu資源。在sdma模式下,

system address儲存的是資料傳輸的實際位址

。因此sdma傳輸可以從任何位元組開始,對位址沒有限制。資料傳輸塊大小的定義需要根據fifo深度來設定,其大小不能超過fifo資料容量,一次連續傳輸資料塊數與傳輸的資料量有關。

當傳輸達到sdma儲存邊界時,sdma控制器將停止當前傳輸並產生中斷給cpu,需要cpu對sdma資料傳輸首位址進行更新才能繼續進行資料傳輸,降低資料傳輸速度!比如系統邊界4kb的條件下,傳輸32kb的資料需要產生的8次中斷才能完成資料的傳輸。

操作步驟:

系統記憶體的資料位置被設定為sdma系統位址暫存器。

設定blocksize暫存器,對cmd17, cmd18, cmd24, cmd25訪問有效,僅在未發生傳輸時可以修改。

設定blockcount暫存器,僅在多塊傳輸模式下有效,控制器在每傳輸完一塊後自減,只有在空閒時可以修改。設定argument暫存器,該暫存器需寫入sd訪問cmd的bit[39:8];

設定transfer mode暫存器,主機驅動選擇多塊還是單塊,使能塊計數,資料傳輸的方向,自動使能cmd12和使能dma。

設定command暫存器。注意:寫入命令暫存器的高位元組[3]時,發出sd命令並啟動sdma。

然後等待中斷命令完成。

向中斷狀態暫存器位寫『1』清除中斷位;

讀response響應暫存器獲取從sd卡得到的相關資訊;

等待傳輸完成中斷和dma中斷。

如果傳輸完成設定為1,則如果dma中斷設定為1,則轉到步驟(14),否則轉到步驟(12).transfer complete比dma interrupt高。

normal interrupt status暫存器的dma中斷中寫入1清除該位。

將下乙個資料位置的下乙個system address設定到system address暫存器並轉到步驟(10)。

在normal interrupt status暫存器中向傳輸完成和dma中斷寫入1,以清除此位。

注意:步驟(2)和步驟(3)可以同時執行。步驟(5)和步驟(6)也可以同時執行。

(2)adma2傳輸

使用adma資料傳輸沒有儲存邊界,不需要產生cpu中斷,提高資料資料傳輸速度。使用adma傳輸時,adma system address暫存器裡建立一張描述鍊錶(descriptor table),sd主控制器通過使用adma系統位址確定描述鍊錶的首位址,從而訪問鍊錶中的每乙個描述項內容。adma2描述表中每個描述項包含64位,高32位用於儲存完整的資料傳輸首位址,其後的16位用於定義存放在以高32位為首位址儲存空間內的資料長度,表述項對應的操作用兩位act來定義,低三位標誌位為資料有效標誌位val、結束標誌位end和中斷標誌位int。

admades[0].dwaddress = 0x40000000+(atcm_rom+0x1000);//cpu訪問位址和dma訪問位址相差0x40000000

admades[0].wlen = 0x200;//分段大小必須為blocksize的整數倍

admades[0].wattribute = 0x21;

admades[1].dwaddress = 0x40000000+(atcm_rom+0x1700);

admades[1].wlen = 0x200;

admades[1].wattribute = 0x23;

adma採用分散—聚集的dma演算法,通過描述表來控制資料傳輸,不需要在每一次位址邊界向cpu傳送中斷訊號。使用adma1模式進行資料傳輸時必須以4kb作為最小頁面位址的限制,降低了儲存空間的利用率;adma2模式解除了這一限制,amda2模式的傳輸策略與adma1相同,使用描述鍊錶來控制dma傳輸過程中資料在系統儲存空間的訪問位置和規模。

操作步驟:

在系統記憶體中為adma建立描述符表。

在adma system address暫存器中設定adma的描述符位址。

設定block count暫存器對應於乙個塊的執行資料位元組長度的值。

設定block count暫存器與執行的資料塊數相對應的值。

如果在transfer mode暫存器中啟用的塊數設定為1,那麼總資料長度可以由block count暫存器和描述符表指定。這兩個引數表示相同的資料長度。但是,傳輸長度受到block count暫存器的限制。

如果transfer mode暫存器中啟用的塊計數設定為0,則總資料長度不是block count暫存器指定,而是描述符表。在這種情況下,adma讀取的資料要多於從sd卡中編寫的長度。太多的讀操作會非同步地終止,當adma完成時,額外的讀取資料就會被丟棄。

將引數值設定為引數1暫存器。

設定transfer mode暫存器。主機驅動程式決定多個/單個塊選擇、塊數啟用、資料傳輸方向、自動cmd12啟用和dma啟用。

設定command暫存器。

注意:寫入command暫存器的高位元組[3]時,發出sd命令,並啟動dma。

然後等待中斷命令完成。

將normal interrupt status暫存器中的命令完成寫入1清除該位。

讀response響應暫存器獲取從sd卡得到的相關資訊;

等待傳輸完成中斷和adma錯誤中斷。

如果傳輸完成設定為1,則轉到步驟(13);如果adma錯誤中斷設定為1,則轉到步驟(14)。

將normal interrupt status暫存器中的傳送完成狀態寫入1清除位。

將1寫入錯誤中斷狀態暫存器中的adma錯誤中斷狀態,以清除該錯誤位。

中止adma操作。sd卡操作應該通過發出中止命令來停止。如果需要時,主機驅動程式檢查adma錯誤狀態暫存器,以檢測adma產生錯誤的原因。

注意:步驟(3)和步驟(4)可以同時執行。步驟(6)和步驟(7)也可以同時執行。

linux s3c2440 dma驅動開發

C SFTP資料傳輸

我們有些客戶公司的資料比較重要,為了安全集團公司內部都使用的是區域網,但是有時候又不得不予外界網際網路做資料互動,所以有些不重要的系統是放在外界網際網路的,這樣以來內部系統和外部系統的資料互動就成為了問題,這樣以來就使用到了sftp伺服器來作為資料傳輸的中介。下面不說了,直接上c 此處使用了第三方動...

資料傳輸方式

資料傳輸方式 1 並行傳輸與序列傳輸 並行傳輸指的是資料以成組的方式,在多條並行通道上同時進行傳輸。常用的就是將構成一 個字元 的幾位二進位製碼,分別在幾個並行通道上進行傳輸。例如,採用8單位 的字 符 可以用8個通道並行傳輸。一次傳送乙個字元,因此收 發雙方不存在字元的同步問題,不需要另加 起 止...

flex wcf 資料傳輸

最近跟哲子做個專案,本來可以用asp.net輕鬆搞定,但是鑑於大家都比較想試用下學習已久的技術,所以便出現了flex與wcf entity這樣得前後臺組合。專案開始之初,著實為兩者之間的互動頭疼一番,在經過大量資料得獲取後,終於解決,以下寫出簡要的注意事項,由於wcf 我還是個徹頭徹尾的門外漢,資料...