何 帥,王文基,狄衛(wèi)國(guó)
(1.中國(guó)電子科技集團(tuán)公司第五十四研究所,河北 石家莊 050081;
2.空軍石家莊地區(qū)軍事代表室,河北 石家莊 050081;
3.石家莊鐵道大學(xué) 電氣與電子工程學(xué)院,河北 石家莊050043)
?
基于WDF的航天測(cè)控?cái)?shù)字基帶板驅(qū)動(dòng)程序設(shè)計(jì)
何帥1,王文基2,狄衛(wèi)國(guó)3
(1.中國(guó)電子科技集團(tuán)公司第五十四研究所,河北 石家莊 050081;
2.空軍石家莊地區(qū)軍事代表室,河北 石家莊 050081;
3.石家莊鐵道大學(xué) 電氣與電子工程學(xué)院,河北 石家莊050043)
摘要航天測(cè)控系統(tǒng)面臨著操作系統(tǒng)升級(jí)的問(wèn)題,這就需要為數(shù)字基帶板開(kāi)發(fā)基于64位操作系統(tǒng)的設(shè)備驅(qū)動(dòng)程序。針對(duì)這種需求,研究了Windows操作系統(tǒng)下驅(qū)動(dòng)程序基礎(chǔ)(Windows Driver Fundation,WDF)驅(qū)動(dòng)程序的工作機(jī)制,采用WDF程序框架設(shè)計(jì)了基帶設(shè)備板卡設(shè)備驅(qū)動(dòng)程序,并設(shè)計(jì)了相應(yīng)的應(yīng)用程序編程接口(Application Programming Interface,API)和測(cè)試程序。通過(guò)對(duì)設(shè)備驅(qū)動(dòng)程序及數(shù)字基帶板的測(cè)試,結(jié)果表明其功能得以實(shí)現(xiàn),雙通道數(shù)據(jù)接收能夠在40 Mbps速率下長(zhǎng)時(shí)間穩(wěn)定地工作。
關(guān)鍵詞數(shù)字基帶;WDF;設(shè)備驅(qū)動(dòng);應(yīng)用程序編程接口
The Design of Digital Baseband Card Device Driver Programs for Space TT&C Based on WDF
HE Shuai1,WANG Wen-ji2,DI Wei-guo3
(1.The54thResearchInstituteofCETC,ShijiazhuangHebei050081,China;2.MilitaryRepresentOfficeofAirForceinShijiazhuang,ShijiazhuangHebei050081,China;3.CollegeofElectricalandElectronicsEngineering,ShijiazhuangTiedaoUniversity,ShijiazhuangHebei050043,China)
AbstractSpace TT&C systems has to confront the problem of operating system upgrading.And there is a demand to develop the device driver programs for Digital Baseband Card based on 64 bits Windows operating system.For this case,we have studied the working principle of device driver programs based on WDF.With this WDF frame,the device driver programs of digital baseband card is designed.Also,the application programming interface and test programs have been designed and developed.Some tests have been performed for the device driver programs.The result demonstrates that it can meet the requirement in function.The data transfer rate using DMA dual-channel reaches 40 Mbps.And it works well continuously for long time.
Key wordsdigital baseband;WDF;device drive;application programming interface
0引言
伴隨著數(shù)字基帶測(cè)控技術(shù)的發(fā)展[1],地面測(cè)控設(shè)備已經(jīng)完成了集成化、小型化轉(zhuǎn)變,將遙控、測(cè)速、測(cè)距、測(cè)角、遙測(cè)接收和數(shù)傳數(shù)據(jù)接收等功能高度集成到基帶信號(hào)處理板上[2]。目前,航天測(cè)控基帶終端計(jì)算機(jī)的操作系統(tǒng)大多采用Windows XP 32位版本,受制于32位操作系統(tǒng)的限制,計(jì)算機(jī)內(nèi)存和其他外設(shè)無(wú)法升級(jí),所以升級(jí)64位操作系統(tǒng)迫在眉睫。
由于64位操作系統(tǒng)與32位操作系統(tǒng)系統(tǒng)架構(gòu)有很大區(qū)別,設(shè)備驅(qū)動(dòng)程序無(wú)法實(shí)現(xiàn)兼容,原有基帶板卡驅(qū)動(dòng)程序?qū)o(wú)法使用,需要重新設(shè)計(jì)和開(kāi)發(fā)。針對(duì)這個(gè)問(wèn)題,研究了WDF驅(qū)動(dòng)程序模型及其在64位Windows 7平臺(tái)下的工作機(jī)制,設(shè)計(jì)出數(shù)字基帶板的驅(qū)動(dòng)程序和相應(yīng)的API函數(shù)。
1基帶終端整體框架
航天測(cè)控基帶終端采取分層設(shè)計(jì),如圖 1所示。通過(guò)驅(qū)動(dòng)程序和API接口函數(shù)將數(shù)字基帶板、操作系統(tǒng)和應(yīng)用程序進(jìn)行了結(jié)合,達(dá)到了完成測(cè)控任務(wù)的目的。

