用VB 做USB 通信程序及USB基础知识
用VB 做USB 通信程序及USB基础知识用VB 做USB 通信程序及USB基础知识。一.USB基础知识
USB是英文Universal Serial Bus的缩写,中文含义是“;通用串行总线”。1994年,Intel、Compaq、Digital、IBM、Microsoft、NEC、Northern Telecom等七家世界著名的计算机和通讯公司成立了USB论坛,花了近两年的时间形成了统一的意见,于1995年11月正式制定了USB0.9通用串行总线(Universal Serial Bus)规范,1997年开始有真正符合USB技术标准的外设出现。USB1.1是目前推出的在支持USB的计算机与外设上普遍采用的标准。1999年初在Intel的开发者论坛大会上,与会者介绍了USB2.0规范,该规范的支持者除了原有的Compaq、Intel、Microsoft和NEC 四个成员外,还有惠普、朗讯和飞利浦三个新成员。USB2.0向下兼容USB1.1,数据的传输率将达到120Mbps~
240Mbps,还支持宽带宽数字摄像设备及下一代扫描仪、打印机及存储设备。
目前普遍采用的USB1.1主要应用在中低速外部设备上,它提供的传输速度有低速1 .5Mbps和全速12Mbps两种,低速的USB带宽(1.5Mbps)支持低速设备,例如显示器、调制解调器、键盘、鼠标、扫描仪、打印机、光驱、
磁带机、软驱等。全速的USB带宽(12Mbps)将支持大范围的多媒体设备。
USB之所以能得到广泛支持和快速普及,是因为它具备下列的很多特点:
1.终端用户的易用性
●为接缆和连接头提供了单一模型
●电气特性与用户无关
●自检外设,自动的进行设备驱动和设置
●外设可以动态连接,动态重置
2.广泛的适用性
●适应不同设备,传输速率从几kb/s到十几Mb/s
●在同一线上支持同步、异步两种传输模式
●支持对多个设备的同时操作
●可同时操作127个物理设备
●在主机和设备之间可以传输多个数据和信息流
●支持多功能的设备
●利用底层协议,提高了总线利用率
3.同步传输带宽
●确定的带宽和低延迟适合电话系统和音频的应用
●同步工作可以利用整个总线带宽
4.灵活性
●直接发送一系列指定大小的数据包,允许对设备缓冲器大
小进行选择
●通过指定数据缓冲区的大小和执行时间,支持各种数据传输率
●通过协议对数据流进行缓冲处理
5.健壮性
●在协议中使用差错处理/差错恢复机制
●完全实时热插拔
●可以对有缺陷的设备进行鉴别
6.与PC产业的一致性
●协议的易实现性和完整性
●与PC机的即插即用体系结构一致
●与现存操作系统有良好衔接的接口
7.性价比
●以低廉的价格提供传输速率为1.5Mb/s的子通道
●将外设和主机硬件进行了最优化的集成
●促进了低价格外设的发展
●廉价的电缆和连接头
●运用商业技术降低成本
8.可升级性
●体系结构的可升级性支持在一个系统中同时存在多个USB 主机控制器二.USB接口驱动程序的开发
vb软件开发1.设备和驱动程序的层次结构
WDM模型使用了如图所示的层次结构。图中右边是一个设备对象堆栈。设备对象是系统为帮助软件管理硬件而创建的数据结构。一个物理硬件可以有多个这样的数据结构。
在WDM中引入了功能设备对象(FDO)和物理设备对象(PDO)来描述硬件。一个PDO对应一个真实硬件,一个硬件只允许有一个PDO,却可以有多个FDO。在驱动程序中直接操作的不是硬件设备,而是相应的PDO和FDO。PDO 和FDO都处于堆栈的最低层。在FDO的上面和下面还会有一些过滤器设备对象(filter device object)。位于FDO上面的过滤器设备对象称为上层过滤器,位于FDO下面(但仍在PDO之上)的过滤器设备对象称为下层过滤器。在用户态和内核态通信方面,系统为每一个用户请求打包形成一个IRP 结构,将其发送至驱动程序,并通过识别IRP中的PDO来区分是发送给哪一个设备的。
2.编写驱动程序的基本步骤
(1) 首先编写一个DriverEntry例程。在这个例程中必须设置一系列的回调例程来处理IRP. DriverEntry是内核模式驱动程序主入口点常用的名字。该例程的主要工作是把各种函数指针填入驱动程序对象。这些指针为操作系统指明了驱动程序容器中各种子例程的位置。
(2)编写一个AddDevice例程,它的基本功能是创建一个设备对象并把它连接到堆栈底部为pdo的设备堆栈中。相关
步骤如下:调用IoCreateDevice创建设备对象,并建立一个私有的设备扩展对象;寄存一个或多个设备接口,以便应用程序能知道设备的存在,另外,还可以给出设备名并创建符号连接;初始化设备扩展和设备对象的Flag成员;调用IoAttachDeviceToDeviceStack函数把新设备对象放到堆栈上。
(3)编译连接驱动程序。
(4)测试驱动程序。三.客户端程序的编写
1设备接口
驱动程序的AddDevice代码调用IoCreateDevice创建设备对象。有两种方法提供对Win32程序可用的名称,老的方法是提供一个明确的符号链接名,新的方法是使用设备接口标识支持定义的API的设备。
IoCreateDevice调用有一个DeviceName参数,可以用于为设备指定一个名字。这个名字向内核标识设备,而不是向Win32标识设备。所以需要创建一个符号链接来使内核设备名对Win32可用。
老的方法调用IoCreateSymbolicLink,使用参数传递合适的符号链接名和设备链接名。新方法的主要思想是为设备对象定义一个可用的应用程序编程接口,全局唯一标识符(GUID)用于标识这个接口。GUID必须使用guidgen工具生成,在GUID.h中正式声明自己定义的设备接口。在AddDevice例程