可適應(yīng)多種時(shí)序情況的DMA控制器設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:在以SD卡為圖像存儲(chǔ)器件的圖像協(xié)處理器中,基帶芯片和SD卡控制器在速度上的差異經(jīng)常會(huì)導(dǎo)致數(shù)據(jù)傳輸錯(cuò)誤。為解決此問題,設(shè)計(jì)了一種可適應(yīng)多種時(shí)序情況的DMA控制器。該DMA控制器的狀態(tài)機(jī),一方面對(duì)基帶芯片和SD卡控制器的操作請(qǐng)求進(jìn)行仲裁,在響應(yīng)基帶芯片請(qǐng)求的同時(shí),適當(dāng)推遲SD卡控制器的請(qǐng)求;另一方面對(duì)DMA讀寫的數(shù)據(jù)進(jìn)行計(jì)數(shù),并以此判斷SD卡的一次多塊讀或多塊寫操作是否完成;最后對(duì)基帶芯片和SD卡控制器的速度做出判斷,必要時(shí)暫停速度較快一方的操作。實(shí)際工作表明,該DMA控制器能夠在基帶芯片和SD卡控制器之間
正確傳輸數(shù)據(jù)并使讀寫SD卡的速度達(dá)到210 kB/s。
關(guān)鍵詞:移動(dòng)終端;基帶芯片;圖像處理;SD卡;DMA控制器
目前,以手機(jī)為代表的移動(dòng)終端設(shè)備已經(jīng)成為集圖像、游戲、商務(wù)等多種功能于一體的工作和娛樂平臺(tái)。此平臺(tái)為了給用戶提供豐富和高質(zhì)量的視覺享受,大都設(shè)置圖像協(xié)處理器,由其來完成數(shù)字圖像的采集、處理、壓縮、存儲(chǔ)等功能。然而,高速度和高分辨率已經(jīng)成為數(shù)字圖像的方向發(fā)展,它們對(duì)圖像協(xié)處理器的設(shè)計(jì)提出了更高的要求。
為了使圖像協(xié)處理器能夠更快地存儲(chǔ)更多的數(shù)字圖像,這里介紹一種以SD卡為圖像存儲(chǔ)器件的圖像協(xié)處理器。采用SD卡存儲(chǔ)圖像數(shù)據(jù)有兩方面的原因:1)SD卡體積小、功耗低,非常符合移動(dòng)終端設(shè)備的系統(tǒng)要求;2)SD卡的存儲(chǔ)容量非常大,目前最高可達(dá)到32GB,另外其最高時(shí)鐘頻率為25MHz,讀寫的極限速度可以達(dá)到12.5MB/s。所以SD卡對(duì)于分辨率越來越高、速度越來越快的數(shù)字圖像,無疑是理想的存儲(chǔ)器件。
但SD卡控制器對(duì)DMA接口的靈活性有較高要求。這首先有協(xié)議方面的原因,SD卡控制器每次讀或?qū)懣ǖ臄?shù)據(jù)量應(yīng)為512字節(jié)的整數(shù)倍但在圖像協(xié)處理器中提供數(shù)據(jù)的基帶芯片寫入數(shù)據(jù)時(shí)可能被某個(gè)中斷源打斷,故不能保證每次都連續(xù)寫入512字節(jié)整數(shù)倍個(gè)數(shù)據(jù),所以DMA接口的控制器在此情況下必須能夠使SD卡控制器在寫完已有數(shù)據(jù)后暫停寫卡操作;其次有速度方面的原因,基帶芯片寫數(shù)據(jù)的速度與SD卡控制器寫SD卡的速度有很大差異,當(dāng)基帶芯片要寫入新的數(shù)據(jù)時(shí),極有可能SD卡控制器還在通過DMA接口讀取數(shù)據(jù),所以DMA控制器此時(shí)必須能夠使基帶芯片的寫入和SD卡控制器的讀出互不干擾。
本文所設(shè)計(jì)的可適應(yīng)于多種時(shí)序情況的DMA控制器,被應(yīng)用于該圖像協(xié)處理器之中后,能夠很好地解決上述問題。
1 圖像協(xié)處理器的系統(tǒng)結(jié)構(gòu)
圖1所示為該DMA控制器所處圖像協(xié)處理器的系統(tǒng)結(jié)構(gòu),下面將對(duì)其的系統(tǒng)構(gòu)成和數(shù)據(jù)流程做詳細(xì)說明。
1.1 系統(tǒng)構(gòu)成
基帶芯片為移動(dòng)終端設(shè)備的系統(tǒng)控制核心。其通過外部存儲(chǔ)器接口總線(External eMI,Memory Interface bus)與該圖像協(xié)處理器的控制端口相連?;鶐酒粌H控制著圖像協(xié)處理器所有模塊的工作模式,而且負(fù)責(zé)圖像數(shù)據(jù)的傳送。EMI總線數(shù)據(jù)線寬度為16位,其控制的圖像顯示終端為分辨率為320x240的LCD。
圖像傳感器(sensor)為感光器件,其將接收到的光信號(hào)轉(zhuǎn)為電信號(hào),并在內(nèi)部通過模擬/數(shù)字轉(zhuǎn)換產(chǎn)生數(shù)字圖像,在該圖像協(xié)處理器設(shè)計(jì)中采用分辨率為640x480的圖像傳感器,其的工作時(shí)鐘為24 MHz。
圖像處理模塊,即ISP(Image Signal Processing)模塊被用于圖像處理,包括去壞點(diǎn)、去噪聲、邊界增強(qiáng)等功能。
圖像壓縮模塊被用于對(duì)圖像處理模塊輸出的YUV422格式數(shù)據(jù)進(jìn)行JPEG壓縮。
SD卡控制器模塊負(fù)責(zé)與SD卡的命令和數(shù)據(jù)交互,所有對(duì)SD卡的操作都由基帶芯片配置SD卡控制器的相關(guān)寄存器完成。其與SD卡的接口包括CLK(SD卡的時(shí)鐘信號(hào)線)、CMD(SD卡的命令線)、DATA0~DATA3(SD卡的4根數(shù)據(jù)線)。在與SD卡的數(shù)據(jù)交互中,一般是以block(512字節(jié))為
單位的,并且在啟動(dòng)寫卡命令之后,SD卡控制器必須在250 ms(SD version 2.0)內(nèi)將所有數(shù)據(jù)寫入SD卡中。
DMA控制器為基帶芯片與SD卡控制器的接口模塊,用于對(duì)寫卡數(shù)據(jù)和讀卡數(shù)據(jù)做暫時(shí)存儲(chǔ)。其的本質(zhì)功能是協(xié)調(diào)基帶芯片和SD卡控制器之間的速度差異。存儲(chǔ)數(shù)據(jù)的DMA存儲(chǔ)器容量為5 120字節(jié),即10個(gè)block數(shù)據(jù)。
1.2 數(shù)據(jù)流程
在該圖像協(xié)處理器中,所有模塊時(shí)鐘頻率均為48 MHz,其被2分頻之后送至圖像傳感器,圖像傳感器以24 MHz頻率送出格式為YUV422的640x480圖像。
該圖像協(xié)處理器有2種模式:圖像預(yù)覽模式和連拍模式。圖像預(yù)覽模式用于拍照前的圖像預(yù)覽,拍照者可以在LCD上看到將被拍下的圖像。連拍模式用于連續(xù)拍攝圖像,并將每一幅拍下的照片存入SD卡當(dāng)中。
1.2.1 圖像預(yù)覽模式的數(shù)據(jù)流程
在圖像預(yù)覽模式下,圖像傳感器以24 MHz頻率送出分辨率為640x480且格式為YUV422的圖像,幀率為30幀/s。數(shù)據(jù)被48 MHz系統(tǒng)時(shí)鐘同步后送入圖像處理模塊。圖像處理模塊將針對(duì)圖像傳感器的特點(diǎn)對(duì)圖像進(jìn)行處理以提高圖像質(zhì)量,然后將圖像分辨率從640x480縮小至320x240以適應(yīng)LCD的顯示分辨率,并將數(shù)據(jù)格式從YUV422轉(zhuǎn)為RGB565。最后,基帶芯片通過EMI接口將圖像數(shù)據(jù)讀出,直接寫入LCD的顯示緩沖區(qū)后在LCD上顯示出來。
1.2.2 連拍模式的數(shù)據(jù)流程
當(dāng)基帶芯片啟動(dòng)連拍模式后,其首先配置圖像傳感器,使其以10幀/s的幀率送出分辨率為640x480的數(shù)字圖像,數(shù)據(jù)格式仍然為YUV42 2。此時(shí)每幀的周期為100 ms,其中幀有效時(shí)間為30 ms,幀消隱時(shí)間為70 ms。
當(dāng)數(shù)據(jù)送入圖像處理模塊后,該模塊仍對(duì)圖像進(jìn)行處理并將圖像分辨率從640x480縮小至320x240,之后將數(shù)據(jù)格式從YUV422轉(zhuǎn)為RGB56 5。基帶芯片也仍然通過EMI接口將該圖像數(shù)據(jù)讀出,并直接寫入LCD的顯示緩沖區(qū)中,這樣在連拍的時(shí)候,仍可以在LCD上看到被拍下的圖像。
圖像處理模塊在送出預(yù)覽數(shù)據(jù)的同時(shí)也將320x240的YUV422數(shù)據(jù)送至圖像壓縮模塊。為了兼顧壓縮比和圖像質(zhì)量,一般配置壓縮比在10:1左右,這樣一幅320x240的圖像經(jīng)JPEG壓縮后的數(shù)據(jù)量為320x240x2/10=15 360字節(jié)。為留出適當(dāng)?shù)膫溆每臻g,圖像壓縮模塊將編碼之后的數(shù)據(jù)存入一個(gè)容量為8 192x16位的存儲(chǔ)器中,在此命名為JPEG_MEM。當(dāng)一幅圖像編碼完成時(shí),即在圖像傳感器進(jìn)入幀消隱階段之后,JPEG_MEM中已經(jīng)存了一幅壓縮之后的圖像。隨后圖像壓縮模塊向基帶芯片發(fā)出中斷信號(hào),基帶芯片在從圖像處理模塊接收了當(dāng)前預(yù)覽圖像的最后一部分?jǐn)?shù)據(jù)并送LCD顯示后,將響應(yīng)該中斷,從JPEG_MEM中讀出JPEG格式圖片,存入片外的存儲(chǔ)器中。經(jīng)實(shí)際測試可知,基帶芯片做一次EMI讀取大約需要時(shí)間250 ns,因?yàn)镋MI數(shù)據(jù)線寬度為16位,所以在此250 ns內(nèi)基帶芯片將從JPEG_MEM中讀出2個(gè)字節(jié),這樣讀完所有15 360個(gè)字節(jié)需要15 360x250/2=1.92 ms。在基帶芯片讀取JPEG數(shù)據(jù)之前,其將最后一部分預(yù)覽數(shù)據(jù)讀出并送LCD顯示也需要1 ms左右,至此每幀圖像70 ms的幀消隱時(shí)間在基帶芯片讀完JPEG數(shù)據(jù)后還剩余70-1-1.92=67.08 ms。
當(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)命令?;鶐酒O(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ǔ)器中寫入了多少個(gè)字節(jié)的數(shù)據(jù);
dam_cnt表示在本次多block操作中,SD卡控制器從DMA存儲(chǔ)器中讀出數(shù)據(jù)的字節(jié)數(shù)(DMA讀模式)或?qū)懭隓MA存儲(chǔ)器中的數(shù)據(jù)字節(jié)數(shù)(DMA寫模式)。
顯然,在該圖像協(xié)處理器中,每個(gè)CMD18和CMD25完成之后,dam_in_cnt和dma_cnt都將與dma_num相等,且均為5 120。
2.2.1 multiple block write
如前所述,每次multiple block write要向卡寫入10個(gè)block數(shù)據(jù),即10x512=5 120字節(jié)。為了提高寫卡速度,基帶芯片首先向DMA存儲(chǔ)器中寫入1個(gè)block數(shù)據(jù),然后向SD卡發(fā)出CMD25(multi block write command)。當(dāng)SD卡控制器發(fā)出CMD25并接收到該命令的應(yīng)答信號(hào)后,立即向DMA控制器發(fā)出dma_req信號(hào),準(zhǔn)備從DMA存儲(chǔ)器中讀取數(shù)據(jù)。當(dāng)DMA控制器監(jiān)測到dma_req為1且dma_write為0后,將依次進(jìn)入狀態(tài)1、狀態(tài)2、狀態(tài)3、狀態(tài)4。在狀態(tài)4中,其會(huì)檢查基帶芯片的寫信號(hào)host_dma_wr是否有效,如無效,其將從DMA存儲(chǔ)器中讀取當(dāng)前地址的數(shù)據(jù),然后再將DMA存儲(chǔ)器的地址加1并進(jìn)入狀態(tài)5;如host_dma_wr有效,則DMA控制器將等待一個(gè)時(shí)鐘周期,在下個(gè)時(shí)鐘的上升沿再去判斷host_dma_wr的極性,若其失效再讀DMA存儲(chǔ)器。也就是說基帶芯片對(duì)DMA存儲(chǔ)器的操作有更高優(yōu)先級(jí),利用這個(gè)辦法就可以使基帶芯片和SD卡控制器可以盡量并行工作以加快寫卡速度。在狀態(tài)5中,DMA讀狀態(tài)機(jī)做如狀態(tài)4的操作,這是因?yàn)閐ma_rdata的數(shù)據(jù)線寬度為32位,而dma_memory_data-out的數(shù)據(jù)線寬度是16位,所以必須要讀2次DMA存儲(chǔ)器再做一次DMA讀傳送。在狀態(tài)6中,DMA狀態(tài)機(jī)將向SD卡控制器發(fā)出dma_ack(數(shù)據(jù)使能信號(hào))和dma-rdata[31:0],隨后進(jìn)入狀態(tài)7。在狀態(tài)7中,DMA狀態(tài)機(jī)將做3個(gè)重要判斷,首先其判斷dma-cnt是否等于dma_num,如相等則意味著SD卡控制器在本次多block操作中已經(jīng)讀取了全部5 120個(gè)字節(jié)數(shù)據(jù),狀態(tài)機(jī)將回到初始狀態(tài)以準(zhǔn)備下一次DMA操作;若不相等,則判斷dma_c-nt是否等于dma_in_cnt,若dma_cnt等于dma_in_cnt,則意味著基帶芯片寫入DMA存儲(chǔ)器的所有數(shù)據(jù)均已被SD卡控制器讀出,DMA存儲(chǔ)器已經(jīng)為空,但數(shù)據(jù)量還沒有達(dá)到5 120字節(jié),DMA狀態(tài)機(jī)將進(jìn)入狀態(tài)8即等待狀態(tài),只有基帶芯片寫入新的數(shù)據(jù)后,SD卡控制器才能回到狀態(tài)4繼續(xù)讀取數(shù)據(jù),這個(gè)分支主要是應(yīng)用于SD卡控制器寫卡速度快于基帶芯片寫DMA存儲(chǔ)器的情況;若dma_cnt不等于dma_in_cnt,則DMA狀態(tài)機(jī)將檢查dma_req信號(hào)的極性,如其為1,狀態(tài)機(jī)將轉(zhuǎn)至狀態(tài)4讀取下一個(gè)32位數(shù)據(jù),如為0則意味著此時(shí)SD卡控制器寫卡的速度要慢于DMA讀數(shù)據(jù)的速度,其前面通過DMA接口讀出的數(shù)據(jù)還沒有完全寫入SD卡,所以SD卡控制器將暫停從DMA存儲(chǔ)器中讀取數(shù)據(jù),DMA控制器的狀態(tài)機(jī)也將在狀態(tài)7處于等待狀態(tài),等待dma_req重新為1。當(dāng)dma_req再次為1后,狀態(tài)機(jī)將回到狀態(tài)4開始新的32位數(shù)據(jù)的DMA讀操作。最后,當(dāng)?shù)? 119和5 120個(gè)字節(jié)被從DMA存儲(chǔ)器讀出后,DMA狀態(tài)機(jī)將在狀態(tài)7中檢查到dma_cnt=dma_num,標(biāo)志至此,DMA狀態(tài)機(jī)完成了一次DMA讀操作的全過程。SD卡控制器將向基帶芯片發(fā)出中斷信號(hào),基帶芯片響應(yīng)該中斷后將啟動(dòng)下一個(gè)讀卡或?qū)懣ǖ拿?。其讀狀態(tài)流程圖如圖2所示。
2.2.2 multiple block read
在該圖像協(xié)處理器中每次multiple block read要從卡讀出10個(gè)block數(shù)據(jù)并將其全部寫入DMA存儲(chǔ)器當(dāng)中。當(dāng)處于初始狀態(tài)(狀態(tài)0)的DMA狀態(tài)機(jī)發(fā)現(xiàn)dma_req為1且dma_write信號(hào)為1時(shí),即明確SD卡控制器將開始DMA寫操作,其將依次進(jìn)入狀態(tài)1、狀態(tài)2、狀態(tài)3、狀態(tài)4。在狀態(tài)1中,DMA狀態(tài)機(jī)會(huì)向SD卡控制器發(fā)出dma_ack信號(hào),由于存儲(chǔ)器讀存在延時(shí),SD卡控制器將在此后的第二個(gè)時(shí)鐘上升沿(即DMA狀態(tài)機(jī)在狀態(tài)3時(shí))送出dma_wdata。DMA控制器將dma_wdata暫存一個(gè)時(shí)鐘周期后,會(huì)在狀態(tài)4和狀態(tài)5中把此32位數(shù)據(jù)依次寫入DMA存儲(chǔ)器,dma_memory_addr也將在這兩個(gè)狀態(tài)分別加1。在狀態(tài)7中,DMA控制器也將做2個(gè)判斷,首先會(huì)判斷dma_cnt和dma_num是否相等,若相等說明本次multipleblock read的全部5 120字節(jié)數(shù)據(jù)已經(jīng)寫入DMA存儲(chǔ)器中,DMA狀態(tài)機(jī)將回到狀態(tài)0等待下一次DMA操作指令;若不相等,則判斷dma_req是否為1,如果為1則意味著繼續(xù)做本次DMA寫操作,DMA狀態(tài)機(jī)也將回到狀態(tài)1,開始下一個(gè)32位數(shù)據(jù)的寫入;如果dma_req為0則說明SD卡控制器讀卡的速度較慢,暫時(shí)還沒有新的32位數(shù)據(jù)要寫入,DMA狀態(tài)機(jī)也將在狀態(tài)7處于等待狀態(tài),直至dma_req再次為1,狀態(tài)機(jī)才回到狀態(tài)1,開始寫入下一個(gè)32位的數(shù)據(jù)。最后當(dāng)DMA控制器在狀態(tài)7時(shí)發(fā)現(xiàn)dma_cnt和dma_num相等,意味這本次DMA操作已經(jīng)完成,SD卡控制器也將向基帶芯片發(fā)出中斷信號(hào),基帶芯片響應(yīng)該中斷后將從DMA存儲(chǔ)器中讀取此5 120字節(jié)數(shù)據(jù)。其寫狀態(tài)流程圖如圖3所示。
3 仿真結(jié)果
該DMA控制器的核心即為文章第2部分中所述的DMA狀態(tài)機(jī),現(xiàn)將multiple block read和multiple block write的幾個(gè)關(guān)鍵時(shí)序情況的仿真波形顯示如下,dma_now_st則為DMA狀態(tài)機(jī)的狀態(tài)變量。
圖4(a)所示為一次DMA讀剛剛開始時(shí),DMA狀態(tài)機(jī)翻轉(zhuǎn)情況。在dma_req為1后,狀態(tài)機(jī)dma_now_st則依次進(jìn)入各個(gè)狀態(tài)。在dma_now_st為狀態(tài)4時(shí),讀出了DMA存儲(chǔ)器的地址0中的數(shù)據(jù)16'h4739,在dma_now-st為狀態(tài)5時(shí),讀出了DMA存儲(chǔ)器的地址1中的數(shù)據(jù)16'hlf0b,之后在dma_now_st為狀態(tài)6時(shí),此32位數(shù)據(jù)在dma_rdata端口被送出;
圖4(b)所示的是在一次DMA讀中,SD卡控制器寫卡速度較慢,其暫停DMA讀操作的情況。在DMA控制器送出地址12'h394和12'h395中的數(shù)據(jù)后,SD卡控制器發(fā)現(xiàn)DMA讀的速度較快,有可能覆蓋還未寫入卡的數(shù)據(jù),所以把dma_req拉低,暫停DMA讀;
圖4(c)所示的是一次DMA讀的結(jié)尾,此時(shí)DMA存儲(chǔ)器已經(jīng)讀完了地址0~12'h9ff中的所有5 120個(gè)字節(jié)的數(shù)據(jù),dma_now_st在狀態(tài)7中監(jiān)測到dma_cnt已經(jīng)等于dma_num,所以狀態(tài)機(jī)回到初始狀態(tài)0。
圖5(a)所示為在一次DMA寫剛剛開始時(shí),DMA狀態(tài)機(jī)dma_now_st的工作情況。從圖上可清楚看到當(dāng)dma_now_st處于狀態(tài)4和狀態(tài)5時(shí),DMA控制器將dma_wdata端口數(shù)據(jù)寫入DMA存儲(chǔ)器的地址0和地址1中。
圖5(b)所示為在做DMA寫時(shí),SD卡控制器讀卡速度較慢的情況。當(dāng)SD卡控制器在dma_now_st為狀態(tài)1時(shí)送出32位數(shù)據(jù)32'hb944da21后,其發(fā)現(xiàn)已不能在DMA狀態(tài)機(jī)的下一個(gè)狀態(tài)1時(shí)送出新的32位數(shù)據(jù),所以SD卡控制器將dma_req拉低。
圖5(c)所示為一次DMA寫的結(jié)尾,SD卡控制器送出最后一個(gè)32位數(shù)據(jù)32'hf83dea95后,已經(jīng)讀出了所有5 120字節(jié)的數(shù)據(jù),所以將dma_req拉低。dma_now-st也在向DMA存儲(chǔ)器的地址12'h9fe和12'h9ff寫完最后兩個(gè)16位數(shù)據(jù)后,回到初始狀態(tài)狀態(tài)0,至此一次CMD18命令操作完成。
4 結(jié)束語
隨著消費(fèi)者對(duì)視覺效果的要求越來越高,也必然要求各種移動(dòng)終端設(shè)備的圖像系統(tǒng)功能越來越豐富,性能越來越高,因此圖像協(xié)處理器的設(shè)計(jì)也變得更加重要。在此背景下,處于基帶芯片和SD卡控制器之間的DMA控制器部分將面臨更復(fù)雜的工作環(huán)境和更高的性能要求。這里所述的DMA狀態(tài)機(jī)能夠靈活適應(yīng)基帶芯片操作可能被打斷、基帶芯片寫DMA存儲(chǔ)器可能與DMA讀相沖突等多種信號(hào)時(shí)序情況,起到了很好的協(xié)調(diào)基帶芯片和SD卡控制器速度的作用,并使基帶芯片和SD卡控制器能夠盡量并行工作,使操作SD卡的速度達(dá)到210 kB/s,在實(shí)際工作中取得了很好的效果。