基于WDF的航天测控数字基带板驱动程序设计

2016-04-26 04:49王文基狄卫国
无线电工程 2016年4期

何 帅,王文基,狄卫国

(1.中国电子科技集团公司第五十四研究所,河北 石家庄 050081;

2.空军石家庄地区军事代表室,河北 石家庄 050081;

3.石家庄铁道大学 电气与电子工程学院,河北 石家庄050043)



基于WDF的航天测控数字基带板驱动程序设计

何帅1,王文基2,狄卫国3

(1.中国电子科技集团公司第五十四研究所,河北 石家庄 050081;

2.空军石家庄地区军事代表室,河北 石家庄 050081;

3.石家庄铁道大学 电气与电子工程学院,河北 石家庄050043)

摘要航天测控系统面临着操作系统升级的问题,这就需要为数字基带板开发基于64位操作系统的设备驱动程序。针对这种需求,研究了Windows操作系统下驱动程序基础(Windows Driver Fundation,WDF)驱动程序的工作机制,采用WDF程序框架设计了基带设备板卡设备驱动程序,并设计了相应的应用程序编程接口(Application Programming Interface,API)和测试程序。通过对设备驱动程序及数字基带板的测试,结果表明其功能得以实现,双通道数据接收能够在40 Mbps速率下长时间稳定地工作。

关键词数字基带;WDF;设备驱动;应用程序编程接口

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引言

伴随着数字基带测控技术的发展[1],地面测控设备已经完成了集成化、小型化转变,将遥控、测速、测距、测角、遥测接收和数传数据接收等功能高度集成到基带信号处理板上[2]。目前,航天测控基带终端计算机的操作系统大多采用Windows XP 32位版本,受制于32位操作系统的限制,计算机内存和其他外设无法升级,所以升级64位操作系统迫在眉睫。

由于64位操作系统与32位操作系统系统架构有很大区别,设备驱动程序无法实现兼容,原有基带板卡驱动程序将无法使用,需要重新设计和开发。针对这个问题,研究了WDF驱动程序模型及其在64位Windows 7平台下的工作机制,设计出数字基带板的驱动程序和相应的API函数。

1基带终端整体框架

航天测控基带终端采取分层设计,如图 1所示。通过驱动程序和API接口函数将数字基带板、操作系统和应用程序进行了结合,达到了完成测控任务的目的。

图1 基带终端分层设计

数字基带板卡由FPGA、DSP、PCI接口芯片及相关辅助模块组成[3]。其中,PCI接口芯片完成PCI接口与FPGA、PCI接口与计算机总线之间的接口转换,该芯片具有2个独立的DMA通道,可实现高速数据传输。

设备驱动程序是硬件板卡和操作系统之间的桥梁,具备打开/关闭设备、读写数据和中断处理等功能。应用程序API接口函数为应用程序提供了通过驱动程序访问硬件设备的接口,提供打开设备、读取/写入指定地址数据、中断允许/禁止控制、DMA读写和关闭设备等函数。

2WDF框架驱动程序框架

WDF是微软提出的全新的驱动程序模型[4],提供了更高层次抽象的高度灵活、可扩展和可诊断的驱动程序框架。

WDF提供了2个框架[5]:内核模式驱动程序框架(KMDF)和用户模式驱动程序框架(UMDF)。数字基带板设备驱动程序运行在内核模式,所以文中只介绍KMDF框架。

KMDF框架支持面向对象、事件驱动的驱动程序模型[6]。该框架定义了一系列的对象用来表示设备、驱动和中断等,每个对象有对应的属性、方法和事件,驱动程序利用这些方法创建对象、设置属性和响应事件,如表 1所示;另外,该框架还定义了一系列例程函数用于定义驱动程序的入口函数、设备添加、设备删除和I/O请求处理等,如表 2所示。关于KMDF框架内容较多,在此仅介绍与本文相关的基本内容。

表1 KMDF框架模型定义的主要对象

表2 KMDF框架模型定义的主要例程

3数字基带板驱动程序设计

3.1驱动程序设计

数字基带板卡驱动程序按照WDF框架进行设计,如图 2所示。

图2 数字基带板驱动程序框架

数字基带板卡驱动程序针对KMDF框架中的各个例程进行了设计,这里对主要例程中对应的相关函数进行介绍。

3.1.1EvtDriverDeviceAdd例程

实现名称WDFBBE_EvtDeviceAdd(),该例程完成设备对象创建以及各个例程的初始化和挂接工作:

