鄭壽慶,李 卓,李 兵,廖騰勇,鄭文景
(中國船舶重工集團公司第七二二研究所,湖北 武漢 430205)
某型艦船天線工作環境惡劣,使用時間和頻率高,工作時需要長時間、連續地采集其工作時間、水下深度等數據,便于掌握設備的使用情況和壽命,并對異常數據進行分析。以往一直采用人工記錄的方式,此方法不僅費時費力,而且數據記錄的完整性、準確性和真實性難以保證,不利于后續的分析與統計。
本文將提出一種基于 SDHC(Secure Digital High Capacity)卡和STM32F407微處理器的數據存儲方案,不僅能完成數據的自動存儲,而且數據查詢、管理與導出也非常方便,可以簡單地實現艦船天線的日志記錄。
SDHC卡作為新一代高容量數據存儲載體,最大容量可達32 GB,尺寸小,功耗低,數據傳輸速度快,可熱插拔,目前已被廣泛地應用于便攜式設備上。
其遵循SD V2.0規范,支持SD和SPI兩種工作模式,對嵌入式接口電路進行簡單的設計可方便地與SDHC卡相連,實現大容量數據存儲。
SDHC卡既可以采用SD模式,又可以采用SPI模式。其中SD模式采用六線制,使用CLK,CMD,DAT0~DAT3進行數據通信;SPI模式采用四線制,使用CS,CLK,DI,DO進行數據通信。
SD模式相比SPI模式傳輸速度要快很多,但SD模式對接口電路要求比較高;大多數微處理器都配備了SPI硬件接口,其硬件連接相對簡單,而且目前微處理器的處理速度越來越高,利用SPI模式大多都能滿足工程需要[1]。因此,在對SDHC卡讀寫速度要求不太高的情況下,采用SPI模式是一個性價比較高的選擇。
不同模式下所使用的引腳及定義不同,本文只對SPI模式進行介紹,SDHC卡在SPI模式下各引腳定義如表1所示。

表1 SDHC卡SPI模式引腳定義Tab.1 The definition of pins of SDHC card in SPI mode
STM32F407系列微處理器采用基于高性能32位RISC的ARM CortexTM-M3內核,集成了DSP和FPU指令,工作主頻最高可達168 MHz,具有192 kB的SRAM和可在系統編程的FLASH存儲器,通過APB總線連接了豐富、增強的外設和通信接口,功耗低,非常適合于控制和測試系統。
STM32F407微處理器[2]與SDHC卡電路連接示意圖如圖1所示,SDHC卡采用3.3 V電源供電,STM32F407微處理器SPI總線模式下,CS為單片機向SDHC卡發送的片選信號,SCLK為單片機與SDHC卡之間通信的時鐘信號,DI為SDHC卡接收單片機發送數據的信號線,DO為SDHC卡向單片機發送數據的信號線,1腳和8腳在SD模式下使用,SPI模式可以不接。

圖1 STM32F407 與 SDHC 卡連接示意圖Fig.1 Design sketch map of the connection of STM32F407and SDHC card
SD卡啟動時處于SD總線模式下,當CS信號有效時接收到一個復位命令CMD0就進入SPI模式。
STM32F407的SPI功能很強大,SPI時鐘最高可以到37.5 MHz,在SD卡剛剛初始化的時候,其時鐘頻率不能超過400 kHz,否則可能無法完成初始化。初始化以后,就可以將時鐘頻率設置到最大,但不可超過SD卡的最大操作時鐘頻率。
為使卡正常工作,在發送CMD0命令之前,要延時至少74個時鐘周期,目的是要確保SD卡電壓上升到正常工作電壓[3]。初始化流程圖如圖2所示。

圖2 SDHC 卡 SPI模式下初始化流程圖Fig.2 The flow chart of Initialization of the SDHC card in SPI mode
在初始化過程中,值得注意的是SD卡發送復位命令CMD0命令后,需要發送版本查詢命令CMD8。如果返回值為0x01,表示此卡支持V2.0版本,若返回值為0x05,則表示此卡支持V1.0版本。雖然已經提前知曉SDHC支持V2.0版本,但程序中仍然需要對其版本進行判斷,否則會出現卡無法正常工作的情況。
SDHC卡的讀寫以塊為單位[4]。初始化完成后,發送CMD17可進行SDHC卡的連續多塊讀操作或發送CMD24進行SDHC卡的塊寫操作。
向SDHC卡發送CMD17,收到有效應答信號0x00后,開始接收數據,每塊數據由起始令牌0xFE、有效數據和16位CRC校驗位組成,在接收到起始令牌后,開始接收有效數據,隨后接收2個字節的CRC校驗位。SDHC卡寫數據與讀數據過程類似,寫數據流程圖如圖3所示。

