USB软件系统的开发

收稿日期:2001-05-11

USB软件系统的开发

刘少峰,韦克平

(北京航空航天大学电子工程系,北京100083)

摘要:介绍了在Windows98和Windows2000下开发USB的WDM(Windows Driver Module)设备驱动程序过程及USB软件系统的组成,并提供了相应的例程。

关键词:USB;WDM

中图法分类号:TP311.1文献标识码:A文章编号:1001-3695(2002)03-0102-03

Development of the USB Software System

LIU Shao-feng,WEI Ke-ping

(Dept.of Electronic Engineering,Beijing Uniuersity of Aeronautics&Astronautics,Beijing100083,China)

Abstract:This paper introduced the process of developing the WDM device driver for USB in Windows98and Windows2000and the components of the USB software system,and put forward the corresponding routines.

Key words:USB;WDM

USB是由Intel,Compag,Digital,IBM,Microsoft,

NEC,Northern Telecom等七家世界著名的计算机和通信公司共同推出的新一代接口标准。由于USB具有传输速率高,扩展方便,可以热插拔,支持PNP等优点,迅速得到了众多PC厂商和半导体厂商的大力支持,外设向USB过渡成为必然的趋势。

在开发数控测井系统中,笔者采用了USB进行数据的采集和传输,而目前的开发工具中,没有对USB 进行操作控制的函数和控件,必须自行开发USB设备驱动程序。USB设备驱动程序一般采用WDM方式。

1USB简介

USB是为了解决日益增加的PC外设与有限的主板插槽和端口之间的矛盾而制定的一种串行通信标准,现在台式PC和便携式PC中几乎都配备了USB接口,而且流行的操作系统都支持USB功能。

1.1USB的系统构成

USB系统的基本硬件和基本软件如表1所示。

表1USB的系统构成

基本硬件基本软件

!USB主控制器/根集线器!USB设备驱动程序

!USB集线器!USB驱动程序

!USB设备!USB控制器驱动程序

1.2USB的基本特点

!速度快。USB1.1支持高速和低速两种方式:12Mbps和1.5Mbps,分别满足不同设备的需要。最新推出的USB2.0速度可以达到

480Mbps。

!扩展方便。在USB设备上通常应该有USB下行端口,也有专用的集线器。这种扩展方式使USB能够驳接多个USB外设。通常用这种方式每个PC的USB端口最多可以扩展127个外设。USB系统一般采

用星型拓扑结构,如图1所示。

图1USB拓扑结构

!自动检测和配置外围设备。

!支持即插即用方式。

!支持热插拔。

!供电方式灵活。USB设备有两种供电方式:总线供电和自供电。并且支持设备的挂起和唤醒。

!

四种传输类型:中断传输(Interrupt)、控制传输(Control)、块传输(Bulk)和同步传输(Synchronization),满足不同设备的需要。

1.3USB系统通信模型

USB系统中的通信分层模型如图2所示。

图2USB通信分层模型

2WDM设备驱动程序简介

?

2

1

?计算机应用研究2002年

2.1

WDM 设备驱动程序的特点及构成

WDM (Win32Driver ModeI )

的驱动程序构架Mi-crosoft 早在1997年就提出了该项技术并在Windows 98中得到了应用,即Windows 98也支持WDM 。这样WDM 就成为了一个跨平台的驱动程序模型。不仅如此,WDM 驱动程序还可以在不修改源代码的情况下经过重新编译后在非InteI 平台上运行。可以不夸张地讲,WDM 算得上是21世纪的驱动程序构架。

WDM 是在NT 4.0驱动程序结构上发展起来的,所以它与NT 4.0的驱动程序极为相似,但是它却有了本质上的提高,比如它支持USB ,IEEE 1394,ACPI 等全新的硬件标准。

在WDM 驱动程序中,即插即用(PnP )管理器告知何时向系统添加了一个设备,或者从系统删除了设备。PnP 管理器使用安装INF 文件查找新设备的正确驱动程序,而NT 式驱动程序通常在它的初始化例程中发现设备。NT 式驱动程序通常使用专门的安装程序安装。WDM 设备驱动程序支持总线驱动程序和类驱动程序,而且还支持电源管理和WMI 特性。

