李 新,宋光磊,溫 靖,柳增運(yùn)
(1.北京化工大學(xué) 信息科學(xué)與技術(shù)學(xué)院,北京100029;2.中國空間技術(shù)研究院513所北京研發(fā)中心,北京100191)
責(zé)任編輯:任健男
近年來,隨著空間探測技術(shù)的快速發(fā)展,星上空間探測載荷設(shè)備種類日益增多,使得星載設(shè)備產(chǎn)生和處理的數(shù)據(jù)量迅速增長,各載荷設(shè)備間差異很大,有必要采用統(tǒng)一標(biāo)準(zhǔn)規(guī)范載荷設(shè)備的對外接口,使新設(shè)備更快地融入到新型號任務(wù)中,因此對星載設(shè)備的數(shù)據(jù)傳輸總線提出了更高的要求。SpaceWire總線是一種更好滿足現(xiàn)代星上設(shè)備間高速數(shù)據(jù)傳輸需求的傳輸標(biāo)準(zhǔn),已成為歐美等發(fā)達(dá)國家星載高速通信的首選方案。目前在國內(nèi)開展該技術(shù)研究較少,而且還沒有星上應(yīng)用實例。因此盡快大力研究此項技術(shù),對于提升國防航天實力具有重要意義。
本文設(shè)計由模擬綜管設(shè)備、模擬相機(jī)設(shè)備、模擬數(shù)傳設(shè)備和SpaceWire路由器組成的基于SpaceWire總線網(wǎng)絡(luò)圖像傳輸演示系統(tǒng),其中設(shè)備中采用FPGA和ARM處理器分別實現(xiàn)SpaceWire總線的底層協(xié)議和對系統(tǒng)的傳輸控制。經(jīng)驗證該演示系統(tǒng)可以進(jìn)行穩(wěn)定且高速的圖像數(shù)據(jù)傳輸,并且具有良好的可擴(kuò)展性,為下一步研制星載功能樣機(jī)奠定了基礎(chǔ)。
SpaceWire總線是國際上迄今為止第一個專為航天任務(wù)設(shè)計的協(xié)議標(biāo)準(zhǔn),由歐洲航天標(biāo)準(zhǔn)合作組織(ECSS)發(fā)布,該協(xié)議以IEEE1355—1995協(xié)議和LVDS標(biāo)準(zhǔn)為基礎(chǔ),提供通用接口標(biāo)準(zhǔn),簡化和規(guī)范了不同載荷設(shè)備的連接。SpaceWire總線的特點(diǎn)如下[1]:
1)全雙工、串行、點(diǎn)對點(diǎn)的數(shù)據(jù)總線,速碼率為2~400 Mbit/s,采用LVDS接口技術(shù);
2)電纜最長為10 m,連接器采用專為航天應(yīng)用開發(fā)設(shè)計的微型9針D型連接器;
3)節(jié)點(diǎn)內(nèi)部編碼方式采用數(shù)據(jù)—濾波(Data Strobe)編碼;
4)網(wǎng)絡(luò)通過SpaceWire路由器連接一定數(shù)量的SpaceWire結(jié)點(diǎn),節(jié)點(diǎn)可以通過SpaceWire電纜直接相連或通過SpaceWire路由器與其他SpaceWire節(jié)點(diǎn)或路由器相連;
5)SpaceWire總線標(biāo)準(zhǔn)ECSS-E-50-ST-12C涉及物理層、信號層、字符層、交換層、數(shù)據(jù)包層、網(wǎng)絡(luò)層共6層協(xié)議,對應(yīng)OSI模型中的物理層和數(shù)據(jù)鏈路層。
基于SpaceWire總線網(wǎng)絡(luò)圖像傳輸演示系統(tǒng)如圖1所示,主要包括4個星上模擬設(shè)備、1個監(jiān)控平臺、1個數(shù)據(jù)顯示平臺。4個模擬設(shè)備分別是模擬綜管設(shè)備、模擬相機(jī)設(shè)備、模擬數(shù)傳設(shè)備、SpaceWire路由器;監(jiān)控平臺用于向模擬綜管設(shè)備發(fā)送指令并接收模擬綜管設(shè)備的響應(yīng)數(shù)據(jù);數(shù)據(jù)顯示平臺用于接收顯示模擬數(shù)傳設(shè)備發(fā)送的數(shù)據(jù)。
圖1 系統(tǒng)總體組成
設(shè)備采用三星公司的ARM9內(nèi)核處理器S3C2440[2],工作頻率最高達(dá)到400 MHz,具有低功耗、高速的處理計算能力,根據(jù)演示系統(tǒng)功能配置以下外設(shè)資源,設(shè)備的基本硬件框圖如圖2所示。
圖2 模擬設(shè)備硬件基本框圖
FPGA采用Xilinx Spartan系列的XC3S1000芯片,封裝支持SpaceWire總線的IP核,實現(xiàn)了SpaceWire總線的底層協(xié)議。
NAND Flash采用K9F2G08芯片,該存儲芯片存儲容量高達(dá)256 Mbyte,而且具有價格低、讀寫速度快及可靠的耐用性。主要存儲u-boot引導(dǎo)代碼、Linux內(nèi)核以及文件系統(tǒng)。
SDRAM選用H57V2562GTR芯片,為內(nèi)核運(yùn)行提供運(yùn)行空間。
以太網(wǎng)接口電路使用DM9000網(wǎng)絡(luò)控制芯片,用于NFS服務(wù)和數(shù)據(jù)UDP協(xié)議傳輸。
在相機(jī)設(shè)備中的USB接口上外接ZC0301芯片的USB接口攝像頭實現(xiàn)圖像采集。
系統(tǒng)軟件在Linux操作系統(tǒng)基礎(chǔ)上構(gòu)建,系統(tǒng)軟件架構(gòu)如圖3所示,從底向上依次為u-boot,Linux操作系統(tǒng),設(shè)備驅(qū)動程序和SpaceWire網(wǎng)絡(luò)服務(wù)程序。系統(tǒng)上電后,u-boot初始化硬件設(shè)備,加載Linux內(nèi)核;SpaceWire網(wǎng)絡(luò)服務(wù)程序可以實現(xiàn)采集的圖像數(shù)據(jù)在SpaceWire網(wǎng)絡(luò)各節(jié)點(diǎn)間的傳輸。
圖3 系統(tǒng)軟件架構(gòu)
Bootloader引導(dǎo)程序選取u-boot-2010.09版本,該版本能夠很好地支持S3C2410處理器的架構(gòu)。S3C2440和S3C2410具有的相似性簡化了移植過程,提高了移植效率,在移植過程中添加了S3C2440配置、NAND Flash的啟動支持和DM9000的支持[3]。
系統(tǒng)內(nèi)核采用linux-2.6.33版本,支持V4L2驅(qū)動框架,集成USB和ZC0301攝像頭驅(qū)動,方便了移植工作。通過給linux-2.6.33版本內(nèi)核文件打補(bǔ)丁使其支持Yaffs2文件格式,在內(nèi)核選項圖像選單中,系統(tǒng)選擇ARM920T,CPU類型選擇S3C2440,驅(qū)動程序選中NAND Flash,DM9000,ZC0301P Camera。
文件系統(tǒng)采用Yaffs2文件系統(tǒng),該系統(tǒng)是針對NAND Flash設(shè)計的嵌入式文件系統(tǒng),適用于大容量存儲設(shè)備,內(nèi)存空間占用小、讀/寫速度快,性能優(yōu)越且易于移植。
MJPG-streamer是一款基于IP地址的視頻流服務(wù)器,綁定了一個輸入插件和多個輸出插件,通過插件實現(xiàn)從網(wǎng)絡(luò)攝像頭獲取JPEG格式的圖像并傳輸至客戶端[4]。系統(tǒng)移植MJPG-streamer視頻流服務(wù)器主要調(diào)用了input_uvc輸入組件和out_http輸出組件,程序流程如圖4所示。
Linux 中設(shè)備被當(dāng)作文件進(jìn)行處理,應(yīng)用層只需要獲得設(shè)備的文件描述符,通過系統(tǒng)調(diào)用就可完成對硬件設(shè)備的操作。這些由驅(qū)動程序完成從而使應(yīng)用程序不必關(guān)心過多的硬件細(xì)節(jié)。應(yīng)用程序發(fā)出系統(tǒng)調(diào)用指令后,會從用戶態(tài)轉(zhuǎn)換到內(nèi)核態(tài),通過內(nèi)核將系統(tǒng)調(diào)用轉(zhuǎn)換為對物理設(shè)備的操作[5]。
圖4 MJPG-streamer程序流程圖
用戶進(jìn)程通過設(shè)備文件同硬件設(shè)備打交道,對設(shè)備文件的操作就是一些系統(tǒng)調(diào)用,對于FPGA驅(qū)動來說,需要一個非常重要的數(shù)據(jù)結(jié)構(gòu)(file_operations)將系統(tǒng)調(diào)用與驅(qū)動程序關(guān)聯(lián)起來。數(shù)據(jù)結(jié)構(gòu)中包括了對FPGA進(jìn)行各種操作的函數(shù)指針,如open(),read(),write(),ioctl()等。
在SpaceWire總線網(wǎng)絡(luò)圖像傳輸系統(tǒng)的各個設(shè)備設(shè)計中,采用S3C2440作為主處理器,使用Xilinx公司的XC3S1000對其進(jìn)行FPGA擴(kuò)展,使系統(tǒng)支持SpaceWire總線傳輸功能。FPGA與ARM連接如圖5所示,S3C2440提供的主要連接有32位寬數(shù)據(jù)總線和27位寬地址總線,以及讀、寫、中斷和片選控制線等。
圖5 FPGA與ARM接口電路
1)設(shè)備驅(qū)動的初始化
初始化模塊在內(nèi)核啟動時主要負(fù)責(zé)初始化FPGA,由函數(shù)module_init()和module_exit()兩部分實現(xiàn)。系統(tǒng)中XC3S1000位于nGCS3上,對應(yīng)的物理地址為0x18000000-0x20000000,共128 Mbyte靜態(tài)地址空間。將FPGA主設(shè)備號定義為零,使操作系統(tǒng)隨機(jī)為該設(shè)備分配主設(shè)備號。
2)設(shè)備驅(qū)動地址的映射
驅(qū)動程序不能直接通過物理地址訪問FPGA的I/O內(nèi)存資源,需將物理地址映射到虛擬地址空間進(jìn)而實現(xiàn)訪問這些I/O內(nèi)存資源。FPGA初始化通過ioremap()完成物理地址到內(nèi)核空間的映射。本系統(tǒng)FPGA的片選使能控制信號為nGCS3,對應(yīng)的起始地址為0x18000000。
3)驅(qū)動程序控制接口函數(shù)
ioctl()用來設(shè)置FPGA內(nèi)部參數(shù),其中部分設(shè)置命令如表1所示,不同的命令對應(yīng)不同的cmd參數(shù),在ioctl()中采用switch(cmd)實現(xiàn)對FPGA參數(shù)的設(shè)置及狀態(tài)的讀取。
表1 ioctl命令字
演示系統(tǒng)將模擬綜管設(shè)備設(shè)計為主控設(shè)備,將模擬相機(jī)設(shè)備、模擬數(shù)傳設(shè)備設(shè)計為從控設(shè)備。系統(tǒng)SpaceWire網(wǎng)絡(luò)服務(wù)程序分為主控SpaceWire網(wǎng)絡(luò)服務(wù)程序和從控SpaceWire網(wǎng)絡(luò)服務(wù)程序兩部分。
1)通過移植MJPG-streamer視頻服務(wù)器軟件完成網(wǎng)絡(luò)圖像的采集并傳輸JPEG格式的圖像至客戶端程序,其中模擬相機(jī)設(shè)備調(diào)用input_uvc組件,模擬數(shù)傳設(shè)備調(diào)用out_http輸出組件。
2)完成從控設(shè)備間的信息交互以及SpaceWire網(wǎng)路各結(jié)點(diǎn)間的數(shù)據(jù)傳輸。
1)通過收發(fā)線程完成主控設(shè)備與從控設(shè)備的信息交互。主控設(shè)備通過SpaceWire傳輸協(xié)議可以快速獲取新接入設(shè)備的信息,完成對新接入設(shè)備的識別。同時從控設(shè)備也可以獲取主控設(shè)備的相關(guān)設(shè)備參數(shù)。
2)接收UDP接口服務(wù)程序的轉(zhuǎn)發(fā)命令[6],完成對SpaceWire網(wǎng)絡(luò)中設(shè)備的數(shù)據(jù)傳輸控制。主控設(shè)備在對所有網(wǎng)絡(luò)設(shè)備進(jìn)行信息交互的基礎(chǔ)上,為從控設(shè)備分配SpaceWire網(wǎng)絡(luò)中的參數(shù),包括網(wǎng)絡(luò)地址、通信速率、發(fā)起數(shù)據(jù)傳輸?shù)葏?shù),從而控制從控設(shè)備的數(shù)據(jù)傳輸。程序流程如圖6所示。
圖6 主控SpaceWire網(wǎng)絡(luò)服務(wù)程序流程
將系統(tǒng)設(shè)備連接并上電(如圖7所示),監(jiān)控平臺完成對插入設(shè)備的識別顯示后,設(shè)置載荷數(shù)據(jù)傳輸路徑配置指令,圖像數(shù)據(jù)從端口1通過SpaceWire路由器發(fā)送到端口5,端口5上的模擬數(shù)傳設(shè)備將接收到的模擬相機(jī)設(shè)備拍攝的圖像轉(zhuǎn)發(fā)至數(shù)傳顯示平臺。在數(shù)傳顯示平臺打開MJPG-streamer文件夾中的viewer軟件,輸入對應(yīng)的IP地址和端口號,點(diǎn)擊connect可以看到流暢的視頻圖像(如圖8所示)。示波器在SpaceWire鏈路建立時采集的數(shù)據(jù)波形如圖9所示,最小時寬為5 ns時,數(shù)據(jù)脈沖為200 MHz,即數(shù)據(jù)傳輸速率可達(dá)200 Mbit/s,高于1553B或CAN總線的傳輸速率(一般不超過2 Mbit/s)。
目前,SpaceWire總線技術(shù)已被歐空局、美國航天局在多個航天任務(wù)中使用。文中搭建了一種基于SpaceWire總線網(wǎng)絡(luò)圖像傳輸系統(tǒng),模擬了圖像數(shù)據(jù)在SpaceWire網(wǎng)絡(luò)高速可靠的傳輸,簡化了設(shè)備的連接,并具有良好的可擴(kuò)展性。
[1]European Cooperation for Space Standardization.(Standard ECSS-E-50-12A)SpaceWire,Links,Nodes,Routers and Networks(Issue 1)[S].2003.
[2]S3C2440X RISC MICROPROCESSOR date sheet[EB/OL].[2012-10-20].http://www.alldatasheet.com/datasheet-pdf/pdf/93102/SAMSUNG/S3C2440X.html.
[3]YAGHMOUR K.Building embedded Linux system[M].New York:O’Reilly & Associates,2003.
[4]陳書益,黃永慧.開源視頻服務(wù)器軟件MJPG-streamer的研究和應(yīng)用[J].電子設(shè)計工程,2012,20(5):172-176.
[5]李俊.嵌入式Linux設(shè)備驅(qū)動開發(fā)詳解[M].北京:人民郵電出版社,2008.
[6]劉暢,彭楚武.Linux下的UDP協(xié)議編程[J].儀表技術(shù),2005(4):62-64.