樊文俠,房 壯
(西安工業(yè)大學(xué) 電子信息工程學(xué)院,陜西 西安 710032)
飛行數(shù)據(jù)記錄系統(tǒng)對(duì)保障飛機(jī)的日常飛行訓(xùn)練,分析飛行事故,評(píng)估飛行訓(xùn)練質(zhì)量都發(fā)揮了極其重要的作用。但是,當(dāng)前的飛行數(shù)據(jù)記錄器的缺點(diǎn)十分明顯,主要反映在以下幾點(diǎn):
1)體積大、重量大、功耗大的缺點(diǎn);
2)地面PC通過RS232串口卸載數(shù)據(jù)記錄器中的數(shù)據(jù),存在卸載速度慢,無法脫離PC的應(yīng)用環(huán)境,給現(xiàn)場(chǎng)卸載數(shù)據(jù)帶來了不便;
3)地面PC需要安裝相應(yīng)的數(shù)據(jù)卸載軟件,導(dǎo)致數(shù)據(jù)記錄器移動(dòng)性差。
隨著USB接口技術(shù)的成熟和USB移動(dòng)存儲(chǔ)設(shè)備的普及,如果在飛行數(shù)據(jù)記錄器集成USB主機(jī)接口,飛行數(shù)據(jù)記錄器可以與USB大容量存儲(chǔ)設(shè)備(如U盤)之間直接通信,擺脫了只能通過PC來進(jìn)行相互的文件和數(shù)據(jù)交換,提高了數(shù)據(jù)卸載速度,實(shí)現(xiàn)了飛行數(shù)據(jù)卸載的靈活移動(dòng)。
根據(jù)具體飛行數(shù)據(jù)器的實(shí)際需要,研究設(shè)計(jì)了一種新型飛行數(shù)據(jù)固態(tài)記錄器,通過RS232接口接收機(jī)載數(shù)據(jù),并以BIN文件格式保存到NAND Flash海量存儲(chǔ)芯片上,數(shù)據(jù)記錄器通過USB主機(jī)接口與大容量設(shè)備進(jìn)行文件和數(shù)據(jù)交換,完成數(shù)據(jù)卸載的任務(wù)。
飛控?cái)?shù)據(jù)記錄器用于記錄無人機(jī)在飛行過程中的飛行參數(shù),首先接收RS422串口數(shù)據(jù)并以BIN文件格式記錄在海量存儲(chǔ)器中,待飛機(jī)返回地面后數(shù)據(jù)以一定的文件格式轉(zhuǎn)存到USB大容量存儲(chǔ)設(shè)備中,并可以在PC機(jī)上根據(jù)需要分析數(shù)據(jù)。工作流程如下:
1)通過RS422接收數(shù)據(jù) ARM控制器在完成系統(tǒng)初始化和構(gòu)建FAT16文件系統(tǒng)后,默認(rèn)進(jìn)入接收RS422端口的數(shù)據(jù)狀態(tài),飛行參數(shù)按照BIN文件的格式保存到NAND Flash存儲(chǔ)器中。
2)通過USB接口卸載數(shù)據(jù) 當(dāng)USB設(shè)備插入主機(jī)體統(tǒng)上后,由USB主控器通過外部中斷信號(hào)來通知ARM控制器,ARM控制器與USB主控器完成設(shè)備的枚舉、配置等操作后,將存儲(chǔ)在NAND Flash存儲(chǔ)器的飛行參數(shù)文件卸載到U盤。模塊的硬件結(jié)構(gòu)圖如圖1所示。
圖1 USB數(shù)據(jù)記錄器結(jié)構(gòu)框圖Fig.1 USB data recorder configuration diagram
從圖1可知,USB飛控?cái)?shù)據(jù)記錄器可以細(xì)分為ARM微處理器、USB主機(jī)控制器、NAND Flash大容量存儲(chǔ)器。ARM微處理和USB主機(jī)控制器共同實(shí)現(xiàn)了USB功能,USB主機(jī)控制器為移動(dòng)存儲(chǔ)設(shè)備提供接口,并實(shí)現(xiàn)部分的底層USB協(xié)議;大容量存儲(chǔ)器是存儲(chǔ)飛行數(shù)據(jù)的設(shè)備。
1)微控制器:選用 NXP公司的 ARM7TDMAI處理器LPC2214主要優(yōu)點(diǎn):低功耗,采用3.3 V供電,內(nèi)核電壓1.8 V;主頻高,運(yùn)行頻率達(dá)到60 MHz,擁有256 kB片內(nèi)的Flash編程存儲(chǔ)器,16 kB SRAM;-40~85℃的工作范圍滿足數(shù)據(jù)記錄器的工作條件[1]。
2)USB主機(jī)接口:PHILIPS公司的ISP1161A1是一個(gè)單片通用串行總線(USB)主機(jī)控制器(HC)和設(shè)備控制器(DC)。ISP1161A1的主機(jī)控制器符合串行總線2.0規(guī)范,支持全速(12 Mbit/s)和低速(1.5 Mbit/s)的數(shù)據(jù)傳輸。 ISP1161A1 提供兩個(gè)下行端口,每個(gè)下行端口都有一個(gè)過流(OC)檢測(cè)輸入及電源快關(guān)控制輸出引腳[2]。
3)FlASH:由于記錄器要存儲(chǔ)容量至少達(dá)到128 MB,從而選用SASUNG公司的NANDFLASH K9F1G08U0M,其實(shí)際的存儲(chǔ)容量高達(dá)128 MB+4 MB,其中4 MB為備用空間;-40~85℃的工作范圍滿足數(shù)據(jù)記錄器的工作條件;供電3.3 V,功耗低,可以和LPC2214芯片使用同一個(gè)3.3 V穩(wěn)壓電源,簡(jiǎn)化了電源電路的設(shè)計(jì)。
4)片外RAM擴(kuò)展:由于需要在飛控?cái)?shù)據(jù)記錄器構(gòu)建USB主機(jī)協(xié)議棧、FAT16文件系統(tǒng),對(duì)系統(tǒng)的內(nèi)存開銷很大,LPC2214的自身16 k已無法滿足要求,需要向片外擴(kuò)展RAM,選擇 8 MB 的 PSRAM(MT45W4MW16),16位總線接口系統(tǒng)硬件電路的設(shè)計(jì)。
飛控?cái)?shù)據(jù)記錄器的硬件部分結(jié)構(gòu)如圖1所示,主要由ARM最小系統(tǒng),用于存放飛行參數(shù)的片外NAND Flash存儲(chǔ)電路、RS-422接口電路、USB主機(jī)接口、片外SRAM擴(kuò)展電路五部分構(gòu)成。本文主要介紹NAND Flash存儲(chǔ)電路和USB主機(jī)部分的電路。
1)NAND Flash 存儲(chǔ)電路
將CPU的總線讀寫信號(hào)/OE和/WE分別與靜態(tài)存儲(chǔ)器的片選信號(hào)線/CS0相或之后作為NAND FLASH的讀寫信號(hào),這樣做的一個(gè)好處是當(dāng)以后擴(kuò)展新功能時(shí),/OE和/WE的狀態(tài)不會(huì)影響NAND FLASH的讀寫信號(hào)。而NAND FLASH的片選信號(hào)/CE通過CPU的IO口P4.22進(jìn)行控制。7管腳接上拉電阻使該FLASH處于就緒狀態(tài),同時(shí)將忙信號(hào)通過P4.23反饋給LPC2214。命令鎖存使能、地址鎖存使能信號(hào)分別與地址線A21、A20相連。這樣連接的一個(gè)主要原因是,所有的CPU管腳都在一起,方便PCB板的布線。NAND FLASH的連線如圖2所示。
圖2 NAND Flash存儲(chǔ)電路Fig.2 Circuit of NAND Flash storage
2)USB主機(jī)接口電路
當(dāng)USB設(shè)備與主機(jī)連接或斷開時(shí),會(huì)產(chǎn)生大電流也就是浪涌,因此需要設(shè)計(jì)一個(gè)過流保護(hù)電路。ISP1161A1主機(jī)芯片的VCC接到5V電源時(shí),內(nèi)部過流檢測(cè)電路被使能。當(dāng)芯片檢測(cè)到一個(gè)過流狀態(tài)時(shí),將關(guān)閉下行端口Vbus的5 V電源。當(dāng)處于非過流狀態(tài)時(shí),將打開Vbus的5 V電源。在設(shè)計(jì)中,用一個(gè)P-溝道MOSFET作為Vbus電源開關(guān)。用一個(gè)P-溝道MOSFET的源極與5 V電源連接,Vbus接源級(jí)和H_PSWn接閘級(jí)。漏極與源級(jí)上的壓降,為過流檢測(cè)電壓(VOC)。當(dāng)VOC標(biāo)稱的電壓閥值H_PSWn將輸出高電平,關(guān)閉P-溝道MOSFET。如圖3所示。
系統(tǒng)的軟件平臺(tái)核心為μC/OS-II,它是一個(gè)源碼公開的、占先式任務(wù)管理的實(shí)施操作系統(tǒng)內(nèi)核,已在相當(dāng)多的系統(tǒng)中得到成功應(yīng)用,具有其性能穩(wěn)定、源碼公開的優(yōu)點(diǎn)。
系統(tǒng)通過μC/OS-II操作對(duì)系統(tǒng)的兩大功能任務(wù)進(jìn)行管理及其子任務(wù)間的調(diào)度:
1)基于NAND Flash的FAT16文件系統(tǒng)存儲(chǔ)。由于NAND Flash的物理特性:出廠之前可能存儲(chǔ)在壞塊以及操作過程中再次出現(xiàn)壞塊,擦除次數(shù)有限,頁讀塊擦除,寫之前需先擦除,存儲(chǔ)器中的數(shù)據(jù)只能由1變0,為了有效的使用閃存,提高使用壽命和利用率,盡可能減少擦除次數(shù),并且,擦除操作盡可能均勻分布在整個(gè)閃存上[3]。文中通過重新設(shè)計(jì)NAND Flash驅(qū)動(dòng)程序,支持均衡寫閃存和壞塊管理,為上層FAT文件管理軟件提供一個(gè)可靠的邏輯存儲(chǔ)設(shè)備。NAND Flash驅(qū)動(dòng)程序主要實(shí)現(xiàn)如下:①支持NAND Flash寫平衡。驅(qū)動(dòng)程序把編程操作分散到不同的物理扇區(qū),使每個(gè)扇區(qū)的編程次數(shù)趨于相同,提高了閃存的壽命;②支持壞塊管理。驅(qū)動(dòng)程序會(huì)自動(dòng)記錄原始?jí)膲K和新產(chǎn)生的壞塊,提高數(shù)據(jù)存儲(chǔ)的可靠性。
圖3 主機(jī)接口電路Fig.3 Circuit of host interface
2)實(shí)現(xiàn)USB主機(jī)對(duì)U盤的讀寫。USB主機(jī)為實(shí)現(xiàn)U讀寫提供的功能有:①將測(cè)USB外設(shè)的接入和移出;②管理主機(jī)和外設(shè)之間進(jìn)行的USB標(biāo)準(zhǔn)流控制;③枚舉外設(shè);④管理主機(jī)和外設(shè)之間的數(shù)據(jù)流;⑤搜索系統(tǒng)狀態(tài)和性能的統(tǒng)計(jì)信息;⑥主機(jī)與外設(shè)之間的電氣接口,包括供電[4]。
3)USB協(xié)議規(guī)定了人機(jī)接口設(shè)備HID類、MassSorage類和音頻類等一系列的設(shè)備類型,用于支持不同的設(shè)備。根據(jù)應(yīng)用需要,開發(fā)了USB接口的海量存儲(chǔ)類設(shè)備。該系統(tǒng)支持熱插拔,可以識(shí)別插上是哪種設(shè)備,并調(diào)用對(duì)用的驅(qū)動(dòng)。
1)NAND Flash文件系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)
為方便文件系統(tǒng)的移植,同時(shí)便于兼容更多的NAND Flash存儲(chǔ)器,將整個(gè)文件系統(tǒng)分為文件管理層(FAT)、存儲(chǔ)管理層(FFS)和NAND Flash驅(qū)動(dòng)層。結(jié)構(gòu)如圖4所示。
圖4 NAND Flash文件系統(tǒng)結(jié)構(gòu)圖Fig.4 NAND Flash file system structure
文件管理層對(duì)文件系統(tǒng)進(jìn)行封裝,為應(yīng)用層提供統(tǒng)一的、標(biāo)準(zhǔn)的API接口,把用戶對(duì)文件的操作請(qǐng)求提交給文件邏輯層來處理。標(biāo)準(zhǔn)的文件操作函數(shù)有:FileOpen()、FileClose()、FileRead ()、FileWrite ()、FileSeek ()、RemoveFile ()、MakeDir()、RemoveDir()等[5]。
文件邏輯層為文件管理層提供服務(wù),把文件管理層對(duì)文件的操作轉(zhuǎn)換為物理上的操作,均衡磨損控制,壞塊管理,并提交給Flash驅(qū)動(dòng)層處理。
Flash設(shè)備驅(qū)動(dòng)層實(shí)現(xiàn)對(duì)Flash的物理操作,包括塊的擦出、頁面的寫入和讀出。它為文件系統(tǒng)和存儲(chǔ)器提供統(tǒng)一的接口,提高了存儲(chǔ)器的適應(yīng)能力。
2)NAND Flash壞塊管理算法
NAND Flash的每個(gè)扇區(qū)由數(shù)據(jù)區(qū)(主數(shù)據(jù)區(qū))和備用數(shù)據(jù)區(qū)(附加數(shù)據(jù)區(qū))組成。平衡讀寫驅(qū)動(dòng)使用數(shù)據(jù)區(qū)存儲(chǔ)數(shù)據(jù),備用數(shù)據(jù)區(qū)存儲(chǔ)此扇區(qū)的屬性[4]。由于,第0塊的高可靠性,可以用來保存NAND Flash硬件信息,作為系統(tǒng)區(qū),而其他作為數(shù)據(jù)區(qū)。上層FAT文件管理系統(tǒng)使用驅(qū)動(dòng)時(shí),提供邏輯扇區(qū)號(hào),但因?yàn)閴膲K和均衡磨損的要求,要經(jīng)過NAND Flash存儲(chǔ)管理層轉(zhuǎn)換為物理地址后才能訪問硬件層。
NAND Flash硬件信息的結(jié)構(gòu)體變量有一個(gè)成員BlockState數(shù)組,數(shù)組中每一個(gè)元素對(duì)應(yīng)一個(gè)物理扇區(qū)。數(shù)組保存每一個(gè)物理塊的狀態(tài),用物理扇區(qū)號(hào)訪問數(shù)組,就可得到物理塊的狀態(tài)。數(shù)組元素值有3個(gè):BAD_BLOCK(壞塊)、FREE_BLOCK(未使用)、USR_BLOCK(已使用)。
3)均衡讀寫實(shí)現(xiàn)方法算法
均衡讀寫主要是把需要寫入Flash的數(shù)據(jù)編程到擦除次數(shù)的物理塊。核心操作為查找擦出次數(shù)最少的塊。因此,在構(gòu)建NAND Flash硬件信息的結(jié)構(gòu)體變量有一個(gè)成員BlockEaseSum數(shù)組,數(shù)組中每一個(gè)元素對(duì)應(yīng)一個(gè)物理塊[5]。數(shù)組保存每一個(gè)物理塊的擦出次數(shù),用物理塊號(hào)作為下標(biāo)讀取這個(gè)數(shù)組,就可以得到這個(gè)塊的擦出次數(shù)。當(dāng)數(shù)組成員的值為0xFFFFFFF時(shí),表示此物理塊為壞塊。
USB Mass Storage類是USB協(xié)議所定義的用來磁盤管理及大容量數(shù)據(jù)傳輸?shù)?。USB定義兩種海量存儲(chǔ)協(xié)議,它們分別是Buck-only Transport和 CBI Transport。目前市場(chǎng)上的海量存儲(chǔ)設(shè)備讀寫都采用塊傳輸來實(shí)現(xiàn)通信[6],在命令包CBW包含了標(biāo)志信息,數(shù)據(jù)長(zhǎng)度以及UFI命令等信息。其中UFI命令包含有格式化磁盤、讀磁盤、寫磁盤和讀磁盤容量等一系列磁盤管理命令。
大部分移動(dòng)存儲(chǔ)設(shè)備都采用FAT文件系統(tǒng)來管理文件。整個(gè)文件系統(tǒng)通過Mass Storage的UFI命令與外設(shè)的磁盤建立聯(lián)系。 FAT文件系統(tǒng)將海量存儲(chǔ)設(shè)備上的數(shù)據(jù)大致分成5個(gè)部分:MBR 區(qū)(主引導(dǎo)區(qū))、DBR 區(qū)(系統(tǒng)引導(dǎo)區(qū))、FAT區(qū)(文件分配表)、FDT區(qū)(文件目錄表)和DATA區(qū)(數(shù)據(jù)區(qū))。當(dāng)USB接口的海量存儲(chǔ)設(shè)備與主機(jī)連接后,系統(tǒng)讀取MBR區(qū)和DBR區(qū)來獲得每扇區(qū)字節(jié)數(shù)[7],每簇扇區(qū)數(shù),F(xiàn)AT表個(gè)數(shù)等文件系統(tǒng)基本信息。獲得這些基本信息后向海量存儲(chǔ)設(shè)備寫入一個(gè)文件的流程如圖5所示。
圖5 讀文件流程圖Fig.5 Process of reading file
在完成數(shù)據(jù)記錄器設(shè)計(jì)后,按照設(shè)計(jì)要求進(jìn)行實(shí)驗(yàn)室測(cè)試,步驟如下:
1)將一個(gè)文件通過RS-422串口下載到數(shù)據(jù)記錄器中,并以FAT16格式保存;
2)通過本系統(tǒng)的USB主機(jī)接口與外部的U盤進(jìn)行連接,系統(tǒng)對(duì)U盤成功枚舉后,將數(shù)據(jù)記錄器存儲(chǔ)的文件保存到U盤中。
3)通過PC機(jī)對(duì)U盤中的文件進(jìn)行分析。一方面,PC可以識(shí)別U盤中的文件格式并可以打開;另一方面,通過文件比較軟件,將源文件和下載到U中的文件進(jìn)行比較,并計(jì)算誤碼率。
4)使用不同品牌的U盤,重復(fù)上述過程。
按照上述步驟,對(duì)各種大小、不同類型的文件,RS-422使用多種波特率,對(duì)飛控?cái)?shù)據(jù)記錄器進(jìn)行大量測(cè)試,測(cè)試結(jié)果表明上傳文件全部正確,誤碼率為零,且支持市面上絕大多數(shù)的U盤,從而證明飛控?cái)?shù)據(jù)記錄器設(shè)計(jì)方案正確和可行,完全擺脫了對(duì)PC機(jī)的依賴,方便無人機(jī)飛行數(shù)據(jù)的卸載。
[1]王安,錢曉亮,樊文俠.基于ARM的USB接口飛控系統(tǒng)數(shù)據(jù)記錄器的設(shè)計(jì)[J].測(cè)控技術(shù),2007,26(4):37.WANG An, QIAN Xiao-liang, FAN Wen-xia.Design of USB interface for flight control system data recorder based on ARM[J].Measurement&Control Technology,2007,26(4):37.
[2]蕭世文.USB2.0硬件設(shè)計(jì)[M].北京:清華大學(xué)出版社,2002.
[3]周立功.ARM嵌入式系統(tǒng)軟件開發(fā)實(shí)例(一、二)[M].北京:北京航空航天大學(xué)出版社,2004.
[4]馮光磊,郭忠文,李正寶,等.基于ARM和Linux的USB OHCI驅(qū)動(dòng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2009,29(21):53.FENG Guang-lei, GUO Zhong-wen, LI Zheng-bao, et al.Design and realization of USB OHCI driver based on ARM and Linux[J].Joumal of Computer Applications,2009,29(21):53.
[5]陳智育.嵌入式系統(tǒng)中Flash的文件系統(tǒng)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2002(1):5-8.Cheng Zhi-yu.The flash system in embedded system[J].Microcontrollers&Embedded System,2002(1):5-8.
[6]馮光磊,郭忠文,李正寶,等.基于ARM和Linux的USB OHCI驅(qū)動(dòng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2009,29(21):53.FENG Guang-lei,GUO Zhong-wen,LI Zheng-bao, et al.Design and realization of USB OHCI driver based on ARM and Linux[J].Joumal of Computer Applications.2009,29(21):53.