2024年4月21日发(作者:)

由于中断处理过程运行于较高的优先级上,它们能屏蔽许多级别小于或等于

它们的过程的执行,如果它们占用CPU时间过长,很容易使系统性能下降,因

此中断服务例程应尽可能快地执行完。然而有的中断服务例程需要完成很多任

务,为不影响系统性能,除最紧迫的任务外,其他的部分放在一个被称为延迟过

程调用(DPC)的例程中来完成。

至此,驱动程序设计的主要内容也就完成了。

USB设备驱动程序的特殊之处是USB总线不允许USB功能驱动程序直接对

硬件的访问。USB设备驱动程序,必须使用USB总线驱动程序访问USB设备,

而不能直接访问硬件。USB设备驱动程序通常又称为USB客户驱动程序。对于

USB客户驱动程序来说,总线枚举和信息如何传输这些细节由USB总线驱动程

序来完成,而客户驱动程序并不需要知道。

客户驱动程序通过一个或多个管道访问功能设备,管道是主机之间单向或双

向的数据传输通道,管道有4种类型:控制管道把命令传输给设备(包括USB

设置和配置信息),含有沿任一方向的数据传输;中断管道传输设备特定的信息

给主机;块管道传输更大量的数据:等时管道传输时间敏感的数据。

USB客户驱动程序是支持即插即用功能的标准WDM驱动程序。当一个USB

设备插入时,USB总线驱动程序检测到设备的插入,PnP管理器使用厂商ID或

设备类信息选择要运行的驱动程序。首先调用驱动程序的AddDevice例程,并发

出其他的PnPIRP。这里需要特别说明的是USB客户驱动程序绝不会收到任何硬

件资源,因为由USB总线驱动程序来处理所有的低层I/O。

此外,USB设备特别容易发生意外删除,如用户不小心(或者有意)拔掉了

USB插头。在Windows2000中,将收到一个“意外删除”PIlPIRP,而在Windows

98中,只有“删除设备”PIlPIRP。即使有对该设备打开的旬柄,这些请求也

必须成功。这时在处理过程中的任何传输必须中止。

USB客户驱动程序在它的下沿进行对USB总线驱动程序的调用,但是它可

以实现需要的上沿功能,具体的依照USB设备的用途而定。

USB客户驱动程序对USB总线驱动程序的调用是通过使用表4—2所示的

USB驱动程序接口(USBDI)内部IOCTL实现的。这些IOCTL都是内部的,只

能用于内核的其他部分(如设备驱动程序),而不能用于用户态应用程序。这些

IOCTL中最重要的内部IOCTL是IOCTL

INTERNAL

USB

SUBMIT

URB,它

发出USB请求块(URB)由USB总线类驱动程序处理。共有30多个不同的URB

功能代码,USB客户驱动程序使用URB做它们大多数的工作。USB设备驱动程

序的作用实际上就是进行各种USBDI的调用。

表4-2USBDI的内部IOCTL

10CTL_INTERNAL』SB—SUBMll』RB

发出URB

IOCTUNTERNAL

USBRESETPORT

复位并重新启用一个端口

IOCTlⅢTERNAtUSB—GECPROT

STATUS

得到端口状态

IOCTL-INTERNAL

USB_ENABLtPORT

重新启用一个被禁止的端u

IOCTL—INTERNAL

USB_GET

HUB—COUNT

由集线器驱动程序在内部使用

IOCTL

INTERNAL_USB—CYCLE_PORT

模拟设备拔出和再次插入

IOCTLjNTERNALuSB—GET_ROOTHUB

PDO

由集线器驱动程序在内部使用

IOCTtINTERNAtUSB—GEj二HUB—NAME得到USB集线器的设备名

填写USB—BUs_-NOTlFICATION结

IOCTL_INTERNAL-USB_GET

BUS—INFO

IOCTL_INTERNAL_uSB—GET—CONTROLLER_NAME得到主机控制器设备名

USBDI的调用采用如下方式:首先必须为内部的IOCTL创建一个新的IRP,

填写该IRP,并沿设备栈向下把这个IRP发送给USB总线驱动程序。然后等待

它,直到该IRP被处理。

创建一个新的IRP,通常使用IoBuildDeviceloCountrolRequest来构造一个新

的内部IRP,IOCTL控制代码必须使用缓冲I/O方式。USB内部IOCTL不使用

标准输入和输出缓冲区,而必须设置下一个栈单元Parameters.Others.Argumentl

域,这个Parameters.Others.Argumentl域指向一个URB。因此,在这之前,还应

该构造好一个URB。设置完成后,调用IoCallDriver将IRP传递给下一层的总线

驱动程序。

URB作为USB内部IOCTL的参数传递给下一级的USB总线驱动程序,USB

客户驱动程序使用URB完成它的大部分工作,URB在USB客户驱动程序有着

重要的作用。为更容易地构造URB,DDK提供了很多例程来构造一个URB,如

利用UsbBuildGetDescriptorRequest可以构造一个获得设备描述符URB,

UsbBuildInterruptOrBulkTransferRequest用来构造块传输或中断传输URB等等。

总之,USB客户驱动程序设计是非常复杂的。通常的作法是先构造URB,

然后创建IRP,然后将URB指针填入下一个栈单元的

Parameters.Others.Argumentl域中,最后调用下一层的总线驱动程序。按照USB

总线的规范,一次次地重复以上过程,即可实现USB设备的驱动。

最后,需要说的一点是:利用DDK设计驱动程序一般来说是很复杂的。在

DDK的SRC目录下有大量的驱动程序模板,这些模板为我们提供了一个驱动程

序框架,利用这些模板进行驱动程序的开发可以大大减少我们驱动程序设计的工

作量。

注意事项:

在微软的white

papers里称,所有在Windows

95之后的Windows操作系统

都已实现了WDM,包括Windows

98、Windows2000、Windows

XP、Windows

Me,

并且在后续的操作系统中,也将继续支持WDM。虽然,这是WDM主要的设计

目标之一,但现在看来,微软在不断完善WDM的同时,也使这个问题变得有些

混乱了,在微软的White

papers和各操作系统的DDK里,得到的信息总是有些

