賓辰忠,馬春波,韋 磊,康家郡
(桂林電子科技大學信息與通信學院,廣西桂林541004)
激光水下成像系統由于其水下運行和采集靜態圖像的工作特點,系統要求其存儲設備應具備物理尺寸小、功耗低、設備接口簡單等特點。目前基于DM642的激光水下成像系統采用的存儲設備方案包括:CF存儲卡、USB存儲卡、IDE接口硬盤等[1-2]。這些方案雖然在數據存取速度和容量方面有一定優勢,但物理尺寸較大,接口電路設計復雜,驅動程序編寫難度大。
SD卡是一種基于NAND閃存技術的存儲設備,以存儲容量大、物理尺寸小、功耗低、接口實現簡單靈活等特點被廣泛應用于各種嵌入式系統中,能夠滿足激光水下成像系統對存儲設備的需求。本文主要研究是基于DM642的激光水下成像系統,設計并實現SD卡圖像存儲方案,以及文件系統的移植,最終實現圖像文件的存儲。
本文實現的激光水下成像系統采用DM642為處理核心,通過同步控制電路控制脈沖激光頭與像增強CCD鏡頭協同工作,通過圖像解碼芯片將圖像數據輸入DM642進行處理分析,最后將結果保存至SD卡。為了實現DM642與SD卡的連接,利用DM642內部多通道緩沖串行端口(簡稱MCBSPn),通過配置使其工作在SPI總線模式,實現對SD卡的訪問[3-4]。硬件接口方案最終選擇MCBSP1端口作為SPI總線主設備與SD卡相連。具體接口電路如圖1所示。

圖1 DM642與SD卡的接口電路圖
DM642內部的MCBSP支持全雙工通信,通過配置可支持多種串行通信總線規范,能夠靈活地與各種串行設備連接。MCBSP內部集成了雙緩沖數據寄存器,大大提高了傳輸的效率。
由于SPI總線的主設備負責產生時鐘同步信號并發起總線傳輸,因此對MCBSP配置的關鍵是設置總線時鐘產生方式,以及SPI總線信號的同步時序。MCBSP配置為SPI總線的操作時序如圖2所示。總線數據在每個CLKX/SCK的上升沿采樣,FSX/SS引腳連接SD卡座的片選引腳CD/DAT3,用于選通SD卡操作。DX/MOSI為數據輸出引腳,DR/MISO為數據讀入引腳。

圖2 MCBSP總線操作時序圖
對于不同的SPI總線同步時鐘頻率,可以通過設置采樣率產生寄存器SRGR的CLKGDV位段實現。總線時鐘頻率計算公式為

MCBSP初始化流程為:
1)清零串口控制寄存器SPCR的XRST和RRST位,復位串口的接收發送邏輯;
2)寫入串口配置參數,包括設置串口工作模式、同步時鐘頻率和收發數據位數等;
3)設置SPCR中的GRST位,復位串口時鐘頻率;
4)延時兩個同步時鐘周期,等待時鐘輸出穩定;
5)對XRST和RRST寫1,設置收發邏輯退出復位狀態;
6)查詢RRDY和XRDY狀態位是否置1,進入串口數據通信程序。
為了降低成像系統的軟件復雜度并提高后期軟件的可維護性,系統軟件采用層次化設計思想。軟件代碼分為SPI總線操作層、SD卡操作層、文件系統層和應用軟件層。層次關系如圖3所示。

圖3 成像系統SD卡操作軟件層次結構
該層軟件包括MCBSP配置與SPI 總線數據收發函數。MCBSP的初始化通過構建配置結構體并調用CCS自帶的CSL庫函數實現[4-5]。MCBSP初始化包括設置SPI工作模式、同步時鐘以及啟動MCBSP端口等。
SPI總線的讀寫函數采用查詢方式。函數先查詢串口控制寄存器SPCR存器的發送就緒位XRDY,判斷SPI總線前一次操作是否結束,然后將發送數據寫入數據傳輸寄存器DXR;最后通過查詢SPCR的RRDY位,并從數據接收寄存器DRR讀回總線接收數據。SPI總線讀寫函數代碼如下:

SD卡工作在SPI模式下時,總線主設備使用特定命令對SD卡進行操作。SD卡的每個命令由48位數據構成,包括:命令索引、命令參數以及CRC校驗等位段信息。該層軟件的主要任務是構造發送SD卡命令的基本函數,以及使用此函數構建SD卡各操作的接口函數。
SD卡發送命令函數_send_command通過調用SPI總線讀寫函數向SD卡寫入6個字節(48位)命令數據。參數cmd、arg和crc分別為命令索引、命令參數和冗余校驗碼。該函數關鍵代碼如下:

SD卡的主要操作函數包括:SD卡初始化、單塊數據讀寫和多塊數據讀寫等函數。此處僅給出單塊數據讀函數的實現。根據SD卡規范,SD卡的每個塊由512 byte構成,讀單塊數據的命令索引值為0x17。單塊數據的讀操作流程如圖4所示。
讀單塊數據函數的參數依次是塊地址sector、接收緩沖區地址buffer。其返回值為讀操作狀態結果。該函數的關鍵代碼如下:

圖4 讀SD卡單塊數據讀操作流程

文件系統層功能由FatFs實現。FatFs是一種開源的文件系統,具有良好的可移植性和清晰的層次結構。經過修改該文件系統可以支持SD卡、USB或ATA硬盤等存儲設備[6]。FatFs包括與文件系統相關的 ff.c和 ff.h文件,與底層存儲設備相關的文件diskio.c,以及配置頭文件fconfig.h等。軟件的移植主要工作包括:diskio.c文件的編寫;數據類型的修改和配置;針對實際需要,通過配置頭文件fconfig.h裁剪部分API函數,縮減代碼規模。
diskio.c文件包括的接口函數有:磁盤初始化函數disk_initialize,磁盤扇區讀函數disk_read,磁盤扇區寫函數disk_write,磁盤輔助操作函數disk_ioctl等。這些接口函數起到連接SD卡操作層與文件系統層的作用。編寫接口函數時,函數原型必須按照FatFs文檔要求定義,否則將無法正常調用。
在此以磁盤扇區讀函數為例介紹接口函數的實現。disk_read函數總共有4個參數,依次是磁盤驅動編號drv、數據緩沖區地址buff、扇區地址sector和讀取扇區數count;函數的返回值為讀取操作的狀態結果。disk_read函數的功能是:按照讀取文件內容的長度、扇區地址、磁盤驅動編號等信息,調用SD卡的單塊數據或多塊數據讀函數,并將讀出數據保存至指定緩沖區。函數部分代碼如下:

在實現以上3層軟件后,需要編寫用戶測試程序以驗證SD卡及文件系統的正確性。測試程序必須先申明文件系統及文件操作相關的結構體變量,然后按照FatFs提供的應用層接口函數對文件進行操作。將測試程序下載至成像系統硬件平臺運行后,最后在PC機端讀取SD卡內容驗證文件操作的正確。在CCS環境下SD卡測試如圖5所示。

圖5 CCS環境下SD卡讀寫測試(截圖)
測試代碼驗證了本文提出的數據存取方案的正確性。通過改變MCBSP的總線時鐘頻率,可以提高SD卡文件存儲的速度,滿足成像系統的實時性要求。本文實現的SD卡接口連接方案對激光水下成像系統圖像存儲方案設計及實現有借鑒意義。
[1]葛衛龍,張曉暉,韓宏偉,等.基于DM642的激光水下圖像處理系統設計與實現[J].紅外與激光工程,2012,41(6):1641-1645.
[2]韋照川,鄧力為,歐陽寧,等.一種DM642系統中的USB接口設計[J].電視技術,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.