適應(yīng)多種時(shí)序的DMA控制器設(shè)計(jì)
當(dāng)基帶芯片讀完JPEG數(shù)據(jù)后,將立即準(zhǔn)備將數(shù)據(jù)寫入SD卡中。其首先將操作文件鏈表,在SD卡上為即將寫入的JPEG圖片分配相應(yīng)空間,并將這些空間的原內(nèi)容擦除。因?yàn)樵趯懣ê筒量ㄖ?,SD卡需要過一定時(shí)間后才能接受新的命令,所以操作文件鏈表和擦卡比較耗時(shí)間,一般需要15 ms左右。在此之后,為了提高寫卡速度,基帶芯片先將一部分?jǐn)?shù)據(jù)(如512字節(jié))利用DMA控制器寫入存儲(chǔ)器中,這需要的時(shí)間為250 nsx512/2=0.064 ms,然后配置SD卡控制器向SD卡發(fā)出CMD25(multiply block write conlluand)命令。基帶芯片設(shè)置每個(gè)CMD25向卡寫入10個(gè)block數(shù)據(jù)。在接收到SD卡發(fā)回的響應(yīng)后,SD卡控制器將利用DMA接口從 DMA存儲(chǔ)器中讀出圖像數(shù)據(jù)并同時(shí)將數(shù)據(jù)寫入SD卡中。在SD卡控制器寫卡的同時(shí),基帶芯片將剩余的9個(gè)block數(shù)據(jù)寫入DMA存儲(chǔ)器。SD卡的時(shí)鐘頻率為24 MHz,為其工作在4根數(shù)據(jù)線模式時(shí),其傳送完所有5 120字節(jié)的數(shù)據(jù)只需要42nsx2x5120=0.43 ms。但是基帶芯片寫完剩余的9個(gè)block需要250nsx512x9/2=0.576 ms>0.43 ms,所以從基帶芯片寫第1個(gè)block開始到SD卡控制器把最后一個(gè)block寫入SD卡大約需要時(shí)間為 0.064+0.576+0.045=0.685 ms。在此之后,SD卡將進(jìn)入編程狀態(tài)(programming狀態(tài)),這段時(shí)間因卡而異,在實(shí)際調(diào)試中使用的卡一般編程狀態(tài)會(huì)持續(xù)5 ms左右。至此基帶芯片完成一次5 120字節(jié)的寫卡需要時(shí)間為:15+0.685+5=20.685ms。如前所述每幅JPEG壓縮后的320x240的圖片大約為15360字節(jié),即30 個(gè)block,所以寫完一幅圖片需要的總時(shí)間約為3x20.685=62.055ms,其小于前面計(jì)算的67.08ms,所以基帶芯片和SD卡控制器可以在每幀圖像的幀消隱時(shí)間內(nèi)完成寫卡操作。
2 DMA控制器的實(shí)現(xiàn)
2.1 DMA控制器接口
為了更準(zhǔn)確地描述該DMA控制器的工作流程,其主要接口信號(hào)介紹如下。DMA控制器與3部分邏輯的接口為:基帶芯片的EMI接口、DMA存儲(chǔ)器接口、SD卡控制器。
1)與基帶芯片的接口 這個(gè)接口中,與該DMA控制器關(guān)系最密切的信號(hào)是host_dma_wr,其為基帶芯片送給DMA存儲(chǔ)器的寫信號(hào),這個(gè)信號(hào)低電平有效。
2)DMA存儲(chǔ)器接口 dma_memory_addr為DMA存儲(chǔ)器的地址信號(hào)。為了能夠保存10個(gè)block的數(shù)據(jù),DMA存儲(chǔ)器的容量為2560x16=5120字節(jié),所以dma_memory_addr的位寬為12位;drag_memory_datain為DMA存儲(chǔ)器的數(shù)據(jù)輸入端口,位寬為16 位;dma_memory_dataout為DMA存儲(chǔ)器的數(shù)據(jù)輸出端口,位寬為16位;dma_memory_wen為DMA存儲(chǔ)器的寫使能信號(hào),低電平有效。
3)SD卡控制器接口 dma_req是SD卡控制器發(fā)出的DMA請(qǐng)求信號(hào),高電平有效。其為DMA控制器做速度協(xié)調(diào)的重要信號(hào),如果其為高則表示SD卡控制器要求與DMA存儲(chǔ)器做DMA傳送;如果該信號(hào)被置低,可能存在兩種情況,①可能是本次DMA傳送已經(jīng)完成,②可能是SD卡控制器的讀或?qū)懣ㄋ俣鹊陀谄洳僮鱀MA存儲(chǔ)器的速度,所以SD卡控制器暫停DMA操作;dma_write是SD卡控制器發(fā)出的DMA寫標(biāo)志信號(hào)。如果其為1表示SD卡控制器在做讀卡操作,并準(zhǔn)備將讀出的數(shù)據(jù)寫入DMA存儲(chǔ)器;如果其為0表示SD卡控制器在做寫卡操作,并準(zhǔn)備從DMA存儲(chǔ)器中讀取數(shù)據(jù);dma_ ack是DMA控制器發(fā)給SD卡控制器的應(yīng)答信號(hào),其相當(dāng)于DMA傳輸數(shù)據(jù)的有效信號(hào);dma_rdata是DMA讀模式的數(shù)據(jù)輸出端口,位寬為32 位;dma_ wdata是DMA寫模式的數(shù)據(jù)輸入端口,位寬為32位。
2.2 DMA控制器的工作流程
為了使DMA控制器能更靈活地適應(yīng)各種操作情況并很好的完成2個(gè)操作源(基帶芯片、SD卡控制器)的速度匹配功能。下面將分別就multi-ple block write命令(CMD25)和multiple block read命令(CMD18)對(duì)該狀態(tài)機(jī)的工作流程進(jìn)行說明。
先將狀態(tài)機(jī)中的幾個(gè)重要變量做如下說明:
dma_num表示在一次多block讀(CMD18)或?qū)?CMD25)操作中,要向卡寫入或讀出多少個(gè)字節(jié)的數(shù)據(jù)。在該圖像協(xié)處理器中,每次讀或?qū)懣ǘ家僮?0個(gè)block數(shù)據(jù),所以dma_num將被設(shè)置為5 120;
dma_in_cnt表示在一次多block寫卡操作中,基帶芯片已經(jīng)向DMA存儲(chǔ)器中
評(píng)論