本文所設計的可適應于多種時序情況的DMA控制器,被應用于該圖像協處理器之中后,能夠很好地解決問題。
1 圖像協處理器的系統結構
圖1所示為該DMA控制器所處圖像協處理器的系統結構,下面將對其的系統構成和數據流程做詳細說明。
?
1.1 系統構成
基帶芯片為移動終端設備的系統控制核心。其通過外部存儲器接口總線(External eMI,Memory InteRFace bus)與該圖像協處理器的控制端口相連。基帶芯片不僅控制著圖像協處理器所有模塊的工作模式,而且負責圖像數據的傳送。EMI總線數據線寬度為16位,其控制的圖像顯示終端為分辨率為320x240的LCD。
圖像傳感器(sensor)為感光器件,其將接收到的光信號轉為電信號,并在內部通過模擬/數字轉換產生數字圖像,在該圖像協處理器設計中采用分辨率為640x480的圖像傳感器,其的工作時鐘為24 MHz。
圖像處理模塊,即ISP(Image Signal Processing)模塊被用于圖像處理,包括去壞點、去噪聲、邊界增強等功能。
圖像壓縮模塊被用于對圖像處理模塊輸出的YUV422格式數據進行JPEG壓縮。
SD卡控制器模塊負責與SD卡的命令和數據交互,所有對SD卡的操作都由基帶芯片配置SD卡控制器的相關寄存器完成。其與SD卡的接口包括CLK(SD卡的時鐘信號線)、CMD(SD卡的命令線)、DATA0~DATA3(SD卡的4根數據線)。在與SD卡的數據交互中,一般是以block(512字節) 為單位的,并且在啟動寫卡命令之后,SD卡控制器必須在250 ms(SD version 2.0)內將所有數據寫入SD卡中。
DMA控制器為基帶芯片與SD卡控制器的接口模塊,用于對寫卡數據和讀卡數據做暫時存儲。其的本質功能是協調基帶芯片和SD卡控制器之間的速度差異。存儲數據的DMA存儲器容量為5 120字節,即10個block數據。
1.2 數據流程
在該圖像協處理器中,所有模塊時鐘頻率均為48 MHz,其被2分頻之后送至圖像傳感器,圖像傳感器以24 MHz頻率送出格式為YUV422的640x480圖像。
該圖像協處理器有2種模式:圖像預覽模式和連拍模式。圖像預覽模式用于拍照前的圖像預覽,拍照者可以在LCD上看到將被拍下的圖像。連拍模式用于連續拍攝圖像,并將每一幅拍下的照片存入SD卡當中。
1.2.1 圖像預覽模式的數據流程
在圖像預覽模式下,圖像傳感器以24 MHz頻率送出分辨率為640x480且格式為YUV422的圖像,幀率為30幀/s。數據被48 MHz系統時鐘同步后送入圖像處理模塊。圖像處理模塊將針對圖像傳感器的特點對圖像進行處理以提高圖像質量,然后將圖像分辨率從640x480縮小至 320x240以適應LCD的顯示分辨率,并將數據格式從YUV422轉為RGB565。最后,基帶芯片通過EMI接口將圖像數據讀出,直接寫入LCD的顯示緩沖區后在LCD上顯示出來。
1.2.2 連拍模式的數據流程
當基帶芯片啟動連拍模式后,其首先配置圖像傳感器,使其以10幀/s的幀率送出分辨率為640x480的數字圖像,數據格式仍然為YUV42 2。此時每幀的周期為100 ms,其中幀有效時間為30 ms,幀消隱時間為70 ms。
當數據送入圖像處理模塊后,該模塊仍對圖像進行處理并將圖像分辨率從640x480縮小至320x240,之后將數據格式從YUV422轉為RGB56 5。基帶芯片也仍然通過EMI接口將該圖像數據讀出,并直接寫入LCD的顯示緩沖區中,這樣在連拍的時候,仍可以在LCD上看到被拍下的圖像。
圖像處理模塊在送出預覽數據的同時也將320x240的YUV422數據送至圖像壓縮模塊。為了兼顧壓縮比和圖像質量,一般配置壓縮比在10:1左右,這樣一幅320x240的圖像經JPEG壓縮后的數據量為320x240x2/10=15 360字節。為留出適當的備用空間,圖像壓縮模塊將編碼之后的數據存入一個容量為8 192x16位的存儲器中,在此命名為JPEG_MEM。當一幅圖像編碼完成時,即在圖像傳感器進入幀消隱階段之后,JPEG_MEM中已經存了一幅壓縮之后的圖像。隨后圖像壓縮模塊向基帶芯片發出中斷信號,基帶芯片在從圖像處理模塊接收了當前預覽圖像的最后一部分數據并送LCD顯示后,將響應該中斷,從 JPEG_MEM中讀出JPEG格式圖片,存入片外的存儲器中。經實際測試可知,基帶芯片做一次EMI讀取大約需要時間250 ns,因為EMI數據線寬度為16位,所以在此250 ns內基帶芯片將從JPEG_MEM中讀出2個字節,這樣讀完所有15 360個字節需要15 360x250/2=1.92 ms。在基帶芯片讀取JPEG數據之前,其將最后一部分預覽數據讀出并送LCD顯示也需要1 ms左右,至此每幀圖像70 ms的幀消隱時間在基帶芯片讀完JPEG數據后還剩余70-1-1.92=67.08 ms。
當基帶芯片讀完JPEG數據后,將立即準備將數據寫入SD卡中。其首先將操作文件鏈表,在SD卡上為即將寫入的JPEG圖片分配相應空間,并將這些空間的原內容擦除。因為在寫卡和擦卡之后,SD卡需要過一定時間后才能接受新的命令,所以操作文件鏈表和擦卡比較耗時間,一般需要15 ms左右。在此之后,為了提高寫卡速度,基帶芯片先將一部分數據(如512字節)利用DMA控制器寫入存儲器中,這需要的時間為250 nsx512/2=0.064 ms,然后配置SD卡控制器向SD卡發出CMD25(multiply block write conlluand)命令。基帶芯片設置每個CMD25向卡寫入10個block數據。在接收到SD卡發回的響應后,SD卡控制器將利用DMA接口從 DMA存儲器中讀出圖像數據并同時將數據寫入SD卡中。在SD卡控制器寫卡的同時,基帶芯片將剩余的9個block數據寫入DMA存儲器。SD卡的時鐘頻率為24 MHz,為其工作在4根數據線模式時,其傳送完所有5 120字節的數據只需要42nsx2x5120=0.43 ms。但是基帶芯片寫完剩余的9個block需要250nsx512x9/2=0.576 ms>0.43 ms,所以從基帶芯片寫第1個block開始到SD卡控制器把最后一個block寫入SD卡大約需要時間為 0.064+0.576+0.045=0.685 ms。在此之后,SD卡將進入編程狀態(programming狀態),這段時間因卡而異,在實際調試中使用的卡一般編程狀態會持續5 ms左右。至此基帶芯片完成一次5 120字節的寫卡需要時間為:15+0.685+5=20.685ms。如前所述每幅JPEG壓縮后的320x240的圖片大約為15360字節,即30 個block,所以寫完一幅圖片需要的總時間約為3x20.685=62.055ms,其小于前面計算的67.08ms,所以基帶芯片和SD卡控制器可以在每幀圖像的幀消隱時間內完成寫卡操作。
2 DMA控制器的實現
2.1 DMA控制器接口
為了更準確地描述該DMA控制器的工作流程,其主要接口信號介紹如下。DMA控制器與3部分邏輯的接口為:基帶芯片的EMI接口、DMA存儲器接口、SD卡控制器。
1)與基帶芯片的接口 這個接口中,與該DMA控制器關系最密切的信號是host_dma_wr,其為基帶芯片送給DMA存儲器的寫信號,這個信號低電平有效。
2)DMA存儲器接口 dma_memory_addr為DMA存儲器的地址信號。為了能夠保存10個block的數據,DMA存儲器的容量為2560x16=5120字節,所以dma_memory_addr的位寬為12位;drag_memory_datain為DMA存儲器的數據輸入端口,位寬為16 位;dma_memory_dataout為DMA存儲器的數據輸出端口,位寬為16位;dma_memory_wen為DMA存儲器的寫使能信號,低電平有效。
3)SD卡控制器接口 dma_req是SD卡控制器發出的DMA請求信號,高電平有效。其為DMA控制器做速度協調的重要信號,如果其為高則表示SD卡控制器要求與DMA存儲器做DMA傳送;如果該信號被置低,可能存在兩種情況,①可能是本次DMA傳送已經完成,②可能是SD卡控制器的讀或寫卡速度低于其操作DMA存儲器的速度,所以SD卡控制器暫停DMA操作;dma_write是SD卡控制器發出的DMA寫標志信號。如果其為1表示SD卡控制器在做讀卡操作,并準備將讀出的數據寫入DMA存儲器;如果其為0表示SD卡控制器在做寫卡操作,并準備從DMA存儲器中讀取數據;dma_ ack是DMA控制器發給SD卡控制器的應答信號,其相當于DMA傳輸數據的有效信號;dma_rdata是DMA讀模式的數據輸出端口,位寬為32 位;dma_ wdata是DMA寫模式的數據輸入端口,位寬為32位。
2.2 DMA控制器的工作流程
為了使DMA控制器能更靈活地適應各種操作情況并很好的完成2個操作源(基帶芯片、SD卡控制器)的速度匹配功能。下面將分別就multi-ple block write命令(CMD25)和multiple block read命令(CMD18)對該狀態機的工作流程進行說明。
先將狀態機中的幾個重要變量做如下說明:
dma_num表示在一次多block讀(CMD18)或寫(CMD25)操作中,要向卡寫入或讀出多少個字節的數據。在該圖像協處理器中,每次讀或寫卡都要操作10個block數據,所以dma_num將被設置為5 120;
dma_in_cnt表示在一次多block寫卡操作中,基帶芯片已經向DMA存儲器中寫入了多少個字節的數據;
dam_cnt表示在本次多block操作中,SD卡控制器從DMA存儲器中讀出數據的字節數(DMA讀模式)或寫入DMA存儲器中的數據字節數(DMA寫模式)。
顯然,在該圖像協處理器中,每個CMD18和CMD25完成之后,dam_in_cnt和dma_cnt都將與dma_num相等,且均為5 120。
評論
查看更多