圖1 基帶終端分層設(shè)計(jì)
數(shù)字基帶板卡由FPGA、DSP、PCI接口芯片及相關(guān)輔助模塊組成[3]。其中,PCI接口芯片完成PCI接口與FPGA、PCI接口與計(jì)算機(jī)總線之間的接口轉(zhuǎn)換,該芯片具有2個(gè)獨(dú)立的DMA通道,可實(shí)現(xiàn)高速數(shù)據(jù)傳輸。
設(shè)備驅(qū)動(dòng)程序是硬件板卡和操作系統(tǒng)之間的橋梁,具備打開(kāi)/關(guān)閉設(shè)備、讀寫(xiě)數(shù)據(jù)和中斷處理等功能。應(yīng)用程序API接口函數(shù)為應(yīng)用程序提供了通過(guò)驅(qū)動(dòng)程序訪問(wèn)硬件設(shè)備的接口,提供打開(kāi)設(shè)備、讀取/寫(xiě)入指定地址數(shù)據(jù)、中斷允許/禁止控制、DMA讀寫(xiě)和關(guān)閉設(shè)備等函數(shù)。
2WDF框架驅(qū)動(dòng)程序框架
WDF是微軟提出的全新的驅(qū)動(dòng)程序模型[4],提供了更高層次抽象的高度靈活、可擴(kuò)展和可診斷的驅(qū)動(dòng)程序框架。
WDF提供了2個(gè)框架[5]:內(nèi)核模式驅(qū)動(dòng)程序框架(KMDF)和用戶模式驅(qū)動(dòng)程序框架(UMDF)。數(shù)字基帶板設(shè)備驅(qū)動(dòng)程序運(yùn)行在內(nèi)核模式,所以文中只介紹KMDF框架。
KMDF框架支持面向?qū)ο蟆⑹录?qū)動(dòng)的驅(qū)動(dòng)程序模型[6]。該框架定義了一系列的對(duì)象用來(lái)表示設(shè)備、驅(qū)動(dòng)和中斷等,每個(gè)對(duì)象有對(duì)應(yīng)的屬性、方法和事件,驅(qū)動(dòng)程序利用這些方法創(chuàng)建對(duì)象、設(shè)置屬性和響應(yīng)事件,如表 1所示;另外,該框架還定義了一系列例程函數(shù)用于定義驅(qū)動(dòng)程序的入口函數(shù)、設(shè)備添加、設(shè)備刪除和I/O請(qǐng)求處理等,如表 2所示。關(guān)于KMDF框架內(nèi)容較多,在此僅介紹與本文相關(guān)的基本內(nèi)容。

表1 KMDF框架模型定義的主要對(duì)象

表2 KMDF框架模型定義的主要例程
3數(shù)字基帶板驅(qū)動(dòng)程序設(shè)計(jì)
3.1驅(qū)動(dòng)程序設(shè)計(jì)
數(shù)字基帶板卡驅(qū)動(dòng)程序按照WDF框架進(jìn)行設(shè)計(jì),如圖 2所示。