含糊。一开始,Microsoft宣称WDM驱动程序会是Windows98和Windows2000x86

之间二进制兼容的,且与Windows2000

Alpha平台源代码兼容。但是,现在看

来并不能保证二进制兼容,尽管DDK在这方面并不清楚。为了安全起见,建议

在为Windows98构造驱动程序时,使用Windows98驱动程序开发工具包(DDK),

而对Windows2000使用Windows2000DDK.如果使用仅在Windows2000中出现

的一些WDM功能,则就不能达到源代码兼容。例如,Windows2000USB系统

驱动程序支持一些Windows98驱动程序不可用的功能。编写跨平台驱动程序时,

微软对开发者的建议是,在不同的目标平台下,进行严格的测试。

现在我们有好几种Windows平台下的驱动程序开发技术了,虽然WDM提供

了一个全新的解决方案,但为特定的设备和特定的平台选择一种合适的驱动程序

类型来开发,仍然非常重要。如果你只需要写一个Windows95的驱动程序,用

VxD。如果你只需要一个Windows

NT

4.0的驱动程序,用NT内核模式驱动程

序。如果系统里有一个WDM类驱动程序支持你的设备,而你所写的驱动程序不

需要与Windows95和Windows

NT

4.0兼容,用WDM。如果你的主要目标是

Windows

98,那么你必须决定是否要与其他的操作系统兼容如果你关心与

Windows

95兼容,那么你必须写一个VxD。如果你关心与Windows

NT兼容,

那么写一个WDM。注意,WDM驱动程序不会在Windows

95和Windows

NT4.0

下工作,但是,WDM驱动程序与NT下的驱动程序有许多的相似之处,可以很

容易的将WDM驱动程序改写成NT的内核模式驱动程序。如果你的主要目标是

Windows2000,那么你必须决定是否要与其他的操作系统兼容如果你需要与

Windows

NT兼容,那么你必须写一个NT内核模式驱动程序。如果你关心与

Windows98兼容,那么写一个WDM。注意,WDM驱动程序不会在Windows

NT

4.0下工作,但是,WDM驱动程序与NT下的驱动程序有许多的相似之处,可

以很容易的将WDM驱动程序改写成NT的内核模式驱动程序。WindoWS

98虽

然支持WDM和VxD,但有些类型的设备,在Windows

98下必须用VxD来设

计(比如文件系统驱动程序),其他的某些类型必须用WDM设计(比如USB驱

动程序)。其他情况下,开发者可以根据需要选择写一个VxD或WDM。Windows

2000支持VxD、内核模式驱动程序、WDM,但也有些限制,比如视频驱动程序

需要用NT格式的内核模式驱动程序来编写。具体的细节必须查阅不同版本的

DDK。

4.6.2

USB驱动程序的编译链接

安装DDK后,在DDK程序组下有Check和Free两个编译环境,Check环境

用于编译带调试信息的驱动程序,Free则是编译正式发布版本的环境。通常情况

下设备驱动程序的编译采用命令行的方式。通过一定的设置可以在VC++的集成

环境下编译。

一般来说,成功编译一个最基本的设备驱动程序需要四个文件,第一个是驱

动程序,即C语言源程序文件(例如vdisk.c’注意下面所有的例子都是以vdisk

来说明);第二个是RC文件(例如vdisk.re);第三个是sources文件:第四个文件

是makefile.rc文件。sources文件和make文件类似,用来指定需要编译的文件以

及需要连接的库文件。这三个辅助文件都很简单,在DDK

samples的每个例程

里都有三个这样的文件,依样画瓢就能理解它们的结构和意义。举例分析以下

以vdisk程序为例,设vdisk.rc代码为:

/??vdisk.re??/

椭nclude

撑inelude

#define

VERjILETYPE、nH旦RV

#define

VER—FILESUBTYPE

VFT2一DRV—SYSTEM

#define

VER_FILEDESCRIPTION_STR”SCSI

VDiskDriver”

#defineVER

#define

INTERNALNAME_STR”vdisk.sys”

VER二ORIGINALFlLENAME_sTR”vdisk.sys”

#include”common.ver”

/??endofvdisk.re??/

设备驱动程序一般都使用Build实片j程序来进行,Build只是NMAKE外面的一个外包

装程序。Build本身其实相当简单,编译的大部分工作实际上由Build传递给NMAKE来进

行。

/??SOURCES??/

TARGE,nqAME=vdisk

TARGETTYPE=DRIVER

TARGETPATH=¥(BASEDIR)lib

TARGETLIBS=¥(BASEDIR)1ib??¥(DDKBUILDENV)scsiport,lib

INCLUDES=….inc

SOURCES=vdisk.e

vdisk.ro

/.97endof

SOURCES??/

注意SOURCES的文件名没有任何扩展名。

#Illakefile

#DONOTEDITTHISFILEEdit.SOUlCes.ifyouwantto

addanew

#file

to

this

component.This

file

merely

indirects

to

therealmakefile

#thatis

sharedbyallthedrivercomponents

source

oftheWindowsNTDDK

!INCLUDE¥fNTMAKEENV)makefile.clef

#endofmakefile

50

对所有驱动程序而言,makefile都是一样的,Microsoft也警告不要编辑这个

文件,如果需要,可以编辑修改sources文件达到同样的效果。对于设备驱动程

序,所使用的C编译器基本上无一例外地选用VC++。

2编译的基本步骤

(1)首先进入check或free编译环境,初始化DDK编译环境。

(2)运行VC安装目录下bin目录下的vcvars32.bat,初始化Vc++编译环境。

(3)运行Build.exe进行编译。

USB驱动程序的安装和启动

4.6.3

驱动程序的安装如同安装服务一样,唯一不同的是,创建服务时,类型是内

核驱动,其他跟操作服务没什么区别。

设备驱动程序的安装和启动流程如下:

1.添加注册表中的键值

WindowsNT在引导的时候,通过扫描注册表构造驱动程序列表。这个列表

既包括自启动的驱动程序,也包括需要手工启动的驱动程序。这个列表其实就是

控制面板中设备Applet所列出来的所有设备。所有的设备驱动程序应该在注册

表的HKEY

LOCAL

SetServices下有相应的键值。下面以vdisk为例来说明如何添加键值:

首先在HKEY

LOCAL

MACHINE

System

Current

ControlSetServices下添加

一个子项vdisk,注意这里的名称应该和你的驱动程序名称一致。例如驱动程序

名称是vdisk.sys,那么这里的予项名称就是vdisk。然后在vdisk下添加以下键值:

名称

Type

Start

ErrorContr01

Grollp

数据类型

REG_DWORD

REG_DWORD

REG_DWORD

REGSZ

说明

驱动程序的种类

驱动程序的起始启动时间

驱动装入失败的错误处理

驱动程序的组名

所依赖的其他驱动程序

同组内驱动程序装入顺序

驱动程序特定的参数键

DependOnGmup

Tag

REG_MULTI_SZ

REG_BINARY

Parameters

(key)

Type值为1表示内核模式驱动程序;为2表示文件系统驱动程序。

ErrorControl值为0表示日志记录错误并忽略;值为l表示日志记录错误并

显示一个对话框;值为2表示日志记录错误,并用最后的正确配置重新启动;值

为3表示同志记录错误,如果已经使用过『F确配置,返回失败。

在任何一个设备驱动程序中,上表中的前三项参数都是必需的。

2.控制驱动程序的装入次序

有时候控制多个驱动程序的装入次序是必要的。例如…套驱动程序中包括三

个驱动程序,分别是jbChangensys,changerDisk.sys和vdisk.sys。jbChanger和

changerDisk是两个SCSI类驱动程序,它们都依赖SCSI小端口(miniport驱动程

序),同时ehangerDisk必须在jbChanger启动之后启动。vdisk是虚拟的磁盘驱动

程序,它必须在jbChanger和changerDisk都启动之后才能启动成功。

3.驱动程序的Start值

上面注册表中驱动程序的Start值控制驱动程序在系统启动的时间。目前,

Start可以取以下值,此外为该值留有扩展余地,以适用于新的要求:

(1)0x0(SERVICE

BOOT

START):这个值指定本驱动程序应该由操作系

统装入程序启动。一般的驱动程序不会采用本值,因为系统在这个时候几乎还没

有启动,大部分系统尚不可用。

(2)0xl(SERVICE

SYSTEM

START):该值表示在操作系统装入后但同时

初始化它自己时启动驱动程序。

(3)0x2(SERVICE

AUTO

START):该值表示在整个系统启动并运行后由

服务控制管理器装入。

(4)0x3(SERVICEDNAMED

START

_启工手须必序程动驱该示表值该:1

动。可以通过控制面板的设备applet或者使用WIN32

API编程来启动。

(5)0x4(SERVICEDISABLED):表示本驱动程序被禁用。

注意在调试驱动程序的时候,最好将Start值设景为3来手工启动,这是因

为如果设置为自动启动,而驱动程序在启动的过程中又发生了异常错误的话,可

能导致系统不能启动。

如果没有紧急恢复盘,首先可以尝试在启动的时候选择用已知的配置来启动

系统,看是否能启动成功。如果失败,可以用DOS启动后到

\%SystemRoot%System32Drivers目录下将出现问题的驱动程序删除,然后系统就

可以启动了。

不过如果NT安装在NTFS分区,DOS启动后将看不到这个分区,这样就必

须将硬盘挂到另一NT系统上来删除这个文件了。通过设置Start可以控制驱动

程序在不同的时候启动。但如果要解决依赖性问题,则需要使用Group和

DependOnGroup值。

首先要确定自己的驱动程序使用的Group名,系统有一些定义好的组名,对

于当前系统存在的组名,

可以观察注册表的

HKE王二£OCAt用“CHINESystemCurrentControl—

SetControlServiceGroupOrderList的键值。例如该值可以设置为:

SCSI

miniport

port

Primary

disk

SCSIclass

SCSI

CDROM

class

filter

bootfile

system

这里每一行都是一个Group名,一般来说某个驱动程序都属于某一个Group。

系统启动时按照该List下组的顺序依次启动各组里的驱动程序。例如jbChanger

和ohangerDisk都属于SCSI

Class组。如果你觉得该表中的组名都不合适,可以

在该List的适当位置中添加新的组名。

DependOnGroup值控制本驱动程序启动的时候必须先启动另一组的驱动程

序,例如jbChanger和changerDisk的启动就依赖于SCSI

miniporf组。因此

jbChanger和changerDilsk的DependOnGroup值都为SCSI

minipofl。

4.修改注册表的方法

在注册表里这些值可以手工修改,也可以自己编程利用WIN32API进行添

加,同时也可以用ini文件的方式来添加。下面是一个ini(文件名为vdisk.ini)文

件的例子。

RegistryMachineSystemCurrentControl

SetServieesVDisk

Type=REG

DWORD

Ox00000001

Start=PEG』WORD

Ox00000003

ErrorControl2PEG—DWORD

Ox00000001

Group2SCSI

Class

Parameters

DriveLerieFN:

然后以vdisk.ini为参数运行REGINI.EXE。就会自动在注册表里添加相应的

项。

在注册表里添加好这些项后,必须重新启动系统,这样所添加的设备驱动程

序才能在控制面板的设备applet中列出来,再进行其他操作。

5.启动设备驱动程序

在添加修改好注册表后,重新启动系统,如果选择的Start值是0、1、2,

如果一切正常,驱动程序就应该已经启动起来了。可以观察控制面板的设备applet

中的设备列表。如果Start选择的是3,则可以直接启动。

6.调试工具

目前NT驱动程序的调试工具只有WINDBG和SOFTICE,WINDBG的使

用需要双机环境,强力推荐使用SOFTICE。注意目前国内FTP服务器上的

SOFTICE

3.2

FOR

NT的Setup.ins文件是错误的,它将导致安装程序不认识你的

NT,可以用3.0的setup.ins文件替代3.2的setup.ins,这样就可以安装成功。

4.7工程介绍

根据第一章提出的课题要求,基于USB接口的存储设备保护器,设计在主机

与存储设备之间。

图4-4保护器逻辑结构

4.7.1实现的主要功能:

l、进行安全认证。即对军队配发的USB硬盘、优盘,首先由机要部门对其

进行技术标记,然后与保护器一起配发至各用户单位。保护器接主机,移动存储

设备接保护器,并在保护器识别该标记后,方可使用。

2、进行数据审计。保护器记录用户双向数据交换的时间、流量等内容,已

备审查。

3、对信息进行加密。主机信息存储格式不变,USB设备端存储加密信息,

通过保护器实现加脱密。

4.7.2、设计概要

考虑到功耗、功能等方面因素,盒式保护器设计为嵌入式系统,结构如

图4—5

:匦纵蛩

蚓4-5保护器设计框架

硬件上主要是产生一个读写控制信号给微处理器,由微处理器调用相应的

程序来对这一信号作出响应,从而对微处理器和Usb主机的通信作出调整。USB

主机和微处理器的通信是Usb主控制器驱动程序的一部分,因此读写控制,还

是由Usb主控制器驱动程序来作出反应。而对于审计和身份认证,主要在各个功

能部件的对应的控制程序中实现。

硬件设计思路

对于盒式保护器,CPU采用PhilipsLPC2210(Arm

7系列),USB主控芯片

采用Philips

ISP

1161,部分电路原理图如图4--7。USB主控Philips

ISP1161

支持2.0协议标准,配有3端口,一个端口用于上行,另两个端口用于下行,符

合我们的设计要求。

图4.7ISPll61部分电路

4.7.3设备驱动程序开发

按4.6节介绍的方法配置环境,选用vc++编译器Makefile项目创建开发框

架,它生成典型WDMPnP驱动程序处理例程,入口和卸载例程Firelnit,C,即插

即用例程FirePnp.C,分发例程FireDispatch.c,电源管理例程FirePower.c。下面给出

入口和卸载例程Firelnit.c,即插即用例程FirePnp.C主要程序清单。

在入口和卸载例程中主要有DriverEntry例程(与4.2节介绍的基本相同)、

AddFireDevice例程和FireDrvUnload例程。AddFireDevice例程主要是创建保护

器内核设备名和链接名并设置相应字段,程序清单如下:

NTSTATUS

AddFireDeVice(IN

PDRIVEROBJECT

DriverObject,IN

PDEVICE_OBJECT

PhyscialDeviceObject)

NTSTATUS

ntStatus=STATUS_SUCCESS;

WCHAR

KernelDeviceNameBufer[】=L’'—\\Device\W—hiusb-0”;

UNICODE_STRINGKernelDeviceNameUnicode;

wCHAR

UserDeviceLinkBuffer[]:L’’\\SvbDevice\\Phiusb-0”;

UNICODE_STRING

UserDevieeLinkUnicode;

PDEVICE_OBJECTfdo=NULL;

PDEVICE_EXTENSIONpdx;

RtinitUnicodeStfing(&KemelDeviceNameUnicode,KemelDeviceNameBuffer);

ntstatLls=IoCreatDevice(DevieeObject,sizeof(DEVICE

EXTENSION),

&KernelDeviceNameUnicode.

FILE

DEVICE_UNKNOWN,0,FALSE,&fdo);

城!NT—SUCCESS(ntStatus))retum

ntStatus;

RtlnitUnicodeString(&UserDeviceLinkUnicode,UserDeviceLinkBuffer);

ntStatus=IoCreatSymbolicLink(&UserDeviceLinkUnicode,KemelDeviceNmneUnicode);

pdx=(PDEVICE—EXTENSION)(fdo->DeviceExtension)'

RtlCopyMemoryodx->DeviceLinkName,

UserDeviceLinkBuffer,sizeof(UserDeviceLinkBuffer));

