


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用 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 通用串行
2、总线 (Universal Serial Bus )规范, 1997 年开始有真正符合 USB 技术标准的外设出现。 USB1 1 是 目前推出的在支持 USB 的计算机与外设上普遍采用的标准。 1999 年初在 Intel 的开发者论坛大会上,与会者介绍了 USB2.0 规范,该规范的支持者除了原有的 Compaq 、 Intel、 Microsoft 和 NEC 四个成员外,还有惠普、朗讯和飞利浦三 个新成员。 USB2 0 向下兼容 USB1 1 ,数据的传输率将 达到120Mbps240Mbps,还支持宽带宽数字摄像设备及 下一代扫描仪、打印机及存储设备。目前普遍采用的 USB1 1
3、主要应用在中低速外部设备 上,它提供的传输速度有低速 1 .5Mbps 和全速 12Mbps 两 种,低速的 USB 带宽( 1 5Mbps )支持低速设备,例如显 示器、 调制解调器、键盘、鼠标、扫描仪、打印机、光驱、 磁带机、软驱等。全速的 USB 带宽( 12Mbps )将支持大范 围的多媒体设备。USB 之所以能得到广泛支持和快速普及, 是因为它具备下列 的很多特点 :1. 终端用户的易用性为接缆和连接头提供了单一模型 电气特性与用户无关 自检外设,自动的进行设备驱动和设置 外设可以动态连接,动态重置2. 广泛的适用性适应不同设备,传输速率从几 kb/s 到十几 Mb/s 在同一线上支
4、持同步、异步两种传输模式 支持对多个设备的同时操作可同时操作 127 个物理设备 在主机和设备之间可以传输多个数据和信息流 支持多功能的设备利用底层协议,提高了总线利用率3. 同步传输带宽确定的带宽和低延迟适合电话系统和音频的应用 同步工作可以利用整个总线带宽4. 灵活性直接发送一系列指定大小的数据包,允许对设备缓冲器大小进行选择 通过指定数据缓冲区的大小和执行时间,支持各种数据传 输率通过协议对数据流进行缓冲处理5. 健壮性 在协议中使用差错处理 /差错恢复机制 完全实时热插拔可以对有缺陷的设备进行鉴别6. 与 PC 产业的一致性 协议的易实现性和完整性与PC机的即插即用体系结构一致与现存操
5、作系统有良好衔接的接口7. 性价比 以低廉的价格提供传输速率为 1.5Mb/s 的子通道 将外设和主机硬件进行了最优化的集成 促进了低价格外设的发展廉价的电缆和连接头 运用商业技术降低成本USB8. 可升级性 体系结构的可升级性支持在一个系统中同时存在多个 主机控制器 二 USB 接口驱动程序的开发1. 设备和驱动程序的层次结构WDM 模型使用了如图所示的层次结构。图中右边是一个设备对象堆栈。设备对象是系统为帮助软件管理硬件而创建的 数据结构。一个物理硬件可以有多个这样的数据结构。 在 WDM 中引入了功能设备对象( FDO )和物理设备对象 (PDO )来描述硬件。一个 PDO 对应一个真实
6、硬件,一个 硬件只允许有一个 PDO ,却可以有多个 FDO 。在驱动程序 中直接操作的不是硬件设备,而是相应的PDO和FDO °PDO和 FDO 都处于堆栈的最低层。 在 FDO 的上面和下面还会有 一些过滤器设备对象 (filter device object) 。位于 FDO 上面的 过滤器设备对象称为上层过滤器,位于 FDO 下面 (但仍在 PDO 之上 )的过滤器设备对象称为下层过滤器。在用户态和 内核态通信方面,系统为每一个用户请求打包形成一个 IRP 结构,将其发送至驱动程序,并通过识别 IRP 中的 PDO 来 区分是发送给哪一个设备的。2. 编写驱动程序的基本步骤(
7、1)首先编写一个 DriverEntry 例程。在这个例程中必须设置 一系列的回调例程来处理 IRP. DriverEntry 是内核模式驱动 程序主入口点常用的名字。该例程的主要工作是把各种函数 指针填入驱动程序对象。这些指针为操作系统指明了驱动程 序容器中各种子例程的位置。(2)编写一个 AddDevice 例程,它的基本功能是创建一个 设备对象并把它连接到堆栈底部为 pdo 的设备堆栈中。 相关 步骤如下: 调用 IoCreateDevice 创建设备对象, 并建立一个 私有的设备扩展对象;寄存一个或多个设备接口,以便应用 程序能知道设备的存在,另外,还可以给出设备名并创建符 号连接;初
8、始化设备扩展和设备对象的 Flag 成员;调用 IoAttachDeviceToDeviceStack 函数把新设备对象放到堆栈 上。(3)编译连接驱动程序。(4)测试驱动程序。三客户端程序的编写1 设备接口驱动程序的 AddDevice 代码调用 IoCreateDevice 创建设备 对象。 有两种方法提供对 Win32 程序可用的名称, 老的方法 是提供一个明确的符号链接名,新的方法是使用设备接口标 识支持定义的 API 的设备。IoCreateDevice 调用有一个 DeviceName 参数,可以用于为 设备指定一个名字。这个名字向内核标识设备,而不是向Win32 标识设备。 所以
9、需要创建一个符号链接来使内核设备 名对 Win32 可用。老的方法调用 IoCreateSymbolicLink ,使用参数传递合适的 符号链接名和设备链接名。新方法的主要思想是为设备对象 定义一个可用的应用程序编程接口, 全局唯一标识符 (GUID ) 用于标识这个接口。 GUID 必须使用 guidgen 工具生成,在 GUID.h 中正式声明自己定义的设备接口。在 AddDevice 例 程中调用 IoRegisterDeviceInterface 函数注册它的接口,然 后调用 IoSetDeviceInterfaceState 启用这个设备接口。2.用户态程序调用驱动程序EZ-USB
10、系列的 ezusb.sys 是一个不用修改就可以直接使用 的驱动程序,在自行开发外部设备的时候,如果没有非常特 殊的要求,完全可以采用这个驱动程序作为设备的 USB 接 口驱动,当然前提是设备必须采用 EZ-USB 的 USB 控制芯 片。在 ezusb.sys 中使用 IoCreateSymbolicLink 创建符号链接, 提供对用户态程序可用的设备名。故用户态程序首先通过调 用一个 Win32 函数 CreateFile() 来获得设备驱动程序的句柄; 然后用 DeviceIoControl() 函数通过 CreateFile() 函数返回的 句柄,来提交 I/O 控制代码和相关的输入输出缓冲区到驱动 程序,完成在 Windows 环境下 USB 数据传输的任务。3. 固件代码、驱动程序和客户端程序的关系 固件代码是非常重要的,他主要实现设备的初始化和配置。 驱动程序主要负责对各种 IRP 的处理,客户端发出 IRP 实现 具体的功能。以向 EZ-USB 的 2131 芯片实现简单的读写为例,数据从 EP2OUT 输出到芯片, 从 EP2IN 读回到主机。 而 2131 芯片 的2端点输出缓冲区的地址为7DC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论