圖3 SDHC 卡寫數據塊流程圖Fig.3 The flow chart of write data block of SDHC card
為便于用戶使用,通常SDHC卡的數據需要在計算機上讀寫,因此SDHC卡上的文件系統必須與計算機的文件系統一致。
2.3.1 FATFS 系統結構
FATFS是一個完全免費開源的FAT文件系統模塊,專門為小型的嵌入式系統而設計。它完全用標準C語言編寫,具有良好的硬件平臺獨立性,只需做簡單的修改就可移植到多種平臺。FARFS具有良好的層次結構,頂層為應用層,在使用時只需要調用FATFS模塊提供的應用接口函數即可,不需要深入了解其內部結構和復雜的協議。FATFS模塊的層次結構如圖4所示[5]。

圖4 FATFS 層次結構圖Fig.4 Hierarchical structure diagram of FATFS
中間層為FATFS模塊層,使用時直接將FATFS模塊提供的ff.c和ff.h文件包含到程序中,除非有必要,一般不需要修改即可使用。
底層接口包括底層存儲媒介接口和供給文件創建修改時間的實時時鐘(RTC)。用戶應根據不同的控制芯片,編寫底層相應的讀寫接口函數和實時時鐘函數。
2.3.2 FATFS 系統的創建
FATFS含有豐富的軟件資源,在使用時,需要重點關注3點:
1)根據所使用的編譯器的數據類型,在integer.h里定義好數據的類型。
2)根據需求,在ffconf.h中對FATFS模塊的配置項進行設置。
3)在diskio.c中進行底層驅動編寫,包括6個函數,如表2所示。

表2 底層驅動函數表Tab.2 Underlying driver function table
在使用FATFS的時候,必須先通過f_mount函數注冊一個工作區,才能開始后續API的使用。
2 G以內的SD卡屬于標準卡,2 GB以上的SD卡屬于大容量卡即SDHC卡,它們在地址訪問形式上不同,標準卡在讀寫操作時,讀寫命令令牌中地址為字節地址,而SDHC卡只支持扇區讀寫操作,扇區大小為512字節,因此SDHC卡中地址為扇區地址。
在某一塊要進行寫操作時,最好先進行擦除命令,這樣寫入的速度能大大提高,進行擦除操作時需按塊操作。
隨著新一代信息技術的發展,艦船天線的數據也呈現出多樣化、復雜性等特點,數據處理與分析方法在數據應用領域顯得尤為重要,可以說是決定最終信息是否有價值的決定性因素。
本文基于大數據理論和艦船天線的特點,提出了數據預處理、后處理及預測性分析方法和模型。
數據預處理模塊采用構建符合艦船天線使用特點的預處理模型的方法,對采集的原始數據進行過濾,選擇有效信息進行存儲,節省數據存儲空間和計算時間,提高基礎數據質量。
數據后處理模塊,采用數據挖掘技術對前端存儲的數據,依次進行數據的深度清理、數據變換及數據信息展示[6]。
預測性分析旨在從大數據中挖掘出具有規律性的特征,建立預測模型,然后將部分后處理模塊得來的數據代入預測模型,從而引出新數據,以預測未來的數據趨勢,此模塊對重點關注特性進行預測和分析,實現對艦船天線關鍵部位的監控和預警。
本文提出了一種基于SDHC卡的艦船天線的數據存儲與處理方案,該方案充分利用了SD卡接口簡單、容量大、智能化程度高、價格低廉等優點,采用高性能嵌入式芯片STM32F407微處理器與其配合使用,使得數據存儲系統結構簡單,數據使用靈活,只需占用很少的系統資源,就能實現數據的存儲和讀取;通過建立科學合理的數據模型對存儲數據進行有效的處理和預測性分析,在實際應用中具有很好的推廣價值。
目前該技術已在國內某型艦船天線控制系統中得到應用,較好地解決了天線使用數據存儲量大、時間長、記錄和查詢復雜的問題,為提高天線設備的可靠性發揮了重要作用。