① 调用WDF_PNPPOWER_EVENT_CAL_LBACKS_INIT初始化即插即用回调例程,并挂接EvtDevicePrepareHardware和EvtDeviceReleaseHardware例程;

② 调用WdfDeviceCreate创建设备对象,并建立一个私有的设备扩展对象;

③ 初始化中断服务例程和DPC例程,并创建中断对象;

④ 初始化IRP请求队列,并挂接EvtIoRead、EvtIoWrite和EvtIoDeviceControl等例程;

⑤ 初始化DMA对象;

⑥ 注册设备接口,给出设备名并创建应用程序能够使用的符号连接;

⑦ 注册设备接口,给出设备名并创建符号连接。数字基带板卡驱动程序采用命名方法命名设备对象,并创建应用程序能够使用的符号连接,该名称为“WDFBBEBOARD*”。

3.1.2EvtIoRead例程

实现名称WDFBBE_EvtIoRead(),用于响应上层应用软件的ReadFile操作,该操作用于进行DMA数据读操作,由于该请求未必能够马上完成,所以需将该请求保存到设备对象扩展中,待数据中断到来后才能完成;另外,收到该请求后需启动一次定时器,如在既定时间内该请求未能完成则在定时消息响应例程将该请求标记为超时并返回。

3.1.3EvtIoWrite例程

实现名称WDFBBE_EvtIoWrite(),用于响应上层应用软件的WriteFile操作,该操作用于进行DMA数据写操作,由于该请求未必能够马上完成,所以需将该请求保存到设备对象扩展中,待数据中断到来后才能完成;另外,收到该请求后需启动一次定时器,如在既定时间内该请求未能完成则在定时消息响应例程将该请求标记为超时并返回。

3.1.4中断处理例程(ISR)

实现名称WDFBBE_EvtInterruptIsr()。Windows的中断处理机制允许多个设备共享一个硬件中断[7]。因此,中断服务例程(ISR)的首要工作就是判断是否为期望的中断。ISR执行在高于DISPATCH_LEVEL的IRQL上,在ISR能调用的内核模式函数十分有限。为了提高系统性能,ISR应该尽可能快地执行,只做服务硬件所需的最小量的工作(如清除中断),然后立即返回。如果有额外的工作需要做(例如完成一个IRP),应该由延迟过程调用(DPC)例程来完成。基带板卡共可以产生2种类型的中断:数据中断、DMA结束中断[8]。在本例程中应首先读取中断控制/状态寄存器,根据标志位判断基带板卡是否产生了中断,产生了哪种类型的中断。如果没有产生中断则立即返回FALSE即可。如果产生了数据中断,应判断当前IRP类型(读/写),清楚中断后申请一个DPC请求用于后续启动DMA(读/写)传输。如果产生了DMA结束中断,也应判断当前IRP类型(读/写),清除中断后也申请一个DPC请求用于完成该请求。在申请DPC时应标明该请求的类型(DMA读/ DMA写/DMA读完成/DMA写完成)。

3.1.5DPC例程

实现名称WDFBBE_EvtInterruptDpc(),DPC例程用于完成中断处理例程中未完成的工作,在本驱动程序中中断处理例程申请了4种类型的DPC,所以在DPC例程中也有以下4种处理:

① DMA读:计算本次可以读取数据的长度,然后启动DMA传输;

② DMA写:计算本次可以写入数据的长度,然后启动DMA传输;

③ DMA读完成:保存已读取数据的最终地址后,完成该请求;

④ DMA写完成:保存当前写数据的最终地址后,完成该请求。

3.2驱动程序API接口设计

为了便于上层应用程序通过设备驱动程序访问基带设备[9],用Visual Stuido 2010开发驱动程序API接口,在该API接口中封装了设备创建、设备关闭、DMA接收数据、DMA发送数据和设备中断控制等函数。这里主要介绍DMA读写函数。

3.2.1DMA读取数据函数

函数格式:bool DMARead(BYTE*pReadBuffer,int iReadLen,int& iRetLen,int& iRetID)

pReadBuffer表示存放被读取数据的缓冲区的指针;iReadLen表示本次所要读取数据的字节数;iRetLen表示返回值存放本次成功读取数据的字节数;iRetID表示返回值指示本次从哪个通道读取了数据,范围为1~2。此函数返回结果为布尔型,函数的返回值为true表示读取数据成功,长度存放在iReadedLen中;返回值为false表示读取数据失败。

当应用程序调用读取数据函数后,读取数据函数会被阻塞,当数据中断到来,驱动程序读完一次数据后,读取数据函数才会返回。

3.2.2DMA数据写入函数

