適應多種時序的DMA控制器設計
dam_cnt表示在本次多block操作中,SD卡控制器從DMA存儲器中讀出數據的字節數(DMA讀模式)或寫入DMA存儲器中的數據字節數(DMA寫模式)。
顯然,在該圖像協處理器中,每個CMD18和CMD25完成之后,dam_in_cnt和dma_cnt都將與dma_num相等,且均為5 120。
2.2.1 multiple block write
如前所述,每次multiple block write要向卡寫入10個block數據,即10x512=5 120字節。為了提高寫卡速度,基帶芯片首先向DMA存儲器中寫入1個block數據,然后向SD卡發出CMD25(multi block write command)。當SD卡控制器發出CMD25并接收到該命令的應答信號后,立即向DMA控制器發出dma_req信號,準備從DMA存儲器中讀取數據。當DMA控制器監測到dma_req為1且dma_write為0后,將依次進入狀態1、狀態2、狀態3、狀態4。在狀態4中,其會檢查基帶芯片的寫信號host_dma_wr是否有效,如無效,其將從DMA存儲器中讀取當前地址的數據,然后再將DMA存儲器的地址加1并進入狀態5;如 host_dma_wr有效,則DMA控制器將等待一個時鐘周期,在下個時鐘的上升沿再去判斷host_dma_wr的極性,若其失效再讀DMA存儲器。也就是說基帶芯片對DMA存儲器的操作有更高優先級,利用這個辦法就可以使基帶芯片和SD卡控制器可以盡量并行工作以加快寫卡速度。在狀態5中,DMA讀狀態機做如狀態4的操作,這是因為dma_rdata的數據線寬度為32位,而dma_memory_data-out的數據線寬度是16位,所以必須要讀2次DMA存儲器再做一次DMA讀傳送。在狀態6中,DMA狀態機將向SD卡控制器發出dma_ack(數據使能信號)和dma- rdata[31:0],隨后進入狀態7。在狀態7中,DMA狀態機將做3個重要判斷,首先其判斷dma-cnt是否等于dma_num,如相等則意味著 SD卡控制器在本次多block操作中已經讀取了全部5 120個字節數據,狀態機將回到初始狀態以準備下一次DMA操作;若不相等,則判斷dma_c-nt是否等于dma_in_cnt,若dma_cnt等于 dma_in_cnt,則意味著基帶芯片寫入DMA存儲器的所有數據均已被SD卡控制器讀出,DMA存儲器已經為空,但數據量還沒有達到5 120字節,DMA狀態機將進入狀態8即等待狀態,只有基帶芯片寫入新的數據后,SD卡控制器才能回到狀態4繼續讀取數據,這個分支主要是應用于SD卡控制器寫卡速度快于基帶芯片寫DMA存儲器的情況;若dma_cnt不等于dma_in_cnt,則DMA狀態機將檢查dma_req信號的極性,如其為 1,狀態機將轉至狀態4讀取下一個32位數據,如為0則意味著此時SD卡控制器寫卡的速度要慢于DMA讀數據的速度,其前面通過DMA接口讀出的數據還沒有完全寫入SD卡,所以SD卡控制器將暫停從DMA存儲器中讀取數據,DMA控制器的狀態機也將在狀態7處于等待狀態,等待dma_req重新為1。當 dma_req再次為1后,狀態機將回到狀態4開始新的32位數據的DMA讀操作。最后,當第5 119和5 120個字節被從DMA存儲器讀出后,DMA狀態機將在狀態7中檢查到dma_cnt=dma_num,標志至此,DMA狀態機完成了一次DMA讀操作的全過程。SD卡控制器將向基帶芯片發出中斷信號,基帶芯片響應該中斷后將啟動下一個讀卡或寫卡的命令。其讀狀態流程圖如圖2所示。

2.2.2 multiple block read
在該圖像協處理器中每次multiple block read要從卡讀出10個block數據并將其全部寫入DMA存儲器當中。當處于初始狀態(狀態0)的DMA狀態機發現dma_req為1且 dma_write信號為1時,即明確SD卡控制器將開始DMA寫操作,其將依次進入狀態1、狀態2、狀態3、狀態4。在狀態1中,DMA狀態機會向SD 卡控制器發出dma_ack信號,由于存儲器讀存在延時,SD卡控制器將在此后的第二個時鐘上升沿(即DMA狀態機在狀態3時)送出dma_wdata。 DMA控制器將dma_wdata暫存一個時鐘周期后,會在狀態4和狀態5中把此32位數據依次寫入DMA存儲器,dma_memory_addr也將在這兩個狀態分別加1。在狀態7中,DMA控制器也將做2個判斷,首先會判斷dma_cnt和dma_num是否相等,若相等說明本次 multipleblock read的全部5 120字節數據已經寫入DMA存儲器中,DMA狀態機將回到狀態0等待下一次DMA操作指令;若不相等,則判斷dma_req是否為1,如果為1則意味著繼續做本次DMA寫操作,DMA狀態機也將回到狀態1,開始下一個32位數據的寫入;如果dma_req為0則說明SD卡控制器讀卡的速度較慢,暫時還沒有新的32位數據要寫入,DMA狀態機也將在狀態7處于等待狀態,直至dma_req再次為1,狀態機才回
評論