pdx->OpenHandles=O;

pdx->ConfigurationHandle=NULL;

pdx->DeviceDescfiptor=NULL;

pdx->Interface=NULL;

fdo·>Flag&=~DO

DEVICE

1NITIALIZING;

fdo一>Flag|=DO_DIRECT_10;

pdx一>PhyscialDeviceObject=PhyscialDeviceObject;

pdx->LowerDevieeObject=loAttachDeviceToDeviceStack(fdo,

FhyscialDeviceObject);

Pdx一>Usages=l:

KelnitializeEvem(&pdx->evRemove,NotificationEvent,FALSE);

return

ntStatus:

卸载例程可以什么都不作,

IRP

MN

卸载工作可由Pnp

REMOVE_DEVICE请求来完成处理。

在插即用例程FirePnp.c中,主要包括IRP—MJ—PNP处理例程,该例程针对

IRP—MJ_PNP请求(如4.6节列举)中的主要的6个次功能代码进行处理,其余

的则沿设备栈传递至下层驱动程序。程序清单如下:

NTSTATUS

FirePnpIrp(IN

PDEVICEOBJECT

fdo,1N

PIRP

IIp)

NTSTATUS

ntstatus=STATUS_SUCCESS;

PIO—STACK

LOCATION

lrpStaek;

PDEVICE_EXTENSIONpdx=fdo·>DeviceExtension;

ULONG

MinorFunction;

if(!LockDevice(fdo))

return

Complex(Ilp,STATUS

DELETE_PENDING,0);

IrpStack=IoGetCurrentStackLocation(Irp);

MinorFunction=lrpStack一>MinorFunction;

Switch(MinorFunction)

case

IRP_MN_START

DEVICE:

ntStatus=PnpHandleStartDevice(fdo,hp);

break;

case

IRPMN—STOP_DEVICE:

ntSmms=PnpHandleStopDevice(fdo,L-p);

break;

case

IRP_MN

REMOVE

DEVICE:

ntStatus=PnpHandleRemoveDevice(fdo,lrp);

break;

case

IRP_MN

QUERY_STOP_DEVICE:

ntStatus=PnpHandleQueryStopDevice(fdo,Itp);

break;

case

IR只_MN—CANCEL_STOP—DEVICE:

58

ntStatus=PnpHandleCancelStopDevice(fdo,IIp)

break;

case

IRP_MN_QUERY_CAPABILITIES

PDEVICE—CAPABILITIESpdc=

IrpStack->Parmiarters.DeviceCapabilities.Capabilities