与NT 4.0驱动程序一样,WDM 驱动程序也是分层的。Windows 驱动程序模型(WDM )为了适应即插即用系统,重新定义了驱动程序分层,它至少有总线驱动程序和功能驱动程序。过滤驱动程序,根据具体的需要可以选择。WDM 还引入了功能设备对象FDO (FunctionaI

Device Object )

与物理设备对象PDO (PhysicaI Device Ob-ject )两个新概念来描述硬件。一个PDO 代表一个真实硬件,在驱动程序看来则是一个FDO 。一个硬件只允许有一个PDO ,但却可以拥有多个FDO ,而在驱动程序中我们不是直接操作硬件而是操作相应的PDO 与FDO 。在WDM 中,驱动程序和设备对象的分层情况如图3所示。其中总线驱动程序(Bus Driver )位于最底层,控制对总线上所有设备的访问,负责枚举它的总线,即发现总线上的全部设备和检测设备被添加或者删除。总线驱动程序创建物理设备对象(PDO )代表发现的设备。功能驱动程序(Function Driver )控制设备的主要功能,分层在总线驱动的上面,负责创建功能设备对象(FDO )。在

USB 情况下,

功能驱动程序必须使用USB 类驱动程序访问设备。过滤驱动程序(FiIter Driver )既可以位于总线驱动程序之上,也可以位于功能驱动程序之上,它一般用于改变IRP

的操作。

图3WDM 中驱动程序和设备对象的分层情况

2.2WDM 设备驱动程序的设计

WDM 驱动程序是PE 格式的,

但是它却没有Win-Main 或Main 这样的入口,

取而代之的是DriverEntry 。在DriverEntry 中向操作系统登记并注册一些消息处理器,而且还要指明是否对驱动程序输入输出的数据进行缓冲;另外还要提供一个AddDevice 例程来把驱动

程序添加到驱动程序堆栈中,并且为各种请求,如IRP MJ CREATE ,IRP MJ WRITE ,IRP MJ CLOSE ,IRP MJ READ ,IRP MJ DEVICE CONTROL ,IRP MJ PNP 等指定各自的处理例程。

DriverEntry

(IN PDRIVER OBJECT DriverObject ,…)//驱动程序入口{…

DriverObject->DriverExtension->AddDevice =XXAddDevice ;//XX 对应自己给驱动程序的命名

DriverObject->DriverUnIoad =XXUnIoad ;

DriverObject->MajorFunction [IRP MJ CREATE ]=XXDriverCreate-CIose ;

DriverObject ->MajorFunction [IRP MJ CLOSE ]=XXDriverCreate-CIose

;DriverObject->MajorFunction

[IRP MJ READ ]=XXDriverRead-Write ;

DriverObject ->MajorFunction [IRP MJ WRITE ]=XXDriverRead-Write ;

…}

在设计的过程中一定要注意函数的可运行级别,

比如有的函数只能在PASSIVE LEVEL 下运行,

有的函数则可以在DISPATCH LEVEL 以下级别运行。级别越高的时候,对代码的要求就越严格,比如在DIS-PATCH LEVEL 的时候就不能使用分页内存。通常情况下应该尽可能让代码在低运行级别如PASSIVE

LEVEL 下运行,

在高级别下运行过长时间将导致系统效率降低,影响系统响应的实时性。

3USB 软件系统的组成

USB 软件系统一般由四部分组成,

分别为:应用程序、USB 设备驱动程序(USB 客户驱动程序)、USB 驱动程序(USBD )、USB 主控制器驱动程序

(UHCD )。USB 软件系统的构成层次如图4所示。其中USB 客户驱动程序控制一个给定的USB 功能设备。连接到USB 设备的每一种类型的功能单元都必须有客户驱动程序。客户驱动程序把USB 设备看作是一个可以被访问端点的集合,USB 设备可以被控制并与它的功能单元通信。客户驱动程序一般是编写USB 软件的重点。

USB 驱动程序

