可適應多種時(shí)序情況的DMA控制器設計
摘要:在以SD卡為圖像存儲器件的圖像協(xié)處理器中,基帶芯片和SD卡控制器在速度上的差異經(jīng)常會(huì )導致數據傳輸錯誤。為解決此問(wèn)題,設計了一種可適應多種時(shí)序情況的DMA控制器。該DMA控制器的狀態(tài)機,一方面對基帶芯片和SD卡控制器的操作請求進(jìn)行仲裁,在響應基帶芯片請求的同時(shí),適當推遲SD卡控制器的請求;另一方面對DMA讀寫(xiě)的數據進(jìn)行計數,并以此判斷SD卡的一次多塊讀或多塊寫(xiě)操作是否完成;最后對基帶芯片和SD卡控制器的速度做出判斷,必要時(shí)暫停速度較快一方的操作。實(shí)際工作表明,該DMA控制器能夠在基帶芯片和SD卡控制器之間
正確傳輸數據并使讀寫(xiě)SD卡的速度達到210 kB/s。
關(guān)鍵詞:移動(dòng)終端;基帶芯片;圖像處理;SD卡;DMA控制器
目前,以手機為代表的移動(dòng)終端設備已經(jīng)成為集圖像、游戲、商務(wù)等多種功能于一體的工作和娛樂(lè )平臺。此平臺為了給用戶(hù)提供豐富和高質(zhì)量的視覺(jué)享受,大都設置圖像協(xié)處理器,由其來(lái)完成數字圖像的采集、處理、壓縮、存儲等功能。然而,高速度和高分辨率已經(jīng)成為數字圖像的方向發(fā)展,它們對圖像協(xié)處理器的設計提出了更高的要求。
為了使圖像協(xié)處理器能夠更快地存儲更多的數字圖像,這里介紹一種以SD卡為圖像存儲器件的圖像協(xié)處理器。采用SD卡存儲圖像數據有兩方面的原因:1)SD卡體積小、功耗低,非常符合移動(dòng)終端設備的系統要求;2)SD卡的存儲容量非常大,目前最高可達到32GB,另外其最高時(shí)鐘頻率為25MHz,讀寫(xiě)的極限速度可以達到12.5MB/s。所以SD卡對于分辨率越來(lái)越高、速度越來(lái)越快的數字圖像,無(wú)疑是理想的存儲器件。
但SD卡控制器對DMA接口的靈活性有較高要求。這首先有協(xié)議方面的原因,SD卡控制器每次讀或寫(xiě)卡的數據量應為512字節的整數倍但在圖像協(xié)處理器中提供數據的基帶芯片寫(xiě)入數據時(shí)可能被某個(gè)中斷源打斷,故不能保證每次都連續寫(xiě)入512字節整數倍個(gè)數據,所以DMA接口的控制器在此情況下必須能夠使SD卡控制器在寫(xiě)完已有數據后暫停寫(xiě)卡操作;其次有速度方面的原因,基帶芯片寫(xiě)數據的速度與SD卡控制器寫(xiě)SD卡的速度有很大差異,當基帶芯片要寫(xiě)入新的數據時(shí),極有可能SD卡控制器還在通過(guò)DMA接口讀取數據,所以DMA控制器此時(shí)必須能夠使基帶芯片的寫(xiě)入和SD卡控制器的讀出互不干擾。
本文所設計的可適應于多種時(shí)序情況的DMA控制器,被應用于該圖像協(xié)處理器之中后,能夠很好地解決上述問(wèn)題。
1 圖像協(xié)處理器的系統結構
圖1所示為該DMA控制器所處圖像協(xié)處理器的系統結構,下面將對其的系統構成和數據流程做詳細說(shuō)明。
1.1 系統構成
基帶芯片為移動(dòng)終端設備的系統控制核心。其通過(guò)外部存儲器接口總線(xiàn)(External eMI,Memory Interface bus)與該圖像協(xié)處理器的控制端口相連?;鶐酒粌H控制著(zhù)圖像協(xié)處理器所有模塊的工作模式,而且負責圖像數據的傳送。EMI總線(xiàn)數據線(xiàn)寬度為16位,其控制的圖像顯示終端為分辨率為320x240的LCD。
圖像傳感器(sensor)為感光器件,其將接收到的光信號轉為電信號,并在內部通過(guò)模擬/數字轉換產(chǎn)生數字圖像,在該圖像協(xié)處理器設計中采用分辨率為640x480的圖像傳感器,其的工作時(shí)鐘為24 MHz。
圖像處理模塊,即ISP(Image Signal Processing)模塊被用于圖像處理,包括去壞點(diǎn)、去噪聲、邊界增強等功能。
圖像壓縮模塊被用于對圖像處理模塊輸出的YUV422格式數據進(jìn)行JPEG壓縮。
SD卡控制器模塊負責與SD卡的命令和數據交互,所有對SD卡的操作都由基帶芯片配置SD卡控制器的相關(guān)寄存器完成。其與SD卡的接口包括CLK(SD卡的時(shí)鐘信號線(xiàn))、CMD(SD卡的命令線(xiàn))、DATA0~DATA3(SD卡的4根數據線(xiàn))。在與SD卡的數據交互中,一般是以block(512字節)為
單位的,并且在啟動(dòng)寫(xiě)卡命令之后,SD卡控制器必須在250 ms(SD version 2.0)內將所有數據寫(xiě)入SD卡中。
DMA控制器為基帶芯片與SD卡控制器的接口模塊,用于對寫(xiě)卡數據和讀卡數據做暫時(shí)存儲。其的本質(zhì)功能是協(xié)調基帶芯片和SD卡控制器之間的速度差異。存儲數據的DMA存儲器容量為5 120字節,即10個(gè)block數據。
1.2 數據流程
在該圖像協(xié)處理器中,所有模塊時(shí)鐘頻率均為48 MHz,其被2分頻之后送至圖像傳感器,圖像傳感器以24 MHz頻率送出格式為YUV422的640x480圖像。
該圖像協(xié)處理器有2種模式:圖像預覽模式和連拍模式。圖像預覽模式用于拍照前的圖像預覽,拍照者可以在LCD上看到將被拍下的圖像。連拍模式用于連續拍攝圖像,并將每一幅拍下的照片存入SD卡當中。
1.2.1 圖像預覽模式的數據流程
在圖像預覽模式下,圖像傳感器以24 MHz頻率送出分辨率為640x480且格式為YUV422的圖像,幀率為30幀/s。數據被48 MHz系統時(shí)鐘同步后送入圖像處理模塊。圖像處理模塊將針對圖像傳感器的特點(diǎn)對圖像進(jìn)行處理以提高圖像質(zhì)量,然后將圖像分辨率從640x480縮小至320x240以適應LCD的顯示分辨率,并將數據格式從YUV422轉為RGB565。最后,基帶芯片通過(guò)EMI接口將圖像數據讀出,直接寫(xiě)入LCD的顯示緩沖區后在LCD上顯示出來(lái)。
1.2.2 連拍模式的數據流程
當基帶芯片啟動(dòng)連拍模式后,其首先配置圖像傳感器,使其以10幀/s的幀率送出分辨率為640x480的數字圖像,數據格式仍然為YUV42 2。此時(shí)每幀的周期為100 ms,其中幀有效時(shí)間為30 ms,幀消隱時(shí)間為70 ms。
當數據送入圖像處理模塊后,該模塊仍對圖像進(jìn)行處理并將圖像分辨率從640x480縮小至320x240,之后將數據格式從YUV422轉為RGB56 5?;鶐酒踩匀煌ㄟ^(guò)EMI接口將該圖像數據讀出,并直接寫(xiě)入LCD的顯示緩沖區中,這樣在連拍的時(shí)候,仍可以在LCD上看到被拍下的圖像。
圖像處理模塊在送出預覽數據的同時(shí)也將320x240的YUV422數據送至圖像壓縮模塊。為了兼顧壓縮比和圖像質(zhì)量,一般配置壓縮比在10:1左右,這樣一幅320x240的圖像經(jīng)JPEG壓縮后的數據量為320x240x2/10=15 360字節。為留出適當的備用空間,圖像壓縮模塊將編碼之后的數據存入一個(gè)容量為8 192x16位的存儲器中,在此命名為JPEG_MEM。當一幅圖像編碼完成時(shí),即在圖像傳感器進(jìn)入幀消隱階段之后,JPEG_MEM中已經(jīng)存了一幅壓縮之后的圖像。隨后圖像壓縮模塊向基帶芯片發(fā)出中斷信號,基帶芯片在從圖像處理模塊接收了當前預覽圖像的最后一部分數據并送LCD顯示后,將響應該中斷,從JPEG_MEM中讀出JPEG格式圖片,存入片外的存儲器中。經(jīng)實(shí)際測試可知,基帶芯片做一次EMI讀取大約需要時(shí)間250 ns,因為EMI數據線(xiàn)寬度為16位,所以在此250 ns內基帶芯片將從JPEG_MEM中讀出2個(gè)字節,這樣讀完所有15 360個(gè)字節需要15 360x250/2=1.92 ms。在基帶芯片讀取JPEG數據之前,其將最后一部分預覽數據讀出并送LCD顯示也需要1 ms左右,至此每幀圖像70 ms的幀消隱時(shí)間在基帶芯片讀完JPEG數據后還剩余70-1-1.92=67.08 ms。
當基帶芯片讀完JPEG數據后,將立即準備將數據寫(xiě)入SD卡中。其首先將操作文件鏈表,在SD卡上為即將寫(xiě)入的JPEG圖片分配相應空間,并將這些空間的原內容擦除。因為在寫(xiě)卡和擦卡之后,SD卡需要過(guò)一定時(shí)間后才能接受新的命令,所以操作文件鏈表和擦卡比較耗時(shí)間,一般需要15 ms左右。在此之后,為了提高寫(xiě)卡速度,基帶芯片先將一部分數據(如512字節)利用DMA控制器寫(xiě)入存儲器中,這需要的時(shí)間為250 nsx512/2=0.064 ms,然后配置SD卡控制器向SD卡發(fā)出CMD25(multiply block write conlluand)命令?;鶐酒O置每個(gè)CMD25向卡寫(xiě)入10個(gè)block數據。在接收到SD卡發(fā)回的響應后,SD卡控制器將利用DMA接口從DMA存儲器中讀出圖像數據并同時(shí)將數據寫(xiě)入SD卡中。在SD卡控制器寫(xiě)卡的同時(shí),基帶芯片將剩余的9個(gè)block數據寫(xiě)入DMA存儲器。SD卡的時(shí)鐘頻率為24 MHz,為其工作在4根數據線(xiàn)模式時(shí),其傳送完所有5 120字節的數據只需要42nsx2x5120=0.43 ms。但是基帶芯片寫(xiě)完剩余的9個(gè)block需要250nsx512x9/2=0.576 ms>0.43 ms,所以從基帶芯片寫(xiě)第1個(gè)block開(kāi)始到SD卡控制器把最后一個(gè)block寫(xiě)入SD卡大約需要時(shí)間為0.064+0.576+0.045=0.685 ms。在此之后,SD卡將進(jìn)入編程狀態(tài)(programming狀態(tài)),這段時(shí)間因卡而異,在實(shí)際調試中使用的卡一般編程狀態(tài)會(huì )持續5 ms左右。至此基帶芯片完成一次5 120字節的寫(xiě)卡需要時(shí)間為:15+0.685+5=20.685ms。如前所述每幅JPEG壓縮后的320x240的圖片大約為15360字節,即30個(gè)block,所以寫(xiě)完一幅圖片需要的總時(shí)間約為3x20.685=62.055ms,其小于前面計算的67.08ms,所以基帶芯片和SD卡控制器可以在每幀圖像的幀消隱時(shí)間內完成寫(xiě)卡操作。
評論