魏來,周穗華,劉旭東
(1.海軍工程大學兵器工程系,湖北武漢430033;2.海軍士官學校兵器系,安徽蚌埠233000)
基于SD卡的水聲信號采集系統(tǒng)設計
魏來1,周穗華1,劉旭東2
(1.海軍工程大學兵器工程系,湖北武漢430033;2.海軍士官學校兵器系,安徽蚌埠233000)
針對寬頻帶水聲信號長時間高速采集與實時記錄的難題,設計了以大容量SD卡作為存儲介質的水聲信號高速采集與大容量實時存儲系統(tǒng)。該系統(tǒng)通過在嵌入式系統(tǒng)中應用SD2.0協(xié)議和改進的FAT32文件系統(tǒng),重點解決了大容量數(shù)據(jù)實時存儲的難題。海洋實驗結果表明該系統(tǒng)設計合理,使用方便,工作可靠,能夠滿足工程需要,并具有較強的通用性和擴展性,工程應用前景廣闊。
聲學;SD卡;SD2.0;FAT32文件系統(tǒng);數(shù)據(jù)采集
聲波是在海洋環(huán)境中進行目標探測和通信的有效手段,在對海洋聲場進行研究的過程中需要獲取大量的原始聲信號,為此需要水聲數(shù)據(jù)采集系統(tǒng)長時間工作在無人看守的復雜水下環(huán)境中,并同時進行高速高精度數(shù)據(jù)采集與實時記錄。惡劣的工作環(huán)境,繁重的工作任務,對其性能提出了很高的要求,需要進行專項設計。
傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)多采用Flash芯片作為存儲介質,該芯片容量小(一般容量不超過8Mb),價格高(尤其是大容量芯片),靈活性低(多采用焊接方式),難以滿足水聲數(shù)據(jù)采集的要求。針對這種現(xiàn)狀,本文提出了采用大容量SD卡作為存儲介質,基于SD2.0和改進的FAT32文件系統(tǒng)的系統(tǒng)設計方案,以解決水聲數(shù)據(jù)高速采集與大容量實時存儲的工程應用難題。
本文討論的高速數(shù)據(jù)采集存儲系統(tǒng),需要裝配在特制的測量倉體內,并長時間工作在無人看守的復雜水下環(huán)境中,以對海洋環(huán)境中0~5 kHz的水聲信號進行高速高精度數(shù)據(jù)采集與實時記錄,因此該系統(tǒng)要滿足如下各項技術指標要求:
(1)保證單通道50 K以上的采樣率和16位的采樣精度;
(2)保證連續(xù)存儲的時間要大于20 h,并具備按預定時段記錄的能力;
(3)較強的穩(wěn)定性和可靠性,發(fā)生意外時能夠保證數(shù)據(jù)的完整并具有較強的糾錯能力;
(4)滿足一定的尺寸體積要求;
(5)有較強的人機交互功能,便于用戶對系統(tǒng)的操作。
圖1 系統(tǒng)結構圖
系統(tǒng)結構見圖1,主要由前端信號調理與A/D采集模塊、通信模塊、主控模塊、SD卡存儲模塊和供電模塊等部分組成。由傳感器輸入的信號經(jīng)調理后,進入A/D模塊進行模數(shù)采集;采集得到的數(shù)據(jù)通過SPI總線被傳輸至主控模塊;主控模塊作為系統(tǒng)的控制核心,接受A/D模塊采集到的數(shù)據(jù),并將其實時存儲到SD卡;此外,主控模塊還能夠實現(xiàn)系統(tǒng)與PC機的串口通信,以方便操作者通過人機交互模式對系統(tǒng)的工作起止時間、文件存儲模式等參數(shù)進行預置并讀取系統(tǒng)當前狀態(tài);系統(tǒng)供電模塊是由電池組輸出,通過穩(wěn)壓濾波模塊為系統(tǒng)提供標準工作電壓。
A/D采集模塊采用了美國CYGNAL公司的C8051F060單片機[1]。該單片機作為一款真正意義上的片上混合系統(tǒng),其豐富的外設模塊不僅能夠實現(xiàn)數(shù)據(jù)的采集轉換,還可以實現(xiàn)對SD卡的訪問。
主控制器模塊采用了基于ARM7TDMI-S內核的LPC2368處理器[2]。該處理器可在72MHz頻率下運行,內部集成有4個UART,1個SPI接口,能夠滿足系統(tǒng)對控制模塊的要求。此外,該處理器還支持SD/MMC卡接口,可以非常方便地實現(xiàn)與SD卡的連接。
存儲模塊采用的是SD存儲卡。作為一種微型、低功耗、可移動的FLASH存儲卡[3],SD卡與獨立的FLASH芯片相比增加了智能保護機制,具有更高的傳輸速率和更大的存儲容量,安全性高、使用方便,可廣泛用于各種便攜式存儲設備,能夠滿足系統(tǒng)對高速實時大容量存儲的需求。
數(shù)據(jù)通信協(xié)議的實現(xiàn)是利用SD卡實現(xiàn)大容量數(shù)據(jù)存儲的關鍵,其主要包括兩個部分,即SD卡引腳的定義與連接和通信協(xié)議的選擇與實現(xiàn)。
SD卡采用的是基于9針的通信接口模式,分別為1個命令引腳、1個時鐘引腳、4個數(shù)據(jù)引腳和3個電源引腳,各引腳的具體定義見表1(基于SD工作模式)。
表1 SD卡引腳定義
SD卡各引腳與主控制器間的具體接口電路見圖2,電源通過上拉電阻R18-R23給SD卡供電,以提高主控制器的驅動能力。
圖2 SD卡接口電路圖
SD卡采用的通信協(xié)議有SD1.0和SD2.0兩種,在本系統(tǒng)設計中采用的是SD2.0,后者在讀寫速度和存儲容量等指標上均高于前者,其具體參數(shù)如下:
(1)具備12.5 MB/s和25 MB/s兩種接口速度,前者工作在0~25 MHz的默認時鐘狀態(tài),后者工作在50 MHz的高速時鐘狀態(tài);
(2)支持2 GB-32 GB的大容量存儲。
按照SD2.0協(xié)議的規(guī)定,系統(tǒng)采用SD工作模式和單字節(jié)傳輸模式對SD卡進行讀寫操作和數(shù)據(jù)包傳輸,以提高讀寫速度和可靠性。如果數(shù)據(jù)的存儲傳輸是按照正常模式進行,則先發(fā)送低有效位,再發(fā)送有效位,對于個別反序存儲的數(shù)據(jù),則反之[4]。
SD2.0協(xié)議的特點之一是支持對大容量SD卡的讀寫,其讀寫過程與SD1.0協(xié)議的區(qū)別主要體現(xiàn)在卡的識別模式操作過程中,其操作流程見圖3。在系統(tǒng)上電后,主控制器首先發(fā)送GO_IDLE_STATE(CMD0)指令使系統(tǒng)復位,并使所有SD卡處于等待命令輸入的狀態(tài);然后發(fā)送SEND_IF_COND(CMD8)指令以確認主控制器提供的電壓和卡的電壓是否兼容(該指令是2.0協(xié)議中新增加的內容,是在發(fā)送ACMD41命令之前必須執(zhí)行的一條指令);隨后發(fā)送SD_SEND_OP_COND(ACMD41)指令以識別和卸載不兼容電壓的SD卡,并通過判斷返回值和CCS標志位來確認是否是新標準大容量卡;最后系統(tǒng)通過CMD2,CMD3指令完成SD卡的識別模式操作過程,進入數(shù)據(jù)傳輸模式(該模式與SD1.0協(xié)議操作相同)。
圖3 SD卡初始化和識別流程(SD模式)
在本系統(tǒng)設計中,為了便于SD卡在PC機上進行后續(xù)數(shù)據(jù)處理,需要為SD卡選擇合適的文件系統(tǒng)。在目前廣泛使用的FAT16和FAT32文件系統(tǒng)中,由于FAT32[5]可支持32GB的最大分區(qū)容量(FAT16只能支持2GB的最大分區(qū)容量),故被本設計所選用。
FAT32文件系統(tǒng)的數(shù)據(jù)信息一般由MBR,DBR,F(xiàn)AT,F(xiàn)DT和數(shù)據(jù)區(qū)5個部分組成。FAT32的分區(qū)數(shù)據(jù)結構見表2。
表2 FAT32的分區(qū)數(shù)據(jù)結構
MBR(Master Boot Record),即主引導記錄位于0柱面0磁頭1扇區(qū),記錄了第一磁盤分區(qū)的入口和剩余磁盤分區(qū)的入口信息、第一部分的文件系統(tǒng)格式、起始扇區(qū)號和大小。
DBR(DOS Boot Record),即系統(tǒng)引導記錄位于邏輯0扇區(qū),該區(qū)的BPB(Bios Parameter Block)參數(shù)塊記錄著分區(qū)的起始扇區(qū)、結束扇區(qū)、文件存儲格式、硬盤介質描述符、根目錄大小、FAT個數(shù),分配單元大小等重要參數(shù),通過這些目錄可以找到FAT和根目錄入口。
FAT(File Allocation Table),即文件分配表。它從邏輯1扇區(qū)開始,是文件管理系統(tǒng)用來記錄每個文件存儲位置的表格,它以鏈表的方式存儲簇號,只要知道了一個文件存儲位置的首簇號,就可以利用FAT找到整個文件的存儲位置。
FDT(File Directory Table),即文件目錄表。它由32B的文件目錄項組成,記錄整個磁盤上所有文件的有用信息,包括文件名、文件屬性、文件的修改時間和文件的長度等,當根目錄上存儲的文件超過當前FDT所能記錄的數(shù)量后,操作系統(tǒng)將為文件系統(tǒng)增加一個或多個簇的存儲空間。
本設計的難點是如何在FAT32文件系統(tǒng)下實現(xiàn)大容量數(shù)據(jù)的實時采集存儲。雖然主控制器可以在SD卡上建立標準的FAT32文件系統(tǒng),但其實現(xiàn)過程復雜,需要主控制器對每次數(shù)據(jù)讀寫過程進行大量的操作,難以滿足實時存儲的要求。因此,本文提出了準文件系統(tǒng)的設計思路,即對FAT32文件系統(tǒng)結構進行改進與簡化,以在存儲性能不變的前提下,提高存儲速度,滿足實時采集存儲的要求。
準文件系統(tǒng)的設計思路是在標準FAT文件系統(tǒng)的基礎上,通過適當改變文件讀寫順序來以提高存儲速度。即在單個扇區(qū)寫入時省去文件打開、尋找文件目錄信息、查看FAT表、計算讀寫扇區(qū)地址、更新FAT表、更新文件目錄信息等內容;在SD卡的初始化過程中就通過對MBR,DBR區(qū)的讀取和計算得到FAT表的數(shù)量和起始地址、根目錄的起始地址、數(shù)據(jù)存儲區(qū)的起始地址;在數(shù)據(jù)存儲時全部通過絕對地址遞增的方式來確定要讀寫扇區(qū)的絕對地址;在所有數(shù)據(jù)存儲完成后,通過計算最后一個寫入扇區(qū)地址與數(shù)據(jù)區(qū)起始扇區(qū)地址的差值得到寫入數(shù)據(jù)的總數(shù),以此來更新FAT表和文件目錄的相關信息。
在改進的FAT32文件系統(tǒng)基礎上,SD卡模塊的軟件設計可分為三層,見圖4。
圖4 SD卡軟件分層結構
底層是SD卡驅動程序,它完成與SD卡大部分硬件接口命令有關的操作,包括SD卡初始化、SD卡按LBA方式讀寫數(shù)據(jù)、讀取SD卡狀態(tài)等。
圖5 FAT32文件系統(tǒng)寫文件流程圖
中間層是改進的SD卡文件系統(tǒng),該層是實現(xiàn)與PC機文件系統(tǒng)相兼容的核心,完全按照PC機文件系統(tǒng)要求設計,包括存儲文件的各種數(shù)據(jù)結構(系統(tǒng)引導區(qū)、硬盤引導區(qū)、文件分配表FAT、文件目錄表FDT、子目錄等),以及文件的各種操作。
頂層是留給應用程序的API函數(shù),用戶可以通過調用文件系統(tǒng)的功能函數(shù)實現(xiàn)對數(shù)據(jù)的存儲。這些API函數(shù)包含對SD卡操作的高級命令,寫文件、更新FAT、更新目錄信息等。
SD卡寫文件子程序流程見圖5。
在執(zhí)行SD卡數(shù)據(jù)寫操作之前,首先應確定當前數(shù)據(jù)存儲的扇區(qū)地址,即數(shù)據(jù)存儲的位置,通過在文件系統(tǒng)初始化程序中得到的SD卡物理參數(shù),即可以利用在創(chuàng)建數(shù)據(jù)緩沖區(qū)時設置的全局變量確定數(shù)據(jù)存儲的扇區(qū)地址。在確定數(shù)據(jù)存儲地址后,調用寫扇區(qū)子程序,同時更新確定地址的全局變量,將一個數(shù)據(jù)塊(大小規(guī)定為512B)寫入扇區(qū),即完成一次寫操作。
在寫文件子程序中,每寫完一個扇區(qū),都需進行文件目錄信息的檢查與更新,即在每次寫操作完成后,首先將扇區(qū)個數(shù)加1,然后檢查其能否被一個簇的扇區(qū)數(shù)整除,根據(jù)檢查結果確定文件目錄信息是否需要更新。如果扇區(qū)個數(shù)能被整除,則繼續(xù)判斷FAT是否溢出,若都滿足則調用更新目錄子程序更新目錄信息。該程序首先讀出目錄信息并進行修改,然后再按照FAT32文件目錄格式將新的目錄信息寫回根目錄區(qū),即完成一次目錄信息的檢查與更新。需要說明的是,對FAT和目錄的寫入操作都是基于寫扇區(qū)的操作,調用相同的寫扇區(qū)函數(shù)向扇區(qū)中寫入一定的內容,只是輸入函數(shù)的參數(shù)不同。
系統(tǒng)軟件用C語言開發(fā),軟件采用模塊化編制與管理,系統(tǒng)軟件流程見圖6。
該系統(tǒng)軟件主要由以下模塊組成:
(1)通信模塊的初始化,主要用來配置SPI總線所占用的具體引腳以及SPI的主、從模式和傳輸速度等參數(shù),以及串口通信的波特率、通信格式等相關配置;
(2)數(shù)據(jù)采集模塊的初始化,主要用來配置該模塊的采樣時鐘頻率、基準電壓、開啟轉換方式等參數(shù);
(3)準文件系統(tǒng)初始化程序,用于獲取文件系統(tǒng)所需要的各項參數(shù);
(4)主控制器中DMA控制器的初始化,主要用來配置DMA的工作方式和地址等參數(shù)。
(1)SD卡命令模塊,通過此模塊的調用可以向SD卡輸入各種命令,同時可以監(jiān)測SD卡的工作狀態(tài);
(2)SD卡數(shù)據(jù)的讀寫模塊,在功能命令輸入之后,主控制器可以調用此模塊對SD卡進行讀寫操作。
(1)文件系統(tǒng)的寫入程序,用于將ADC模塊采到的數(shù)據(jù)以文件系統(tǒng)形式存儲到SD卡;
(2)FAT表、根目錄更新程序,在數(shù)據(jù)采集完成以后修改文件系統(tǒng)的相關信息,使PC機能夠正確識別SD卡上的文件。
利用數(shù)據(jù)采集模塊完成前端模擬信號的數(shù)據(jù)轉換并通過SPI總線將數(shù)據(jù)傳輸至主控制器。
圖6 系統(tǒng)軟件流程圖
[1]潘琢金.C8051Fxxxx高速SOC單片機原理及應用[M].北京:北京航空航天大學出版社,2002.
[2]周立功.深入淺出ARM7[M].廣州:廣州致遠電子有限公司,2006.
[3]SanDisk Secure Digital Card Product Manual[R].SanDisk Corporation,2004.
[4]SD Specifications Part 1 Physical Layer Simplified Specification Version 2.00[R].Matsushita Electric Industrial Co,Ltd,SanDisk Corporation,Toshiba Corporation,2004.
[5]宋群生,宋亞瓊.硬盤扇區(qū)讀寫技術-修復硬盤與恢復文件[M].北京:機械工業(yè)出版社,2004.
[6]劉素花.SD卡在海洋數(shù)據(jù)存儲中的應用[J].海洋科學,2009,33(3):16~20.
[7]張洪剛.基于FPGA和SD卡的水聲信號高速采集與存儲系統(tǒng)設計[J].電子器件,2009,32(1):208~212.
本文設計了以大容量SD卡作為存儲介質的水聲信號高速采集與實時存儲系統(tǒng),該系統(tǒng)通過應用SD2.0協(xié)議和改進的FAT32文件系統(tǒng),成功地解決了大容量數(shù)據(jù)的實時存儲問題,能夠實現(xiàn)3 Mb/s的SD卡寫入速率,存儲容量最大可達到32 Gb,單通道采樣率最高可到1 MHz。系統(tǒng)具有很強的人機交互能力,其采樣頻率、采樣通道數(shù)、記錄方式等參數(shù)均可以利用PC機進行設定和顯示。此外,該系統(tǒng)通過改變系統(tǒng)參數(shù)內容,可以滿足不同應用場合的需要,具備較強的通用性。
目前該系統(tǒng)已成功地應用于某海區(qū)的聲場數(shù)據(jù)采集實驗,實驗結果表明該系統(tǒng)設計合理,使用方便,工作可靠,能夠滿足工程需要。作為一款高速大容量實時存儲的嵌入式數(shù)據(jù)采集系統(tǒng),具有很強的通用性,工程應用前景廣闊。
Abstract:Aiming at the difficulty in continuous high speed acquisition and real time store of broad band underwater acoustic signals,a design of high speed acoustic signal acquisition,large capacity and real time store system is proposed,which is based on high capacity SD card.The system solves the problem of real time store of high capacity data by the application of adjusted FAT32 file system and high capacity SD card in embedded system.The results of experiment showed that the system would be well designed,easy to use and reliable.With its strong versatility and stability,it can meet the need of engineering and has a bright future in the field of engineering.
Key words:acoustics;SD card;SD2.0;FAT32 File System;data acquisition
Design of Underwater Acoustic Signal Acquisition System Based on SD Card
WEI Lai1,ZHOU Sui-hua1,LIU Xu-dong2
(1.Department of Weaponry Engineering,Naval University of Engineering,Wuhan Hubei 430033,China;2.Department of Weaponry,Navy Petty Officer Academy,Bengbu Anhui 233000,China)
TJ630
B
1003-2029(2010)02-0051-05
2009-12-24
國防科技預研項目(513040204).
魏來(1979-),男,遼寧大連人,博士生,主要研究方向為水聲信號處理。