圖2 數(shù)字基帶板驅(qū)動(dòng)程序框架
數(shù)字基帶板卡驅(qū)動(dòng)程序針對(duì)KMDF框架中的各個(gè)例程進(jìn)行了設(shè)計(jì),這里對(duì)主要例程中對(duì)應(yīng)的相關(guān)函數(shù)進(jìn)行介紹。
3.1.1EvtDriverDeviceAdd例程
實(shí)現(xiàn)名稱WDFBBE_EvtDeviceAdd(),該例程完成設(shè)備對(duì)象創(chuàng)建以及各個(gè)例程的初始化和掛接工作:
① 調(diào)用WDF_PNPPOWER_EVENT_CAL_LBACKS_INIT初始化即插即用回調(diào)例程,并掛接EvtDevicePrepareHardware和EvtDeviceReleaseHardware例程;
② 調(diào)用WdfDeviceCreate創(chuàng)建設(shè)備對(duì)象,并建立一個(gè)私有的設(shè)備擴(kuò)展對(duì)象;
③ 初始化中斷服務(wù)例程和DPC例程,并創(chuàng)建中斷對(duì)象;
④ 初始化IRP請(qǐng)求隊(duì)列,并掛接EvtIoRead、EvtIoWrite和EvtIoDeviceControl等例程;
⑤ 初始化DMA對(duì)象;
⑥ 注冊(cè)設(shè)備接口,給出設(shè)備名并創(chuàng)建應(yīng)用程序能夠使用的符號(hào)連接;
⑦ 注冊(cè)設(shè)備接口,給出設(shè)備名并創(chuàng)建符號(hào)連接。數(shù)字基帶板卡驅(qū)動(dòng)程序采用命名方法命名設(shè)備對(duì)象,并創(chuàng)建應(yīng)用程序能夠使用的符號(hào)連接,該名稱為“WDFBBEBOARD*”。
3.1.2EvtIoRead例程
實(shí)現(xiàn)名稱WDFBBE_EvtIoRead(),用于響應(yīng)上層應(yīng)用軟件的ReadFile操作,該操作用于進(jìn)行DMA數(shù)據(jù)讀操作,由于該請(qǐng)求未必能夠馬上完成,所以需將該請(qǐng)求保存到設(shè)備對(duì)象擴(kuò)展中,待數(shù)據(jù)中斷到來(lái)后才能完成;另外,收到該請(qǐng)求后需啟動(dòng)一次定時(shí)器,如在既定時(shí)間內(nèi)該請(qǐng)求未能完成則在定時(shí)消息響應(yīng)例程將該請(qǐng)求標(biāo)記為超時(shí)并返回。
3.1.3EvtIoWrite例程
實(shí)現(xiàn)名稱WDFBBE_EvtIoWrite(),用于響應(yīng)上層應(yīng)用軟件的WriteFile操作,該操作用于進(jìn)行DMA數(shù)據(jù)寫(xiě)操作,由于該請(qǐng)求未必能夠馬上完成,所以需將該請(qǐng)求保存到設(shè)備對(duì)象擴(kuò)展中,待數(shù)據(jù)中斷到來(lái)后才能完成;另外,收到該請(qǐng)求后需啟動(dòng)一次定時(shí)器,如在既定時(shí)間內(nèi)該請(qǐng)求未能完成則在定時(shí)消息響應(yīng)例程將該請(qǐng)求標(biāo)記為超時(shí)并返回。
3.1.4中斷處理例程(ISR)
實(shí)現(xiàn)名稱WDFBBE_EvtInterruptIsr()。Windows的中斷處理機(jī)制允許多個(gè)設(shè)備共享一個(gè)硬件中斷[7]。因此,中斷服務(wù)例程(ISR)的首要工作就是判斷是否為期望的中斷。ISR執(zhí)行在高于DISPATCH_LEVEL的IRQL上,在ISR能調(diào)用的內(nèi)核模式函數(shù)十分有限。為了提高系統(tǒng)性能,ISR應(yīng)該盡可能快地執(zhí)行,只做服務(wù)硬件所需的最小量的工作(如清除中斷),然后立即返回。如果有額外的工作需要做(例如完成一個(gè)IRP),應(yīng)該由延遲過(guò)程調(diào)用(DPC)例程來(lái)完成。基帶板卡共可以產(chǎn)生2種類型的中斷:數(shù)據(jù)中斷、DMA結(jié)束中斷[8]。在本例程中應(yīng)首先讀取中斷控制/狀態(tài)寄存器,根據(jù)標(biāo)志位判斷基帶板卡是否產(chǎn)生了中斷,產(chǎn)生了哪種類型的中斷。如果沒(méi)有產(chǎn)生中斷則立即返回FALSE即可。如果產(chǎn)生了數(shù)據(jù)中斷,應(yīng)判斷當(dāng)前IRP類型(讀/寫(xiě)),清楚中斷后申請(qǐng)一個(gè)DPC請(qǐng)求用于后續(xù)啟動(dòng)DMA(讀/寫(xiě))傳輸。如果產(chǎn)生了DMA結(jié)束中斷,也應(yīng)判斷當(dāng)前IRP類型(讀/寫(xiě)),清除中斷后也申請(qǐng)一個(gè)DPC請(qǐng)求用于完成該請(qǐng)求。在申請(qǐng)DPC時(shí)應(yīng)標(biāo)明該請(qǐng)求的類型(DMA讀/ DMA寫(xiě)/DMA讀完成/DMA寫(xiě)完成)。
3.1.5DPC例程
實(shí)現(xiàn)名稱WDFBBE_EvtInterruptDpc(),DPC例程用于完成中斷處理例程中未完成的工作,在本驅(qū)動(dòng)程序中中斷處理例程申請(qǐng)了4種類型的DPC,所以在DPC例程中也有以下4種處理:
① DMA讀:計(jì)算本次可以讀取數(shù)據(jù)的長(zhǎng)度,然后啟動(dòng)DMA傳輸;
② DMA寫(xiě):計(jì)算本次可以寫(xiě)入數(shù)據(jù)的長(zhǎng)度,然后啟動(dòng)DMA傳輸;
③ DMA讀完成:保存已讀取數(shù)據(jù)的最終地址后,完成該請(qǐng)求;
④ DMA寫(xiě)完成:保存當(dāng)前寫(xiě)數(shù)據(jù)的最終地址后,完成該請(qǐng)求。
3.2驅(qū)動(dòng)程序API接口設(shè)計(jì)
為了便于上層應(yīng)用程序通過(guò)設(shè)備驅(qū)動(dòng)程序訪問(wèn)基帶設(shè)備[9],用Visual Stuido 2010開(kāi)發(fā)驅(qū)動(dòng)程序API接口,在該API接口中封裝了設(shè)備創(chuàng)建、設(shè)備關(guān)閉、DMA接收數(shù)據(jù)、DMA發(fā)送數(shù)據(jù)和設(shè)備中斷控制等函數(shù)。這里主要介紹DMA讀寫(xiě)函數(shù)。
3.2.1DMA讀取數(shù)據(jù)函數(shù)
函數(shù)格式:bool DMARead(BYTE*pReadBuffer,int iReadLen,int& iRetLen,int& iRetID)
pReadBuffer表示存放被讀取數(shù)據(jù)的緩沖區(qū)的指針;iReadLen表示本次所要讀取數(shù)據(jù)的字節(jié)數(shù);iRetLen表示返回值存放本次成功讀取數(shù)據(jù)的字節(jié)數(shù);iRetID表示返回值指示本次從哪個(gè)通道讀取了數(shù)據(jù),范圍為1~2。此函數(shù)返回結(jié)果為布爾型,函數(shù)的返回值為true表示讀取數(shù)據(jù)成功,長(zhǎng)度存放在iReadedLen中;返回值為false表示讀取數(shù)據(jù)失敗。
當(dāng)應(yīng)用程序調(diào)用讀取數(shù)據(jù)函數(shù)后,讀取數(shù)據(jù)函數(shù)會(huì)被阻塞,當(dāng)數(shù)據(jù)中斷到來(lái),驅(qū)動(dòng)程序讀完一次數(shù)據(jù)后,讀取數(shù)據(jù)函數(shù)才會(huì)返回。
3.2.2DMA數(shù)據(jù)寫(xiě)入函數(shù)
函數(shù)格式:bool DMAWrite(BYTE*pWriteBuffer,int iWriteLen,int& iRetLen)
pWriteBuffer表示存放需要寫(xiě)入數(shù)據(jù)的緩沖區(qū)的指針;iWriteLen表示本次所要寫(xiě)入數(shù)據(jù)的長(zhǎng)度;iRetLen表示返回值存放本次成功寫(xiě)入數(shù)據(jù)的長(zhǎng)度。此函數(shù)返回結(jié)果為布爾型,函數(shù)的返回值為true表示寫(xiě)入數(shù)據(jù)成功,長(zhǎng)度存放在iWrittenLen中;返回值為false表示寫(xiě)入數(shù)據(jù)失敗。
當(dāng)應(yīng)用程序調(diào)用寫(xiě)入數(shù)據(jù)函數(shù)后,寫(xiě)入數(shù)據(jù)函數(shù)會(huì)被阻塞,當(dāng)數(shù)據(jù)寫(xiě)操作完成或操作失敗才會(huì)返回。
4驅(qū)動(dòng)程序測(cè)試及結(jié)果分析
4.1API接口測(cè)試
驅(qū)動(dòng)程序測(cè)試程序集成了驅(qū)動(dòng)程序API接口模塊,并設(shè)計(jì)了專用操控界面進(jìn)行API接口測(cè)試,該界面通過(guò)調(diào)用API接口函數(shù)可以實(shí)現(xiàn)多板卡識(shí)別、設(shè)備讀寫(xiě)等功能。
4.2DMA數(shù)據(jù)傳輸測(cè)試
針對(duì)實(shí)際應(yīng)用,從數(shù)據(jù)傳輸速率、數(shù)據(jù)傳輸可靠性和資源占用率方面進(jìn)行DMA數(shù)據(jù)傳輸測(cè)試。測(cè)試中設(shè)定傳輸速率為20 Mbps,數(shù)據(jù)中斷頻率為100 Hz,F(xiàn)PGA程序?qū)y(cè)試程序下發(fā)的帶幀序號(hào)的模擬數(shù)據(jù)通過(guò)單/雙通道DMA上報(bào)測(cè)試程序,應(yīng)用程序?qū)崟r(shí)統(tǒng)計(jì)丟幀數(shù)、誤碼率和CPU占用率。測(cè)試結(jié)果如表 3和表 4所示。

