何 帥,王文基,狄衛(wèi)國
(1.中國電子科技集團公司第五十四研究所,河北 石家莊 050081;
2.空軍石家莊地區(qū)軍事代表室,河北 石家莊 050081;
3.石家莊鐵道大學(xué) 電氣與電子工程學(xué)院,河北 石家莊050043)
?
基于WDF的航天測控數(shù)字基帶板驅(qū)動程序設(shè)計
何帥1,王文基2,狄衛(wèi)國3
(1.中國電子科技集團公司第五十四研究所,河北 石家莊 050081;
2.空軍石家莊地區(qū)軍事代表室,河北 石家莊 050081;
3.石家莊鐵道大學(xué) 電氣與電子工程學(xué)院,河北 石家莊050043)
摘要航天測控系統(tǒng)面臨著操作系統(tǒng)升級的問題,這就需要為數(shù)字基帶板開發(fā)基于64位操作系統(tǒng)的設(shè)備驅(qū)動程序。針對這種需求,研究了Windows操作系統(tǒng)下驅(qū)動程序基礎(chǔ)(Windows Driver Fundation,WDF)驅(qū)動程序的工作機制,采用WDF程序框架設(shè)計了基帶設(shè)備板卡設(shè)備驅(qū)動程序,并設(shè)計了相應(yīng)的應(yīng)用程序編程接口(Application Programming Interface,API)和測試程序。通過對設(shè)備驅(qū)動程序及數(shù)字基帶板的測試,結(jié)果表明其功能得以實現(xiàn),雙通道數(shù)據(jù)接收能夠在40 Mbps速率下長時間穩(wěn)定地工作。
關(guān)鍵詞數(shù)字基帶;WDF;設(shè)備驅(qū)動;應(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ù)字基帶測控技術(shù)的發(fā)展[1],地面測控設(shè)備已經(jīng)完成了集成化、小型化轉(zhuǎn)變,將遙控、測速、測距、測角、遙測接收和數(shù)傳數(shù)據(jù)接收等功能高度集成到基帶信號處理板上[2]。目前,航天測控基帶終端計算機的操作系統(tǒng)大多采用Windows XP 32位版本,受制于32位操作系統(tǒng)的限制,計算機內(nèi)存和其他外設(shè)無法升級,所以升級64位操作系統(tǒng)迫在眉睫。
由于64位操作系統(tǒng)與32位操作系統(tǒng)系統(tǒng)架構(gòu)有很大區(qū)別,設(shè)備驅(qū)動程序無法實現(xiàn)兼容,原有基帶板卡驅(qū)動程序?qū)o法使用,需要重新設(shè)計和開發(fā)。針對這個問題,研究了WDF驅(qū)動程序模型及其在64位Windows 7平臺下的工作機制,設(shè)計出數(shù)字基帶板的驅(qū)動程序和相應(yīng)的API函數(shù)。
1基帶終端整體框架
航天測控基帶終端采取分層設(shè)計,如圖 1所示。通過驅(qū)動程序和API接口函數(shù)將數(shù)字基帶板、操作系統(tǒng)和應(yīng)用程序進行了結(jié)合,達到了完成測控任務(wù)的目的。
圖1 基帶終端分層設(shè)計
數(shù)字基帶板卡由FPGA、DSP、PCI接口芯片及相關(guān)輔助模塊組成[3]。其中,PCI接口芯片完成PCI接口與FPGA、PCI接口與計算機總線之間的接口轉(zhuǎn)換,該芯片具有2個獨立的DMA通道,可實現(xiàn)高速數(shù)據(jù)傳輸。
設(shè)備驅(qū)動程序是硬件板卡和操作系統(tǒng)之間的橋梁,具備打開/關(guān)閉設(shè)備、讀寫數(shù)據(jù)和中斷處理等功能。應(yīng)用程序API接口函數(shù)為應(yīng)用程序提供了通過驅(qū)動程序訪問硬件設(shè)備的接口,提供打開設(shè)備、讀取/寫入指定地址數(shù)據(jù)、中斷允許/禁止控制、DMA讀寫和關(guān)閉設(shè)備等函數(shù)。
2WDF框架驅(qū)動程序框架
WDF是微軟提出的全新的驅(qū)動程序模型[4],提供了更高層次抽象的高度靈活、可擴展和可診斷的驅(qū)動程序框架。
WDF提供了2個框架[5]:內(nèi)核模式驅(qū)動程序框架(KMDF)和用戶模式驅(qū)動程序框架(UMDF)。數(shù)字基帶板設(shè)備驅(qū)動程序運行在內(nèi)核模式,所以文中只介紹KMDF框架。
KMDF框架支持面向?qū)ο?、事件?qū)動的驅(qū)動程序模型[6]。該框架定義了一系列的對象用來表示設(shè)備、驅(qū)動和中斷等,每個對象有對應(yīng)的屬性、方法和事件,驅(qū)動程序利用這些方法創(chuàng)建對象、設(shè)置屬性和響應(yīng)事件,如表 1所示;另外,該框架還定義了一系列例程函數(shù)用于定義驅(qū)動程序的入口函數(shù)、設(shè)備添加、設(shè)備刪除和I/O請求處理等,如表 2所示。關(guān)于KMDF框架內(nèi)容較多,在此僅介紹與本文相關(guān)的基本內(nèi)容。
表1 KMDF框架模型定義的主要對象
表2 KMDF框架模型定義的主要例程
3數(shù)字基帶板驅(qū)動程序設(shè)計
3.1驅(qū)動程序設(shè)計
數(shù)字基帶板卡驅(qū)動程序按照WDF框架進行設(shè)計,如圖 2所示。
圖2 數(shù)字基帶板驅(qū)動程序框架
數(shù)字基帶板卡驅(qū)動程序針對KMDF框架中的各個例程進行了設(shè)計,這里對主要例程中對應(yīng)的相關(guān)函數(shù)進行介紹。
3.1.1EvtDriverDeviceAdd例程
實現(xiàn)名稱WDFBBE_EvtDeviceAdd(),該例程完成設(shè)備對象創(chuàng)建以及各個例程的初始化和掛接工作:
① 調(diào)用WDF_PNPPOWER_EVENT_CAL_LBACKS_INIT初始化即插即用回調(diào)例程,并掛接EvtDevicePrepareHardware和EvtDeviceReleaseHardware例程;
② 調(diào)用WdfDeviceCreate創(chuàng)建設(shè)備對象,并建立一個私有的設(shè)備擴展對象;
③ 初始化中斷服務(wù)例程和DPC例程,并創(chuàng)建中斷對象;
④ 初始化IRP請求隊列,并掛接EvtIoRead、EvtIoWrite和EvtIoDeviceControl等例程;
⑤ 初始化DMA對象;
⑥ 注冊設(shè)備接口,給出設(shè)備名并創(chuàng)建應(yīng)用程序能夠使用的符號連接;
⑦ 注冊設(shè)備接口,給出設(shè)備名并創(chuàng)建符號連接。數(shù)字基帶板卡驅(qū)動程序采用命名方法命名設(shè)備對象,并創(chuàng)建應(yīng)用程序能夠使用的符號連接,該名稱為“WDFBBEBOARD*”。
3.1.2EvtIoRead例程
實現(xiàn)名稱WDFBBE_EvtIoRead(),用于響應(yīng)上層應(yīng)用軟件的ReadFile操作,該操作用于進行DMA數(shù)據(jù)讀操作,由于該請求未必能夠馬上完成,所以需將該請求保存到設(shè)備對象擴展中,待數(shù)據(jù)中斷到來后才能完成;另外,收到該請求后需啟動一次定時器,如在既定時間內(nèi)該請求未能完成則在定時消息響應(yīng)例程將該請求標記為超時并返回。
3.1.3EvtIoWrite例程
實現(xiàn)名稱WDFBBE_EvtIoWrite(),用于響應(yīng)上層應(yīng)用軟件的WriteFile操作,該操作用于進行DMA數(shù)據(jù)寫操作,由于該請求未必能夠馬上完成,所以需將該請求保存到設(shè)備對象擴展中,待數(shù)據(jù)中斷到來后才能完成;另外,收到該請求后需啟動一次定時器,如在既定時間內(nèi)該請求未能完成則在定時消息響應(yīng)例程將該請求標記為超時并返回。
3.1.4中斷處理例程(ISR)
實現(xiàn)名稱WDFBBE_EvtInterruptIsr()。Windows的中斷處理機制允許多個設(shè)備共享一個硬件中斷[7]。因此,中斷服務(wù)例程(ISR)的首要工作就是判斷是否為期望的中斷。ISR執(zhí)行在高于DISPATCH_LEVEL的IRQL上,在ISR能調(diào)用的內(nèi)核模式函數(shù)十分有限。為了提高系統(tǒng)性能,ISR應(yīng)該盡可能快地執(zhí)行,只做服務(wù)硬件所需的最小量的工作(如清除中斷),然后立即返回。如果有額外的工作需要做(例如完成一個IRP),應(yīng)該由延遲過程調(diào)用(DPC)例程來完成?;鶐О蹇ü部梢援a(chǎn)生2種類型的中斷:數(shù)據(jù)中斷、DMA結(jié)束中斷[8]。在本例程中應(yīng)首先讀取中斷控制/狀態(tài)寄存器,根據(jù)標志位判斷基帶板卡是否產(chǎn)生了中斷,產(chǎn)生了哪種類型的中斷。如果沒有產(chǎn)生中斷則立即返回FALSE即可。如果產(chǎn)生了數(shù)據(jù)中斷,應(yīng)判斷當前IRP類型(讀/寫),清楚中斷后申請一個DPC請求用于后續(xù)啟動DMA(讀/寫)傳輸。如果產(chǎn)生了DMA結(jié)束中斷,也應(yīng)判斷當前IRP類型(讀/寫),清除中斷后也申請一個DPC請求用于完成該請求。在申請DPC時應(yīng)標明該請求的類型(DMA讀/ DMA寫/DMA讀完成/DMA寫完成)。
3.1.5DPC例程
實現(xiàn)名稱WDFBBE_EvtInterruptDpc(),DPC例程用于完成中斷處理例程中未完成的工作,在本驅(qū)動程序中中斷處理例程申請了4種類型的DPC,所以在DPC例程中也有以下4種處理:
① DMA讀:計算本次可以讀取數(shù)據(jù)的長度,然后啟動DMA傳輸;
② DMA寫:計算本次可以寫入數(shù)據(jù)的長度,然后啟動DMA傳輸;
③ DMA讀完成:保存已讀取數(shù)據(jù)的最終地址后,完成該請求;
④ DMA寫完成:保存當前寫數(shù)據(jù)的最終地址后,完成該請求。
3.2驅(qū)動程序API接口設(shè)計
為了便于上層應(yīng)用程序通過設(shè)備驅(qū)動程序訪問基帶設(shè)備[9],用Visual Stuido 2010開發(fā)驅(qū)動程序API接口,在該API接口中封裝了設(shè)備創(chuàng)建、設(shè)備關(guān)閉、DMA接收數(shù)據(jù)、DMA發(fā)送數(shù)據(jù)和設(shè)備中斷控制等函數(shù)。這里主要介紹DMA讀寫函數(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表示返回值指示本次從哪個通道讀取了數(shù)據(jù),范圍為1~2。此函數(shù)返回結(jié)果為布爾型,函數(shù)的返回值為true表示讀取數(shù)據(jù)成功,長度存放在iReadedLen中;返回值為false表示讀取數(shù)據(jù)失敗。
當應(yīng)用程序調(diào)用讀取數(shù)據(jù)函數(shù)后,讀取數(shù)據(jù)函數(shù)會被阻塞,當數(shù)據(jù)中斷到來,驅(qū)動程序讀完一次數(shù)據(jù)后,讀取數(shù)據(jù)函數(shù)才會返回。
3.2.2DMA數(shù)據(jù)寫入函數(shù)
函數(shù)格式:bool DMAWrite(BYTE*pWriteBuffer,int iWriteLen,int& iRetLen)
pWriteBuffer表示存放需要寫入數(shù)據(jù)的緩沖區(qū)的指針;iWriteLen表示本次所要寫入數(shù)據(jù)的長度;iRetLen表示返回值存放本次成功寫入數(shù)據(jù)的長度。此函數(shù)返回結(jié)果為布爾型,函數(shù)的返回值為true表示寫入數(shù)據(jù)成功,長度存放在iWrittenLen中;返回值為false表示寫入數(shù)據(jù)失敗。
當應(yīng)用程序調(diào)用寫入數(shù)據(jù)函數(shù)后,寫入數(shù)據(jù)函數(shù)會被阻塞,當數(shù)據(jù)寫操作完成或操作失敗才會返回。
4驅(qū)動程序測試及結(jié)果分析
4.1API接口測試
驅(qū)動程序測試程序集成了驅(qū)動程序API接口模塊,并設(shè)計了專用操控界面進行API接口測試,該界面通過調(diào)用API接口函數(shù)可以實現(xiàn)多板卡識別、設(shè)備讀寫等功能。
4.2DMA數(shù)據(jù)傳輸測試
針對實際應(yīng)用,從數(shù)據(jù)傳輸速率、數(shù)據(jù)傳輸可靠性和資源占用率方面進行DMA數(shù)據(jù)傳輸測試。測試中設(shè)定傳輸速率為20 Mbps,數(shù)據(jù)中斷頻率為100 Hz,F(xiàn)PGA程序?qū)y試程序下發(fā)的帶幀序號的模擬數(shù)據(jù)通過單/雙通道DMA上報測試程序,應(yīng)用程序?qū)崟r統(tǒng)計丟幀數(shù)、誤碼率和CPU占用率。測試結(jié)果如表 3和表 4所示。
表3 單通道自閉環(huán)測試表
表4 雙通道自閉環(huán)測試表
4.3測試結(jié)果分析
API接口測試和DMA數(shù)據(jù)傳輸測試表明,在基帶板卡和測試程序配合下,驅(qū)動程序可以很好地完成單路20 Mbps發(fā)送和單路/2路20 Mbps數(shù)據(jù)接收,2路數(shù)據(jù)接收可以達到40 Mbps。通過多次長時間的測試,整套基帶終端設(shè)備工作穩(wěn)定,驅(qū)動程序運行正常。
5結(jié)束語
從測控系統(tǒng)數(shù)字基帶技術(shù)的發(fā)展形勢[10],結(jié)合當前系統(tǒng)平臺升級需求,分析了測控系統(tǒng)數(shù)字基帶驅(qū)動程序的功能和性能需求,提出了以WDF模型為核心技術(shù)的解決方案。
文章把WDF驅(qū)動程序技術(shù)應(yīng)用于航天測控系統(tǒng)的數(shù)字基帶設(shè)備,完成了設(shè)備驅(qū)動程序的設(shè)計和實現(xiàn);為方便上層應(yīng)用程序訪問基帶板卡,設(shè)計了基于基帶板卡驅(qū)動程序的API接口模塊;最后開發(fā)了測試程序,對API接口模塊、驅(qū)動程序和基帶設(shè)備集成性能進行測試。
由于受數(shù)字基帶板硬件條件限制,DMA數(shù)據(jù)傳輸測試使用20 Mbps的發(fā)送速率。在以后的應(yīng)用中,隨著硬件系統(tǒng)的升級,DMA數(shù)據(jù)傳輸速率能夠得到大幅度的提升[11],以更好地滿足航天測控發(fā)展的需要。
參考文獻
[1]唐軍,謝澍霖.測通通信系統(tǒng)綜合基帶設(shè)備的發(fā)展和應(yīng)用[J].電訊技術(shù),2001(4):6-9.
[2]房鴻瑞.導(dǎo)彈航天測控新技術(shù)管窺[J].遙測遙控,2006,36(5):1-8.
[3]張麗君.基于IP核的PCI接口FPGA設(shè)計實現(xiàn)[J].無線電通信技術(shù),2013,39(1):91-93.
[4]王蘭英,居錦武.Windows平臺驅(qū)動程序新架構(gòu)分析[J].計算機系統(tǒng)應(yīng)用,2008(1):109-112.
[5]李正平,徐超,陳軍寧,等.WDF設(shè)備驅(qū)動程序的設(shè)計與實現(xiàn)[J].計算機技術(shù)與發(fā)展,2007,17(5):228-230.
[6]張小磊,孟李林,崔晨琪.基于KMDF的PCI Express設(shè)備驅(qū)動設(shè)計[J].西安航空學(xué)院學(xué)報,2014,32(1):59-63.
[7]王孝國,王凌,張雄偉.高速數(shù)據(jù)采集系統(tǒng)中的PCI中斷處理機制和DMA編程[J].軍事通信技術(shù),2004,25(1):44-47.
[8]滑偉.一種PCI總線接口的數(shù)據(jù)接收卡設(shè)計[J].無線電通信技術(shù),2013,39(4):53-55.
[9]馬進.數(shù)控工業(yè)以太網(wǎng)系統(tǒng)設(shè)計及驅(qū)動程序開發(fā)[D].上海:上海交通大學(xué),2010:31-32.
[10]信侃.基于Xilinx FPGA的PCIe總線接口設(shè)計與實現(xiàn)[J].無線電通信技術(shù),2014,40(4):94-96.
[11]王波,郭建.基于PCI設(shè)備的DMA傳輸建模與分析[J].計算機測量與控制,2011(4):972-974.
何帥男,(1986—),助理工程師。主要研究方向:航天測控。
王文基男,(1978—),碩士,工程師。主要研究方向:武器裝備質(zhì)量控制與監(jiān)督檢驗。
作者簡介
中圖分類號TP391.4
文獻標志碼A
文章編號1003-3106(2016)04-0005-04
基金項目:國家自然科學(xué)基金資助項目(61401119);河北省教育廳基金資助項目(Q2012118)。
收稿日期:2016-01-07
doi:10.3969/j.issn.1003-3106.2016.04.02
引用格式:何帥,王文基,狄衛(wèi)國.基于WDF的航天測控數(shù)字基帶板驅(qū)動程序設(shè)計[J].無線電工程,2016,46(4):5-8,17.