函数格式:bool DMAWrite(BYTE*pWriteBuffer,int iWriteLen,int& iRetLen)

pWriteBuffer表示存放需要写入数据的缓冲区的指针;iWriteLen表示本次所要写入数据的长度;iRetLen表示返回值存放本次成功写入数据的长度。此函数返回结果为布尔型,函数的返回值为true表示写入数据成功,长度存放在iWrittenLen中;返回值为false表示写入数据失败。

当应用程序调用写入数据函数后,写入数据函数会被阻塞,当数据写操作完成或操作失败才会返回。

4驱动程序测试及结果分析

4.1API接口测试

驱动程序测试程序集成了驱动程序API接口模块,并设计了专用操控界面进行API接口测试,该界面通过调用API接口函数可以实现多板卡识别、设备读写等功能。

4.2DMA数据传输测试

针对实际应用,从数据传输速率、数据传输可靠性和资源占用率方面进行DMA数据传输测试。测试中设定传输速率为20 Mbps,数据中断频率为100 Hz,FPGA程序将测试程序下发的带帧序号的模拟数据通过单/双通道DMA上报测试程序,应用程序实时统计丢帧数、误码率和CPU占用率。测试结果如表 3和表 4所示。

表3 单通道自闭环测试表

表4 双通道自闭环测试表

4.3测试结果分析

API接口测试和DMA数据传输测试表明,在基带板卡和测试程序配合下,驱动程序可以很好地完成单路20 Mbps发送和单路/2路20 Mbps数据接收,2路数据接收可以达到40 Mbps。通过多次长时间的测试,整套基带终端设备工作稳定,驱动程序运行正常。

5结束语

从测控系统数字基带技术的发展形势[10],结合当前系统平台升级需求,分析了测控系统数字基带驱动程序的功能和性能需求,提出了以WDF模型为核心技术的解决方案。

文章把WDF驱动程序技术应用于航天测控系统的数字基带设备,完成了设备驱动程序的设计和实现;为方便上层应用程序访问基带板卡,设计了基于基带板卡驱动程序的API接口模块;最后开发了测试程序,对API接口模块、驱动程序和基带设备集成性能进行测试。

由于受数字基带板硬件条件限制,DMA数据传输测试使用20 Mbps的发送速率。在以后的应用中,随着硬件系统的升级,DMA数据传输速率能够得到大幅度的提升[11],以更好地满足航天测控发展的需要。

参考文献

[1]唐军,谢澍霖.测通通信系统综合基带设备的发展和应用[J].电讯技术,2001(4):6-9.

[2]房鸿瑞.导弹航天测控新技术管窥[J].遥测遥控,2006,36(5):1-8.

[3]张丽君.基于IP核的PCI接口FPGA设计实现[J].无线电通信技术,2013,39(1):91-93.

[4]王兰英,居锦武.Windows平台驱动程序新架构分析[J].计算机系统应用,2008(1):109-112.

[5]李正平,徐超,陈军宁,等.WDF设备驱动程序的设计与实现[J].计算机技术与发展,2007,17(5):228-230.

[6]张小磊,孟李林,崔晨琪.基于KMDF的PCI Express设备驱动设计[J].西安航空学院学报,2014,32(1):59-63.

[7]王孝国,王凌,张雄伟.高速数据采集系统中的PCI中断处理机制和DMA编程[J].军事通信技术,2004,25(1):44-47.

[8]滑伟.一种PCI总线接口的数据接收卡设计[J].无线电通信技术,2013,39(4):53-55.

[9]马进.数控工业以太网系统设计及驱动程序开发[D].上海:上海交通大学,2010:31-32.

[10]信侃.基于Xilinx FPGA的PCIe总线接口设计与实现[J].无线电通信技术,2014,40(4):94-96.

[11]王波,郭建.基于PCI设备的DMA传输建模与分析[J].计算机测量与控制,2011(4):972-974.

何帅男,(1986—),助理工程师。主要研究方向:航天测控。

王文基男,(1978—),硕士,工程师。主要研究方向:武器装备质量控制与监督检验。

作者简介

中图分类号TP391.4

文献标志码A

文章编号1003-3106(2016)04-0005-04

基金项目:国家自然科学基金资助项目(61401119);河北省教育厅基金资助项目(Q2012118)。

收稿日期:2016-01-07

doi:10.3969/j.issn.1003-3106.2016.04.02

引用格式:何帅,王文基,狄卫国.基于WDF的航天测控数字基带板驱动程序设计[J].无线电工程,2016,46(4):5-8,17.