表3 單通道自閉環(huán)測(cè)試表

表4 雙通道自閉環(huán)測(cè)試表
4.3測(cè)試結(jié)果分析
API接口測(cè)試和DMA數(shù)據(jù)傳輸測(cè)試表明,在基帶板卡和測(cè)試程序配合下,驅(qū)動(dòng)程序可以很好地完成單路20 Mbps發(fā)送和單路/2路20 Mbps數(shù)據(jù)接收,2路數(shù)據(jù)接收可以達(dá)到40 Mbps。通過(guò)多次長(zhǎng)時(shí)間的測(cè)試,整套基帶終端設(shè)備工作穩(wěn)定,驅(qū)動(dòng)程序運(yùn)行正常。
5結(jié)束語(yǔ)
從測(cè)控系統(tǒng)數(shù)字基帶技術(shù)的發(fā)展形勢(shì)[10],結(jié)合當(dāng)前系統(tǒng)平臺(tái)升級(jí)需求,分析了測(cè)控系統(tǒng)數(shù)字基帶驅(qū)動(dòng)程序的功能和性能需求,提出了以WDF模型為核心技術(shù)的解決方案。
文章把WDF驅(qū)動(dòng)程序技術(shù)應(yīng)用于航天測(cè)控系統(tǒng)的數(shù)字基帶設(shè)備,完成了設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)和實(shí)現(xiàn);為方便上層應(yīng)用程序訪問(wèn)基帶板卡,設(shè)計(jì)了基于基帶板卡驅(qū)動(dòng)程序的API接口模塊;最后開(kāi)發(fā)了測(cè)試程序,對(duì)API接口模塊、驅(qū)動(dòng)程序和基帶設(shè)備集成性能進(jìn)行測(cè)試。
由于受數(shù)字基帶板硬件條件限制,DMA數(shù)據(jù)傳輸測(cè)試使用20 Mbps的發(fā)送速率。在以后的應(yīng)用中,隨著硬件系統(tǒng)的升級(jí),DMA數(shù)據(jù)傳輸速率能夠得到大幅度的提升[11],以更好地滿足航天測(cè)控發(fā)展的需要。
參考文獻(xiàn)
[1]唐軍,謝澍霖.測(cè)通通信系統(tǒng)綜合基帶設(shè)備的發(fā)展和應(yīng)用[J].電訊技術(shù),2001(4):6-9.
[2]房鴻瑞.導(dǎo)彈航天測(cè)控新技術(shù)管窺[J].遙測(cè)遙控,2006,36(5):1-8.
[3]張麗君.基于IP核的PCI接口FPGA設(shè)計(jì)實(shí)現(xiàn)[J].無(wú)線電通信技術(shù),2013,39(1):91-93.
[4]王蘭英,居錦武.Windows平臺(tái)驅(qū)動(dòng)程序新架構(gòu)分析[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2008(1):109-112.
[5]李正平,徐超,陳軍寧,等.WDF設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007,17(5):228-230.
[6]張小磊,孟李林,崔晨琪.基于KMDF的PCI Express設(shè)備驅(qū)動(dòng)設(shè)計(jì)[J].西安航空學(xué)院學(xué)報(bào),2014,32(1):59-63.
[7]王孝國(guó),王凌,張雄偉.高速數(shù)據(jù)采集系統(tǒng)中的PCI中斷處理機(jī)制和DMA編程[J].軍事通信技術(shù),2004,25(1):44-47.
[8]滑偉.一種PCI總線接口的數(shù)據(jù)接收卡設(shè)計(jì)[J].無(wú)線電通信技術(shù),2013,39(4):53-55.
[9]馬進(jìn).數(shù)控工業(yè)以太網(wǎng)系統(tǒng)設(shè)計(jì)及驅(qū)動(dòng)程序開(kāi)發(fā)[D].上海:上海交通大學(xué),2010:31-32.
[10]信侃.基于Xilinx FPGA的PCIe總線接口設(shè)計(jì)與實(shí)現(xiàn)[J].無(wú)線電通信技術(shù),2014,40(4):94-96.
[11]王波,郭建.基于PCI設(shè)備的DMA傳輸建模與分析[J].計(jì)算機(jī)測(cè)量與控制,2011(4):972-974.
何帥男,(1986—),助理工程師。主要研究方向:航天測(cè)控。
王文基男,(1978—),碩士,工程師。主要研究方向:武器裝備質(zhì)量控制與監(jiān)督檢驗(yàn)。
作者簡(jiǎn)介
中圖分類號(hào)TP391.4
文獻(xiàn)標(biāo)志碼A
文章編號(hào)1003-3106(2016)04-0005-04
基金項(xiàng)目:國(guó)家自然科學(xué)基金資助項(xiàng)目(61401119);河北省教育廳基金資助項(xiàng)目(Q2012118)。
收稿日期:2016-01-07
doi:10.3969/j.issn.1003-3106.2016.04.02
引用格式:何帥,王文基,狄衛(wèi)國(guó).基于WDF的航天測(cè)控?cái)?shù)字基帶板驅(qū)動(dòng)程序設(shè)計(jì)[J].無(wú)線電工程,2016,46(4):5-8,17.