賓辰忠,馬春波,韋 磊,康家郡
(桂林電子科技大學(xué)信息與通信學(xué)院,廣西桂林541004)
激光水下成像系統(tǒng)由于其水下運行和采集靜態(tài)圖像的工作特點,系統(tǒng)要求其存儲設(shè)備應(yīng)具備物理尺寸小、功耗低、設(shè)備接口簡單等特點。目前基于DM642的激光水下成像系統(tǒng)采用的存儲設(shè)備方案包括:CF存儲卡、USB存儲卡、IDE接口硬盤等[1-2]。這些方案雖然在數(shù)據(jù)存取速度和容量方面有一定優(yōu)勢,但物理尺寸較大,接口電路設(shè)計復(fù)雜,驅(qū)動程序編寫難度大。
SD卡是一種基于NAND閃存技術(shù)的存儲設(shè)備,以存儲容量大、物理尺寸小、功耗低、接口實現(xiàn)簡單靈活等特點被廣泛應(yīng)用于各種嵌入式系統(tǒng)中,能夠滿足激光水下成像系統(tǒng)對存儲設(shè)備的需求。本文主要研究是基于DM642的激光水下成像系統(tǒng),設(shè)計并實現(xiàn)SD卡圖像存儲方案,以及文件系統(tǒng)的移植,最終實現(xiàn)圖像文件的存儲。
本文實現(xiàn)的激光水下成像系統(tǒng)采用DM642為處理核心,通過同步控制電路控制脈沖激光頭與像增強CCD鏡頭協(xié)同工作,通過圖像解碼芯片將圖像數(shù)據(jù)輸入DM642進行處理分析,最后將結(jié)果保存至SD卡。為了實現(xiàn)DM642與SD卡的連接,利用DM642內(nèi)部多通道緩沖串行端口(簡稱MCBSPn),通過配置使其工作在SPI總線模式,實現(xiàn)對SD卡的訪問[3-4]。硬件接口方案最終選擇MCBSP1端口作為SPI總線主設(shè)備與SD卡相連。具體接口電路如圖1所示。
圖1 DM642與SD卡的接口電路圖
DM642內(nèi)部的MCBSP支持全雙工通信,通過配置可支持多種串行通信總線規(guī)范,能夠靈活地與各種串行設(shè)備連接。MCBSP內(nèi)部集成了雙緩沖數(shù)據(jù)寄存器,大大提高了傳輸?shù)男省?/p>
由于SPI總線的主設(shè)備負責產(chǎn)生時鐘同步信號并發(fā)起總線傳輸,因此對MCBSP配置的關(guān)鍵是設(shè)置總線時鐘產(chǎn)生方式,以及SPI總線信號的同步時序。MCBSP配置為SPI總線的操作時序如圖2所示??偩€數(shù)據(jù)在每個CLKX/SCK的上升沿采樣,F(xiàn)SX/SS引腳連接SD卡座的片選引腳CD/DAT3,用于選通SD卡操作。DX/MOSI為數(shù)據(jù)輸出引腳,DR/MISO為數(shù)據(jù)讀入引腳。
圖2 MCBSP總線操作時序圖
對于不同的SPI總線同步時鐘頻率,可以通過設(shè)置采樣率產(chǎn)生寄存器SRGR的CLKGDV位段實現(xiàn)。總線時鐘頻率計算公式為
MCBSP初始化流程為:
1)清零串口控制寄存器SPCR的XRST和RRST位,復(fù)位串口的接收發(fā)送邏輯;
2)寫入串口配置參數(shù),包括設(shè)置串口工作模式、同步時鐘頻率和收發(fā)數(shù)據(jù)位數(shù)等;
3)設(shè)置SPCR中的GRST位,復(fù)位串口時鐘頻率;
4)延時兩個同步時鐘周期,等待時鐘輸出穩(wěn)定;
5)對XRST和RRST寫1,設(shè)置收發(fā)邏輯退出復(fù)位狀態(tài);
6)查詢RRDY和XRDY狀態(tài)位是否置1,進入串口數(shù)據(jù)通信程序。
為了降低成像系統(tǒng)的軟件復(fù)雜度并提高后期軟件的可維護性,系統(tǒng)軟件采用層次化設(shè)計思想。軟件代碼分為SPI總線操作層、SD卡操作層、文件系統(tǒng)層和應(yīng)用軟件層。層次關(guān)系如圖3所示。
圖3 成像系統(tǒng)SD卡操作軟件層次結(jié)構(gòu)
該層軟件包括MCBSP配置與SPI 總線數(shù)據(jù)收發(fā)函數(shù)。MCBSP的初始化通過構(gòu)建配置結(jié)構(gòu)體并調(diào)用CCS自帶的CSL庫函數(shù)實現(xiàn)[4-5]。MCBSP初始化包括設(shè)置SPI工作模式、同步時鐘以及啟動MCBSP端口等。
SPI總線的讀寫函數(shù)采用查詢方式。函數(shù)先查詢串口控制寄存器SPCR存器的發(fā)送就緒位XRDY,判斷SPI總線前一次操作是否結(jié)束,然后將發(fā)送數(shù)據(jù)寫入數(shù)據(jù)傳輸寄存器DXR;最后通過查詢SPCR的RRDY位,并從數(shù)據(jù)接收寄存器DRR讀回總線接收數(shù)據(jù)。SPI總線讀寫函數(shù)代碼如下:
SD卡工作在SPI模式下時,總線主設(shè)備使用特定命令對SD卡進行操作。SD卡的每個命令由48位數(shù)據(jù)構(gòu)成,包括:命令索引、命令參數(shù)以及CRC校驗等位段信息。該層軟件的主要任務(wù)是構(gòu)造發(fā)送SD卡命令的基本函數(shù),以及使用此函數(shù)構(gòu)建SD卡各操作的接口函數(shù)。
SD卡發(fā)送命令函數(shù)_send_command通過調(diào)用SPI總線讀寫函數(shù)向SD卡寫入6個字節(jié)(48位)命令數(shù)據(jù)。參數(shù)cmd、arg和crc分別為命令索引、命令參數(shù)和冗余校驗碼。該函數(shù)關(guān)鍵代碼如下:
SD卡的主要操作函數(shù)包括:SD卡初始化、單塊數(shù)據(jù)讀寫和多塊數(shù)據(jù)讀寫等函數(shù)。此處僅給出單塊數(shù)據(jù)讀函數(shù)的實現(xiàn)。根據(jù)SD卡規(guī)范,SD卡的每個塊由512 byte構(gòu)成,讀單塊數(shù)據(jù)的命令索引值為0x17。單塊數(shù)據(jù)的讀操作流程如圖4所示。
讀單塊數(shù)據(jù)函數(shù)的參數(shù)依次是塊地址sector、接收緩沖區(qū)地址buffer。其返回值為讀操作狀態(tài)結(jié)果。該函數(shù)的關(guān)鍵代碼如下:
圖4 讀SD卡單塊數(shù)據(jù)讀操作流程
文件系統(tǒng)層功能由FatFs實現(xiàn)。FatFs是一種開源的文件系統(tǒng),具有良好的可移植性和清晰的層次結(jié)構(gòu)。經(jīng)過修改該文件系統(tǒng)可以支持SD卡、USB或ATA硬盤等存儲設(shè)備[6]。FatFs包括與文件系統(tǒng)相關(guān)的 ff.c和 ff.h文件,與底層存儲設(shè)備相關(guān)的文件diskio.c,以及配置頭文件fconfig.h等。軟件的移植主要工作包括:diskio.c文件的編寫;數(shù)據(jù)類型的修改和配置;針對實際需要,通過配置頭文件fconfig.h裁剪部分API函數(shù),縮減代碼規(guī)模。
diskio.c文件包括的接口函數(shù)有:磁盤初始化函數(shù)disk_initialize,磁盤扇區(qū)讀函數(shù)disk_read,磁盤扇區(qū)寫函數(shù)disk_write,磁盤輔助操作函數(shù)disk_ioctl等。這些接口函數(shù)起到連接SD卡操作層與文件系統(tǒng)層的作用。編寫接口函數(shù)時,函數(shù)原型必須按照FatFs文檔要求定義,否則將無法正常調(diào)用。
在此以磁盤扇區(qū)讀函數(shù)為例介紹接口函數(shù)的實現(xiàn)。disk_read函數(shù)總共有4個參數(shù),依次是磁盤驅(qū)動編號drv、數(shù)據(jù)緩沖區(qū)地址buff、扇區(qū)地址sector和讀取扇區(qū)數(shù)count;函數(shù)的返回值為讀取操作的狀態(tài)結(jié)果。disk_read函數(shù)的功能是:按照讀取文件內(nèi)容的長度、扇區(qū)地址、磁盤驅(qū)動編號等信息,調(diào)用SD卡的單塊數(shù)據(jù)或多塊數(shù)據(jù)讀函數(shù),并將讀出數(shù)據(jù)保存至指定緩沖區(qū)。函數(shù)部分代碼如下:
在實現(xiàn)以上3層軟件后,需要編寫用戶測試程序以驗證SD卡及文件系統(tǒng)的正確性。測試程序必須先申明文件系統(tǒng)及文件操作相關(guān)的結(jié)構(gòu)體變量,然后按照FatFs提供的應(yīng)用層接口函數(shù)對文件進行操作。將測試程序下載至成像系統(tǒng)硬件平臺運行后,最后在PC機端讀取SD卡內(nèi)容驗證文件操作的正確。在CCS環(huán)境下SD卡測試如圖5所示。
圖5 CCS環(huán)境下SD卡讀寫測試(截圖)
測試代碼驗證了本文提出的數(shù)據(jù)存取方案的正確性。通過改變MCBSP的總線時鐘頻率,可以提高SD卡文件存儲的速度,滿足成像系統(tǒng)的實時性要求。本文實現(xiàn)的SD卡接口連接方案對激光水下成像系統(tǒng)圖像存儲方案設(shè)計及實現(xiàn)有借鑒意義。
[1]葛衛(wèi)龍,張曉暉,韓宏偉,等.基于DM642的激光水下圖像處理系統(tǒng)設(shè)計與實現(xiàn)[J].紅外與激光工程,2012,41(6):1641-1645.
[2]韋照川,鄧力為,歐陽寧,等.一種DM642系統(tǒng)中的USB接口設(shè)計[J].電視技術(shù),2011,35(15):74-77.
[3] TMS320DM642 data sheet(Rev.G)[EB/OL].[2013-03-01].http://www.ti.com.cn/product/cn/tms320dm642??247 SEM.
[4]TMS320C6000 DSP multichannel buffered serial port reference guide[EB/OL].[2013-03-01].http://www.ti.com.cn/tool/cn/sprc265.
[5] TMS320C64x DSP library programmer’s reference[EB/OL].[2013-03-01].http://www.ti.com.cn/tool/cn/sprc092.
[6] FatFs– Generic FAT file system module[EB/OL].[2013-03-19].http://elm-chan.org/fsw/ff/00index_e.html.