(USBD )知道设备的需求(通过设备描述符获知),也知道USB 的能力。USBD 一般由Windows 操作系统自带。USBD 把IRP 划分成USB 和设备需要大小的块。USBD 确保每一个设备能分配到它所要求的资源,支持USB 设备配置。在配置的过程中,它为检测到的端点建立通信管道。USBD 提供了一个编程接口,即USBDI (USB 驱动程序接口),客户驱动程序就是通过USBDI 来传输请求。USB 主控制器驱动程序提

供了对USB 的低级支持,

通过把IRP 转换成为单独的事务处理后在USB 上执行。目前定义了USB 主控制器的两种实现方式:开放主控制器驱动程序(OpenHCI )和通用主控制器(UHCD )。OpenHCI 和UHCD 分别是由Compag 和InteI 定义的一个和硬件有关的底层驱动程序标准,可以根据需要进行选择。

图4

USB 软件层次

4USB 软件的开发

USB 软件系统中应用程序的开发,一般书籍和文

?

301?第3期刘少峰等:USB 软件系统的开发

章都有比较详细的介绍,本文主要介绍USB 设备驱动程序的开发。相对于连接到传统PCI 总线上的设备驱动程序,USB 设备驱动程序从来不直接操作硬件,而是生成一种数据结构对象,即USB 请求块(URB ),发送到下层驱动程序。USB 设备通过USBDI 向下层驱动程序发送URB 。USBDI 是微软Windows 操作系统USB 驱动程序分层体系的一部分,在体系中的位置如图5所示。USBDI 是基于IRP 的接口,它把单独的请求封装成WDM I /O 请求包(IRP ),并发送到下层驱动

程序的设备对象。

图5USB Windows 驱动程序模型的一部分

4.1初始化URB

首先为URB 结构分配一块内存,并启动一个初始

化例程填充将要发送的请求块的相关区域。例如响应

IRP MN START DEVICE 请求来配置设备,

需要先读取设备描述符。首先声明一个局部变量(Urb )来保存URB 数据结构。URB 是一系列子结构的联合,在此使用子结构UrbControlDescriptorReguest ,它是struct URB CONTROL DESCRIPTOR REOUEST 的对象。然后使用服务例程UsbBuildgetDescriptorReguest (实际上是宏)初始化获取描述符请求子结构的相关区域。

USB DEVICE DESCRIPTOR dd ;

URB urb ;

UsbBuildgetDescriptorReguest (Surb ,sizeof

(URB CONTROL DESCRIPTOR REOUEST )),USB DEVICE DESCRIPTOR TYPE ,0,0,Sdd ,

NULL ,sizeof (dd ),NULL )

;4.2发送URB

首先创建一个内部I /O 控制请求(IOCTL ),一般使

用例程IoBuildDeviceIoControlReguest 。例程的第一个参数指明控制请求的I /O 控制代码,第二个参数指明接受请求的设备对象。然后在Parameters.Others 的Argu-ment1上指定URB 的地址。最后调用IoCallDriver 发送请求到下层驱动。4.3

配置设备

总线驱动程序自动检测新USB 设备的添加、读取设备描述符,以决定何种设备添加到系统中,然后决定加载何种驱动程序,配置管理器调用AddDevice 函数生成设备对象,连接设备对象到驱动栈中。配置管理

器发送IRP MN START DEVICE 即插即用请求到驱动程序。然后调用StartDevice 函数开始大部分配置工作。在配置过程中,首先读取配置描述符,选择设备的配置和配置的接口,然后发送选择配置URB 到总线驱动程序。总线驱动程序开启设备的配置和接口,并创建管道来允许和所选接口的端点通信;而且提供操作管道的句柄,一般从完成的URB 中取出句柄并保存,以备以后使用。4.4

管理传输管道

传输方式的不同,传输管道的管理也不同。以中断传输为例,中断传输的特点是主机以固定的频率查询中断端点,主要例程有:创建中断URB 例程,该例程创建中断URB 和相关的IRP ,并用设备扩展的

PollingUrb 和PollingIrp 指向相应的结构;

开始中断URB 例程,该例程发送URB 轮流查询中断端点;中断服务例程,根据具体设备和功能进行操作;删除中断URB 例程;舍弃管道例程;重置管道功能等。

5USB 软件系统的开发工具