if(pdc一>Version<11f

ntStatus=PnPHandleDefault(fdo,IIp);

break;

ntStack=ForwardAndWait(fdo,Irp);

if(NT_SUCCESS(ntStatus)){

pdc=IrpStaek->Paramrters.DeviceCapabilities.Capabilities;

pdc·>SurpriseRemovealOK=TURE;

ntStatus=CompleteRequest(Irp,ntstams,Irp一>IoStatus.Information

break;

default:

ntStatus=PnpHandleDefault(fdo,Iro);

if(MmorFunction

I_IRP

MN

REMOVE_DEVICE)

UnloekDevice(fdo);

Regn'nntSmms

第五章总结与展望

5.1工作总结

本论文研究和总结了USB接口技术原理及其驱动程序开发技术,探讨了基

于Windows操作系统环境下的USB驱动程序的开发过程及注意事项,并应用于

课题“USB接口的移动存储设备保护器”,完成了保护器设备驱动程序开发。

下一步的工作主要有两点:一是提高速度。保护器选用的ISPll61USB主控

芯片只支持12Mbps的全速传输,在传输大容量数据时,速度上略显不足,下一

步将选用高速芯片;二是增加总线接口。保护器下行接口仍采用USB接口,连

接设备,上行接口则采用PCI总线接口,将保护器安装于主机主板上,更利于核

心机要部门的强制部署。

5.2课题展望

USB总线系统是一种新兴的标准,虽然具有很多的优点,但是也具有不少的

局限性。为了扩大USB的应用范围,很多公司在USB规范的基础上添加了新的

功能,使得USB的应用更加广泛。

根据USB规范,USB总线可为每个连接的外设提供+SV/500mA的电源,对

于很多小功率的外设已能满足要求,但是当外设需要超过500mA电流时,就需

要外接电源。这不符合”即插即用”的思想。所以出现了解决这一问题的

PoweredUSB技术。

USB规范规定了USB总线的连线长度最大为5m,使用Hub来扩展,也只

能级联5级,即最大为30m。这限制了USB在数据采集、设备监控等方面的应

用。Icron公司开发了ExtermeUSB技术,可以将连线距离扩展到500~2000m。

这两年,USB正在逐步进入无线传输领域。2003年8月Cypress公司推出的

WirelessUSB,实现了10m的通信距离,可在2.4G

global

ISM频率下工作。而在

2004年2月以Intel公司为首的7家技术重量级公司发起组成了无线USB组织,

旨在开发一种基于超宽带技术(UWB)的无线USB协议。2004年6月1日,

Agilent公司与Freescale公司共同推出业内第一个为PC连接装置而开发的通用

串行总线(USB)无线光学鼠标参考设计。无线USB正成为USB发展的一个新

的热点。

USB技术的发展正在朝着更广泛的方向发展,各种新型的USB控制器芯片

不断推出,为了更好的掌握这一技术,需要我们不断地进行研究。

参考文献

[1】

(美)Chris

Cant著孙立等译((WindowsWDM设备驱动程序开发指南》机械电子工

业出版社2000.1

【2]张惠娟周利华翟鸿呜((Windows环境r的设备驱动程序设计》西安电子科技大学

出版社2002

[3]马伟

《计算机USB系统原理及其主/从机设计》北京航空航天大学出版社2004

[4】许永和((USB外围设备设计与应用》中国电力出版社2002

[5】周立功等((PDIUSBDl2USB固件编程与驱动开发》2002

[6]武安河邰铭于洪涛(Windows

2000/XP

WDM设备驱动程序开发》2004

【7]Walter

Oney((Programming

the

Microsoft

Windows

Driver

Model))Microsoft

Press2001

【8]谢成山,薛磊,Windows环境下USB应用程序实例的开发,计算机工程2004/14

【91余姜德,于志平,基于Windows98/2000平台的usb驱动程序开发,现代计算机2004/5

[10]兰晓红,Windows下基于WinDriver驱动的USB程序设计,重庆师范大学学报2004/04

[11]马震,荆涛基于WDM的设备驱动程序设计和实现电信快报2005/01

[12]王晖嵌入式系统中USB传输模块的WDM驱动程序设计电子设计应用2005/04

[13】莫林利,赵秀绍用Vc++实现与usb驱动程序的通信电脑编程技巧与维护2003/01

[14]b佑军,邵高平用WDM开发usb驱动程序世界电子元器件2003/07

[15]余燕金,李楚元Windows2000/98下usb驱动程序的开发计算机工程与科学2003/05

[16】陈启美,吴永辉USB主机——硬件及软件电力自动化设备200I/06

[17]晁建刚,魏安阳通用串行总线(USB)设备的驱动

电子技术应用200I/05

[18]陈智华借usb驱动解决兼容问题

电脑爱好者200I/03

[19]张京京USB设备安装指南电脑爱好者2001/11

[20】蔡有元,汤健彬用DriverWorks开发USB设备驱动程序自动化仪表2002/12

【21】朱泽诚VxWorks实时操作系统的usb驱动程序原理与分析计算机工程与应用2003/22

【22]胡晓军,杨正新USB软件加密}及其驱动程序的设计与开发电子工程师2002/08

[23】陈军根,郑建生用DriverWorks开发GPS手持终端中USB接口的设备驱动程序

[24】马学文,朱名目基于“clinux的嵌入式USB接口设计电子设计应用2004/03

[25]万家富,闫荷花嵌入式Linux的usb驱动添加及应用单片机与嵌入式系统应用2003/11

[26]梁伟,吕贵洲WindowsCE下通用串行总线(usB)驱动程序开发微计算机信息2003/10

62

[27]朱本强,金力军通用串行总线驱动程序开发电子科技2003/07

[28】黄学雨,黄琳基于USB接VI的虚拟示波器的开发实现电子工程师2003/04

【29】王崇红,习勇基于嵌入式Linux的MPC850usb驱动程序的实现电子产品世界2003/21

[30]徐强,宋依青MP3系统中USB接口设计常州工学院学报2003/02

[31]陈升来,郭立红Win

2000下USB数据采集系统驱动程序开发吉林大学学报2003/02

[32]李磊,卢艳娥基于USB接Ill的多通道仿真接口板的设计与实现遥测遥控2005/02

【33]杨锐,赵剡ARM系统设计及其USB主机扩展方案微计算机信息2005/03

[34】路永坤基于USB接口的数据采集模块的设计与实现自动化仪表2005/02

【35】赵渊,曹经珊数据广播接收譬的usb驱动程序开发北京广播学院学报2004/04

[36】王国意打印机的USB接口和驱动设计福建电脑2004/10

[37]刘鹏午USB.RS232转接器固件与应用程序设计武汉市经管干部学院学报2004/11

致谢

首先感谢我的导师马义德教授,他严谨的治学态度和认真负责的工作作风令

我钦佩异常。同时还要感谢我的各位师兄和师弟提供给我的无私帮助,在学习和

完成本课题的过程中,他们给与了我很多指导意见以及他们的一些工作积累,才

使得我能够顺利完成本课题的研究。

同时,还要感谢兰州大学给我提供的这个难得的学习机会:感谢信息科学与

工程学院的老师们的辛勤工作。

感谢我的父母和爱人、我的同学和朋友。特别是我们部队项目组的领导和战

友,多年来,他们的支持和鼓励一直是我前进的动力。

最后,感谢在百忙之中为我的论文审稿的各位老师。

USB接口技术及驱动程序开发

作者:

学位授予单位:

郭苏斌

兰州大学

Cant.孙立.马莉波

Windows WDM设备驱动程序开发指南 2000

2.张惠娟.周利华.翟鸿鸣

Windows环境下的设备驱动程序设计 2002

3.马伟

计算机USB系统原理及其主/从机设计 2004

4.许永和

USB外围设备设计与应用 2002

5.周立功

PDIUSBD12 USB固件编程与驱动开发 2002

6.武安河.邰铭.于洪涛

Windows 2000/XP WDM设备驱动程序开发 2004

Oney

Programming the Microsoft Windows Driver Model 2001

8.谢成山.薛磊.陈家松.王可人.徐济仁

Windows环境下USB应用程序实例的开发[期刊论文]

-

计算机工程 2004(14)

9.余姜德.于志平

基于Windows 98/2000平台的usb驱动程序开发 2004(05)

10.兰晓红

Windows下基于WinDriver驱动的USB程序设计[期刊论文]

-

重庆师范大学学报(自然科学版) 2004(4)

11.马震.荆涛.李兴华

基于WDM的设备驱动程序设计和实现[期刊论文]

-

电信快报 2005(1)

12.王晖

嵌入式系统中USB传输模块的WDM驱动程序设计[期刊论文]

-

电子设计应用 2005(4)

13.莫林利.赵秀绍

用VC++实现与USB驱动程序的通信[期刊论文]

-

电脑编程技巧与维护 2003(1)

14.卜佑军.邵高平

用WDM开发USB驱动程序[期刊论文]

-

世界电子元器件 2003(7)

15.佘燕金.李楚元.李森生

Windows 2000/98下USB驱动程序的开发[期刊论文]

-

计算机工程与科学 2003(5)

16.陈启美.吴永辉.丁传锁.陈锁柱

USB主机——硬件及软件[期刊论文]

-

电力自动化设备 2001(6)

17.晁建刚.魏安阳.邱淑范

通用串行总线(USB)设备的驱动[期刊论文]

-

电子技术应用 2001(5)

18.陈智华

借usb驱动解决兼容问题 2001(03)

19.张京京

USB设备安装指南 2001(11)

20.蔡有元.汤健彬.金建祥

用DriverWorks开发USB设备驱动程序[期刊论文]

-

自动化仪表 2002(12)

21.朱泽诚.王兴元.李洁

VxWorks实时操作系统的USB驱动程序原理与分析[期刊论文]

-

计算机工程与应用 2003(22)

22.胡晓军.杨正新.郜业猛.于世江

USB软件加密卡及其驱动程序的设计与开发[期刊论文]

-

电子工程师 2002(8)

23.陈军根.郑建生

用Driver Works开发GPS手持终端中USB接口的设备驱动程序

24.马学文.朱名日

基于μClinux 的嵌入式USB接口设计[期刊论文]

-

电子设计应用 2004(3)

25.万家富.闫荷花

嵌入式Linux的USB驱动添加及应用[期刊论文]

-

单片机与嵌入式系统应用 2003(11)

26.梁伟.吕贵洲.胡建旺

Windows CE下通用串行总线(USB)驱动程序开发[期刊论文]

-

微计算机信息(测控仪表自动化)

2003(10)

27.朱本强.金力军

通用串行总线驱动程序开发[期刊论文]

-

电子科技 2003(7)

28.黄学雨.黄琳

基于USB接口的虚拟示波器的开发实现[期刊论文]

-

电子工程师 2003(4)

29.王崇红.习勇.魏急波

基于嵌入式Linux的MPC850USB驱动程序的实现[期刊论文]

-

电子产品世界 2003(21)

30.徐强.宋依青

MP3系统中USB接口设计[期刊论文]

-

常州工学院学报 2003(2)

31.陈升来.郭立红

Win 2000下USB数据采集系统驱动程序开发 2003(02)

32.李磊.卢艳娥

基于USB接口的多通道仿真接口板的设计与实现[期刊论文]

-

遥测遥控 2005(2)

33.杨锐.赵剡

ARM系统设计及其USB主机扩展方案[期刊论文]

-

微计算机信息 2005(3)

34.路永坤

基于USB接口的数据采集模块的设计与实现[期刊论文]

-

自动化仪表 2005(2)

35.赵渊.曹经珊

数据广播接收卡的usb驱动程序开发 2004(04)

36.王国意

打印机的USB接口和驱动设计 2004(10)

37.刘鹏午

USB-RS232转接器固件与应用程序设计[期刊论文]

-

武汉市经济管理干部学院学报 2004(z1)

1.期刊论文

陈茶红.补家武.唐叔进.CHEN Shujin

基于SL811的USB主机系统的设计

-微计算

机应用2008,29(7)

系统采用USB主/从控制器SLS11作为USB主机、遵守适用于USB大容量存储设备的USB Bulk_Only传输协议和UFI命令集,支持FAT16和FAT32文件系统,实现

了在系统中用普通U盘进行数据的存储,使系统可以方便的运用在需要与计算机进行交互的数据采集系统中.本文详细论述了USB主机系统部分硬件和软件的

设计.

2.期刊论文

刘胜军.高济.LIU Ji

嵌入式Linux下USB主控制器驱动的研究

-现代机械2006(3)

介绍了USB协议分层结构,通讯原理和主机控制器驱动程序的结构,并以S1811作为实例详细分析了主机控制器驱动程序的设计和实现过程.

3.学位论文

张波

嵌入式环境下的USB设备研究—基于μC/OS-Ⅱ的U盘文件系统设计

2008

嵌入式系统是一个快速发展的领域。U盘作为一种便利的存储设备,广泛地应用于嵌入式系统中。目前,越来越多的嵌入式产品都具有USB接口功能

,但实际指的是下位机的功能,不具备主动识别USB设备,更不能对其进行控制和读写等操作。因此,在嵌入式系统中实现对u盘的文件操作,是十分具有

现实意义和应用前景的。 U盘是一种常用的USB大容量存储设备。在USB的拓扑结构中居于核心地位的是USB主机,任何一次USB的数据传输都必须由主

机来发起和控制。因此,要在嵌入式系统中对U盘进行文件操作,必须在嵌入式系统中建立USB主机系统和文件系统。本设计使用Philips公司的LPC2210芯

片作为主CPU,ISP1161A1芯片作为主机控制器芯片,构建了USB主机系统。 论文首先对嵌入式系统的发展和USB主机原理进行了综述,分析了本设计

使用的嵌入式实时系统μC/OS-II,并且详细说明了μC/OS-II在ARM微处理器LPC2210上的移植过程。接着,论文分析了USB协议和MassStorage类协议

,实现了USB驱动和MassStorage类协议,设计了嵌入式USB主机系统,完成了USB设备的枚举、配置等功能。最后,论文对FAT32文件系统进行了分析和适当

的裁剪,设计了更适合嵌入式系统的文件系统,并且建立了文件系统与μC/OS-II的接口,在嵌入式USB主机上实现了对U盘的读写。 按照论文中提

出的方法,实现了USB主机系统和FAT32文件系统的构建,达到了预期的设计目的。

4.期刊论文

王磊.姚成虎

USB接口在嵌入式设备中的应用和设计

-测控技术2004,23(z1)

论述了USB接口在嵌入式设备中可能的应用方式,并对USB接口的软硬件设计方法进行了比较全面的分析.

5.学位论文

姚建平

USB主机控制芯片的逻辑设计与验证

2005

自从1994年USB规范被提出以来,USB技术已经得到了非常广泛的应用。各种USB设备层出不穷,在音频设备、通信设备、人机接口设备、大容量存储设

备上都有了USB接口的身影。USB的出现也让某些接口如串口,并口,PS/2等的前景出现危机。USB的热插拔,自动安装驱动等特性也改变了人们以往对计算

机硬件安装的看法。 USB系统采用主从的方式进行设计,这样大部分工作可以在主机端完成,设备端的软硬件设计可以相对的简单,使得USB设备端接口功

能广泛,价格低,从而能非常容易地普及到各个领域。但在这种主从方式下USB设备间的数据交换都必须通过USB主机。而通常的USB主机端都位于个人电脑

PC上,由于PC携带不便,造成数据交换的不便,这样也使得USB设备间的数据交换很难脱离PC在移动领域中得到广泛的应用。本文的目的就是要设计并实现

一个可集成在便携、移动产品上的USB主机控制器软核。目前它已经可以通过OPB总线接口集成到一个嵌入式的MicroBlaze系统中,并能与USB设备进行正常

的通讯。利用这个USB主机控制器软核原型系统,可以实现2个大容量USB存储设备间的便捷有效的数据交换。 本文一开始介绍了USB协议的由来及特点,以

及它的数据通信结构和数据传输过程;接着是USB主机控制器逻辑部分的设计及其实现,详细介绍了总线接口、逻辑控制部分、物理接口、数据的存取等部

分;随后介绍了USB主机控制器的软件分层及实现,包括USB主机控制器驱动,USB核心驱动,USB设备驱动,文件系统等;接下来是对MicroBlaze系统的介

绍,以及如何将USB核集成到该系统的过程;最后是USB主机控制器的仿真与调试。

6.学位论文

洪毅峰

基于ARM的嵌入式USB主机系统设计

2005

本文详细介绍了一种基于ARM内核处理器开发的USB主机系统.该主机系统实现了USB核心驱动程序、主机控制器驱动程序以及用户程序,支持MassS

torage设备类协议,并在系统中建立了精简的FAT文件系统,能够用此系统来读取FLASH闪盘中的文件数据,并通过RS-232接口送入PC显示.传统意义上的USB开

发仅仅是对USB设备的开发,比如设计一个Flash闪盘.但在USB体系结构中,USB设备无法发起或控制一个USB的传输过程,因此,一旦脱离了主机,USB设备就毫

无用武之地.现今的USB主机一般意义上指PC机.而使用PC机作为主机,对一些应用场合有局限性.因此,开发一款USB主机,实现USB主机的嵌入式化,使USB设备

的使用可以脱离PC机是有广泛应用前景的.本系统使用Samsung公司的S3C44B0芯片作为主CPU,使用Cypress公司的SL811HS芯片作为主机控制器芯片,构建了

USB主机系统.系统硬件方案设计具有成本低、功耗小、速度快等特点.在软件上,系统完成了USB主机控制器驱动程序、核心驱动程序以及用户软件的设计

,可很好地完成设备的枚举、配置等功能;系统支持Mass Storage类协议,并建立了精简的FAT文件系统,可以完成Flash闪盘上文件的读取.按照论文中提出的

方法,实现了USB主机系统的构建,对开发嵌入式USB主机,使USB应用脱离个人电脑具有普遍意义.论文针对所设计的系统,就USB主机系统作了总结和分析,并

对嵌入式USB主机的发展前景作了展望.

7.会议论文

谭保华.赵世平.查纯.刘金涛

基于LPC2132和ISP1160设计通用USB主机

2008

针对USB设备不能脱离PC机的局限性,提出了一种基于ARM控制芯片LPC2132和ISP1160的USB主机控制器实现的通用USB主机,介绍了硬件设计方案和利用

uC/OS-Ⅱ嵌入式操作系统实现USB主机栈的体系结构,最后描述了驱动通用USB设备的软件设计方案,并给出了一个USB数据采集卡的实例.

8.学位论文

王方元

远程USB主机系统方案的研究和实现

2006

本文提出了远程USB系统的架构和软件组成。计算机外设方面USB设备得到广泛应用,越来越多的应用需要远程控制USB 设备,而当前的USB 的硬件结

构对其传输距离作出了限制。 本文提出的远程USB 系统软件结构扩展了USB 系统,使得其能够在不修改已有USB目标设备驱动程序的基础上,无缝的

支持远程的USB 子系统。该远程USB 系统对硬件要求很低。主机端可采用支持Windows2000,Windows XP 或者Windows2003操作系统的PC或者服务器。

而客户端可以采用使用嵌入式系统的瘦客户端方案,以提高系统灵活性,并且降低成本。而软件平台则选用了桌面操作系统使用最为广泛的Windows 操作

系统,大大增加了系统的实际应用范围。 该方案的程序实现和性能测试表明其高效和高度可移植性。另外由于采用了并行处理框架,使本系统可支

持多个远程USB 系统客户端,而且每个客户端均可支持最多127个USB设备。这样的远程USB 方案能够应用于基于嵌入式USB设备的大规模的控制和测量、基

于IP的KVM系统、分布式机群系统等方面,对基于拓展USB设备的应用范围有着重要的价值。

9.学位论文

赵艳华

USB技术的嵌入式系统应用研究

2006

通用串行总线(Universal Serial Bus-USB)作为计算机外围设备通讯的总线标准,以其高速、稳定、易用、廉价等特点,实现了从标准出现到普遍应

用的快速发展。目前LJSB接口已经成为计算机外围设备、移动存储设备、数码产品乃至移动通讯设备与计算机互连的首选标准接口。 USB技术在嵌

入式系统中有两种主要的应用方式:即作为USB总线设备的USB设备方式和作为USB主控制器的嵌入式USB主机。USB设备已经广泛应用,如打印机、移动硬盘

、U盘、数码相机及手机等,在工业领域内,基于USB总线的数据采集系统和虚拟仪器也开始面世。随着移动USB设备互连的要求越来越强,嵌入式USB主机

和UST OTG技术的应用逐渐成为USB应用领域的研究热点。但由于USB协议的不对等性,USB主机和USB设备所担负的总线功能差别较大,因此USB主机的实现

相对复杂。由于协议的复杂性,加上嵌入式系统中软、硬件资源的限制,在系统中实现USB主机功能的实例还不是很多。目前具有嵌入式USB主机功能的多

为具有高档处理器的音视频系统,如数字机顶盒。在采用低端控制器的嵌入式系统(如单片机系统)中实现有限的USB主机功能,是当前USB应用领域中的一

个研究方向,也是本文所做工作的重点。 本文从USB总线协议入手,结合USB总线特性,分析了USB总线的工作机制,研究了其高速性、可靠性、易

用性的实现原理。在此基础上,针对USB总线的应用,从USB设备、USB主机和USB OTG应用三个方面,分别进行了实验和应用研究。 论文共分六章

:第一章和第二章介绍了USB技术发展和现状、课题意义,并分析USB总线特性的实现机理。第三章介绍了设备方式下的采用USB总线通讯的数据采集系统。

第四章介绍了集成了USB主机功能的U盘读写系统。第五章创新性的提出了基于OTG技术的Host—MP3系统的应用方案。后三章均对系统的软硬件结构进行了

论述。 本文综合探讨了USB技术在嵌入式系统中多个方面的应用与实现,具有较强的现实意义和实用性。

10.学位论文

高立艾

可遥控车载MP3播放器的设计

2006

随着我国汽车产业的迅速发展,国内汽车电子产业增速迅猛,巨大的规模效应开始显现。与此同时,我们已经进入了一个全新的信息化时代,信息技

术革命正在推动汽车技术翻开新的一页。汽车革命最重要的内容,就是实现汽车与互联网的连接。车载播放系统即车载音响作为汽车的一个不可分割的部

分也必然面临着新的技术革命。 本文根据设计要求及现有车载播放器的特点,提出了可控车载MP3播放器的设计方案,系统可分为三部分:USB主机

系统、红外遥控器、车载电源转换部分。 首先,在USB主机系统的设计中,分析了USB的基本特点,其中,对USB的系统体系、数据通信模型、数据包

格式、USB标准描述符进行了深入剖析;其次,在分析USB大容量存储设备(MassStorage)类规范的基础上,建立了USB主机与MassStorage类设备之间的逻辑

通信模型;然后,进行了USB主机控制器扩展接口电路和USB主机系统软件的设计;最后对USB主机系统进行了硬件和软件上的测试。在硬件设计上,以

SPCE061为处理器和SL811HS为主机控制芯片,依托SPCE061实验开发板,通过分析芯片结构,引脚信号功能和读/写时序,完成了USB主机控制器接口电路的

设计,实现了SPCE061对SL811HS的操作和控制。在软件设计上,以凌阳公司的μ'nSPTMIDE集成开发环境进行软件编码和调试,将USB系统软件分为通用的

USB设备命令和特定的USB设备类应用程序两部分,对各模块分别加以实现。实现了USB设备的检测、识别、配置;建立起USB大容量存储设备类的单批量

(Bulk-Only)传输,并在此基础上,建立与文件系统的接口,通过发送UFI命令实现了U盘和MP3文件的读/写。 其次,在红外遥控器的设计中,分析了

红外遥控器的基本原理,并进行了接收和发射电路的硬件设计。在接收电路设计中,使用的是HS0038一体化接收头,在发射电路设计中,采用的是PPM(脉

冲位置调制方式)进行编码,然后对红外遥控信号进行了识别和解码。 再次,设计了DC/DC电压转换电路,用以提供本播放器中MCU,HS0038芯片等各

个部分所需的电压。在设计完成之后,进行了系统的连接和调试。测试表明,该系统可在相关运行环境下正确运行,成功实现了从U盘到MP3模块的数据传

输,达到了系统预定的设计要求。

本文链接:/Thesis_

下载时间:2009年12月15日