USB 应用软件的开发工具很多,如VC ,VB ,C ++

Builder 等,

在此不再赘述。USB 设备驱动程序的开发工具有Windows 的DDK ,KRFTech 公司的Windriver ,NuMega 公司的DriverWorks 等。其中DDK 功能强大,但是要求开发人员对操作系统比较熟悉,开发的难度比较大;Windriver 属于傻瓜型开发工具,使用非常方便,开发周期短,但是不能满足性能较高的USB 设备。

Windriver 分为用户型和内核型两种方式,

内核型可以满足性能较高的设备,但是难度加大;DriverWorks 使用比较方便,功能强大,是比较理想的开发工具。

参考文献:

[1]Universal Serial Bus Specification Compag ,Intel ,Microsoft.NEC

Revision 1.1

[R ].[2]Don https://www.360docs.net/doc/ba1500814.html,B 系统体系[M ].精英科技.北京:

中国电力出版社,2000.

[3]Chris Chat.Windows WDM 设备驱动程序开发指南[M ].孙

义,马莉波,国雪飞,等.北京:机械工业出版社,2000.

[4]Walter Oney.Programming the Windows Driver Model [M ].北

京:北京大学出版社,2000.

[5]Art Baker.Windows NT 设备驱动程序设计指南[M ].科欣翻

译组.北京:机械工业出版社,1997.[6]邵高平.通用串行总线(USB )及其开发方法[J ].微计算机

信息,1999,15(3):10.

作者简介:

刘少峰(1977-),男,硕士研究生,主要从事数控仪器的软件开

发;韦克平(1949-)

,男,高级工程师,主要从事数控仪器的研制与开发。

?401?计算机应用研究2002

USB软件系统的开发

作者:刘少峰, 韦克平

作者单位:北京航空航天大学,电子工程系,北京,100083

刊名:

计算机应用研究

英文刊名:APPLICATION RESEARCH OF COMPUTERS

年,卷(期):2002,19(3)

被引用次数:43次

参考文献(6条)

1.Universal Serial Bus Specification Compaq,Intel,Microsoft.NEC Revision 1.1

2.Don Anderson;精英科技USB系统体系 2000

3.Chris Chat;孙义;马莉波;国雪飞,Windows WDM设备驱动程序开发指南 2000

4.Walter Oney Programming the Windows Driver Model 2000

5.Art Baker;科欣翻译组Windows NT设备驱动程序设计指南 1997

6.邵高平通用串行总线(USB)及其开发方法 1999(03)

本文读者也读过(4条)

1.刘丁.毛德柱.王云飞USB在数据采集系统中的应用[期刊论文]-电子技术应用2000,26(4)

2.陈启美.吴琨.丁传锁.陈锁柱USB协议层[期刊论文]-电力自动化设备2001,21(5)

3.陈启美.张静.丁传锁.陈锁柱USB数据流模型[期刊论文]-电力自动化设备2001,21(3)

4.马伟嵌入式USB主机系统的研究与设计[期刊论文]-计算机测量与控制2003,11(5)

引证文献(43条)

1.朱翠涛.陈少平基于USB双机通信系统中驱动程序的实现[期刊论文]-中南民族大学学报(自然科学版) 2003(4)

2.丁兆海.卢雷为特定USB设备开发Windows驱动程序[期刊论文]-济南职业学院学报 2006(4)

3.刘劲.吴重庆.韩兵.付松年基于USB的155 Mb/s码型发生器的研制[期刊论文]-光电子技术与信息 2005(2)

4.刘志新.韩霜.陈月岩.姜长泓USB接口在轨道机车轮轴无损检测系统中的应用[期刊论文]-电子设计应用 2003(10)

5.孙永刚.焦立飞基于linux下的USB Device驱动程序设计[期刊论文]-电脑知识与技术 2011(22)

6.苏波MTM总线的USB接口电路的设计与实现[期刊论文]-国外电子测量技术 2008(6)

7.赵开文.汪亮基于IP的扩展USB总线iUSB的设计[期刊论文]-计算机工程与设计 2006(19)

8.朱翠涛.陈少平基于USB双机通信系统中应用程序的研究与实现[期刊论文]-计算机应用 2003(11)

9.杨龙.刘岩.董绪荣USB设备驱动程序的设计与开发[期刊论文]-装备指挥技术学院学报 2003(1)

10.胡文静.陈松基于EZ-USB芯片CY7C68013的驱动程序设计[期刊论文]-计算机应用研究 2005(9)

11.张少刚.魏凯斌基于USB总线电子万能材料试验机测控系统驱动程序的开发[期刊论文]-天水师范学院学报 2003(2)

12.沈满德.张敏.张法全.陈良益.闵玉瑾破片参数测量系统的USB接口设计[期刊论文]-弹箭与制导学报 2009(1)

13.陈霞USB与DSP数据通信接口设计[期刊论文]-工业控制计算机 2008(5)

14.杜西亮.戴景民USB2.0接口在分振幅光偏振仪中的应用[期刊论文]-传感技术学报 2007(4)

15.曾启杰.袁鹏.周敬泉基于USB接口的24位数据采集器设计与实践[期刊论文]-计算技术与自动化 2005(1)

16.曾启杰.周敬泉.袁鹏USB接口的24位数据采集器在色谱分析仪中的应用[期刊论文]-自动化仪表 2005(1)

17.曾启杰.周敬泉.袁鹏基于USB接口的24位数据采集器设计与实践[期刊论文]-测控技术 2004(4)

18.郭辉.许卫.孙国春基于USB接口电路的远程电压监测系统[期刊论文]-国外电子测量技术 2009(11)

19.郇晓辉信息处理系统硬件测试平台设计与实现[学位论文]硕士 2005

20.邵同震.孙光民嵌入式系统中USB总线驱动的开发及应用[期刊论文]-计算机应用研究 2002(12)

21.李伟面向故障检测的CAN总线通信研究[期刊论文]-仪表技术与传感器 2010(3)

22.赵延辉.韦克平小型化油田综合测井信息采集单元[期刊论文]-电子测量技术 2008(5)

23.龚家华数字机顶盒USB主机接口研究[学位论文]硕士 2005

24.程焱基于USB接口的CAN总线控制系统的设计[学位论文]硕士 2005

25.叶军基于USB海量存储设备类规范的文件传输系统设计[学位论文]硕士 2004

26.魏来嵌入式USB应用系统的研究与实现[学位论文]硕士 2004

27.刘海峰基于DSP的数字图像压缩系统的实现[学位论文]硕士 2005

28.潘建兵基于USB总线的数据采集器的研制[学位论文]硕士 2006

29.王建民基于嵌入式USB主机的图像监控系统应用研究[学位论文]硕士 2005

30.孙发明基于DSP的视频监控系统[学位论文]硕士 2006

31.于晓海基于USB和CAN总线技术的船舶数据采集系统[学位论文]硕士 2005

32.向丽萍基于USB接口的虚拟仪器的研究与设计[学位论文]硕士 2006

33.王彦硕以太网和USB-GPIB接口在仪器数据采集中的应用[学位论文]硕士 2006

34.王晨旭基于单芯片和USB总线的高精度线陈CCD图像采集系统设计[学位论文]硕士 2006

35.蒋善斌基于USB总线的数据采集系统设计[学位论文]硕士 2005

36.田亚素指纹采集系统的USB接口设计[学位论文]硕士 2005

37.戴进基于USB2.0的红外图像采集系统的设计及与实现[学位论文]硕士 2005

38.管红超基于嵌入式系统的数字语音室终端设计[学位论文]硕士 2006

39.汪健基于USB总线的IC卡计费系统[学位论文]硕士 2005

40.宫闽军碳纤维复合材料孔隙率超声检测系统定位装置及可视化研究[学位论文]硕士 2005

41.刘婷USB设备固件升级系统的设计与开发[学位论文]硕士 2006

42.相伟USB在基于DSP的励磁控制器中的应用研究[学位论文]硕士 2005

43.刘好朋基于USB接口的DSP数据采集卡[学位论文]硕士 2005

引用本文格式:刘少峰.韦克平USB软件系统的开发[期刊论文]-计算机应用研究 2002(3)

相关文档
最新文档