windows 系统识别usb设备过程及usb协议简介

主机对 USB 设备的识别过程叫做枚举,一个完整的 Windows USB 设备

枚举的过程为:

1) Get Device Descriptor 。主机的第一个命令要求得到设备描述符,此

SETUP 包为 8 个字节数据( 80 06 00 01 00 00 40 00 ),其具体

含义请参考表 5-1 5-2 。“ 40 ”表示返回数据长度最大为 40H 个字节。实

际上,只返回一个包,即数组 DEV_DESC[ ] 中的前 8 个字节,用于说明设

备的描述符的真实长度和设备的类型。

2) Set Address 。接着是设置设备地址处理事件,主机发送一个含有指

定地址的数据包( 00 05 02 00 00 00 00 00 ),在主机只有一个

USB 设备的时候,这个地址一般会是 2 ,最大地址 127 USB 协议中可以

连接 127 个设备。设置地址事件处理结束后,设备进入地址状态,主机以

后会在新的指定地址处访问设备。

3) Get Device Descriptor 。主机再次发送请求得到设备描述符的数据包

80 06 00 01 00 00 12 00 ),与上次不同的是,要求的数据的长

度是实际的数据长度。因为 D12 设备每次只能发送 16 个字节,因此它会

分两次完成此要求(“ 12 ”指 12H ,十进制值为 18 )。

4) Get Configuration Descriptor 。接着主机要求得到设备的配置描述符

80 06 00 02 00 00 09 00 ),包中数据“ 09 ”指定设备发送 9

个字节,这正是设备配置描述符的长度。

5) 读取全部 Configuration Descriptor 。接着主机要求得到设备全部的

配置描述符、接口描述符和节点描述符( 80 06 00 02 00 00 FF

00 ),由于主机不知道设备描述符的真实长度,因此它要求得到 256 个字节,

实际上本系统中的 D12 发送 46 个字节就完成了此任务。

6) 如果以上步骤都正确,主机将找到新设备,提示安装驱动程序;否

则找到未知设备,不可用。 如果驱动程序安装成功,主机会再次以描述符

的实际长度要求设备重新发送设备描述符和配置描述符;接着主机发送设

置设备配置 SETUP 包,设备处理此事件,将允许所有节点进入工作状态;

最后主机请求得到设备和接口的配置,如果设备成功应答,枚举过程结束。

 

 

 

USB 是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据,最高速度
可达 480Mb/S。USB 支持“总线供电”和“自供电”两种供电模式。在总线供电模式下,
设备最多可以获得500mA的电流。 USB2.0 被设计成为向下兼容的模式,当有全速 (USB 1.1)
或者低速(USB 1.0)设备连接到高速(USB 2.0)主机时,主机可以通过分离传输来支持它
们。一条 USB 总线上,可达到的最高传输速度等级由该总线上最慢的“设备”决定,该设
备包括主机、HUB以及USB功能设备。
USB 体系包括“主机”、“设备”以及“物理连接”三个部分。其中主机是一个提供USB
接口及接口管理能力的硬件、软件及固件的复合体,可以是PC,也可以是OTG设备。一个
USB 系统中仅有一个USB主机;设备包括 USB功能设备和 USB HUB,最多支持 127个设
备;物理连接即指的是USB 的传输线。在USB 2.0系统中,要求使用屏蔽的双绞线。
一个 USB HOST 最多可以同时支持 128 个地址,地址 0 作为默认地址,只在设备枚举期间临时使
用,而不能被分配给任何一个设备,因此一个 USB HOST 最多可以同时支持 127 个地址,如果一个设
备只占用一个地址,那么可最多支持 127个 USB 设备。在实际的 USB 体系中,如果要连接 127 个 USB
设备,必须要使用 USB HUB,而 USB HUB 也是需要占用地址的,所以实际可支持的 USB 功能设备
的数量将小于 127。
USB 体系采用分层的星型拓扑来连接所有 USB设备,如下图所示:
以 HOST-ROOT HUB
为起点,最多支持 7 层
(Tier),也就是说任何一个
USB 系统中最多可以允许 5
个 USB HUB 级联。一个复
合设备(Compound Device)
将同时占据两层或更多的
层。

ROOT HUB 是一个特殊的 USB HUB,它集成在主机控制器里,不占用地址。ROOT HUB 不但
实现了普通 USB HUB 的功能,还包括其他一些功能,具体在增强型主机控制器的规范中有详细的介
绍。
“复合设备(Compound Device)”可以占用多个地址。所谓复合设备其实就是把多个功能设备
通过内置的 USB HUB 组合而成的设备,比如带录音话筒的 USB 摄像头等。
USB 采用轮询的广播机制 轮询的广播机制 轮询的广播机制 轮询的广播机制传输数据,所有的传输都由主机发起,任何时刻整个 USB 体USB 2.0 规范初探
By Hevry Email: hevry.jon@hotmail.com Page 2 of 17
系内仅允许一个数据包的传输,即不同物理传输线上看到的数据包都是同一被广播的数据
包。
USB 采用“令牌包”-“数据包”-“握手包”的传输机制,在令牌包中指定数据包去向
或者来源的设备地址和端点(Endpoint),从而保证了只有一个设备对被广播的数据包/令牌
包作出响应。握手包表示了传输的成功与否。
数据包:USB 总线上数据传输的最小单位,包括 SYNC、数据及 EOP 三个部分。其中数据的格
式针对不同的包有不同的格式。但都以 8 位的 PID 开始。PID 指定了数据包的类型(共 16种)。令牌
包即指 PID 为 IN/OUT/SETUP的包。
端点(Endpoint):是 USB 设备中的可以进行数据收发的最小单元,支持单向或者双向的数据传
输。设备支持端点的数量是有限制的,除默认端点外低速设备最多支持 2 组端点(2 个输入,2 个输
出),高速和全速设备最多支持 15 组端点。
管道(Pipe)是主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式的
流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何USB设备一旦上电就存
在一个信息管道,即默认的控制管道 默认的控制管道 默认的控制管道 默认的控制管道,USB 主机通过该管道来获取设备的描述、配置、状
态,并对设备进行配置。
USB 设备连接到 HOST 时,HOST 必须通过默认的控制管道对其进行枚举 枚举 枚举 枚举,完成获得
其设备描述、进行地址分配、获得其配置描述、进行配置等操作方可正常使用。USB 设备
的即插即用特性即依赖于此。
枚举:是 USB 体系中一个很重要的活动,由一系列标准请求组成(若设备属于某个子类,还包含
该子类定义的特殊请求)。通过枚举 HOST 可以获得设备的基本描述信息,如支持的 USB 版本、PID、
VID、设备分类(Class)、供电方式、最大消耗电流、配置数量、各种类型端点的数量及传输能力(最
大包长度)。HOST 根据 PID 和 VID 加载设备驱动程序,并对设备进行合适的配置。只有经过枚举的
设备才能正常使用。对于总线供电设备,在枚举完成前最多可从总线获取 100mA 的电流。
USB 体系定义了四种类型的传输,它们是:
控制传输:主要用于在设备连接时对设备进行枚举以及其他因设备而已的特定操作。
中断传输:用于对延迟要求严格、小量数据的可靠传输,如键盘、游戏手柄等。
批量传输:用于对延迟要求宽松,大量数据的可靠传输,如U盘等。
同步传输:用于对可靠性要求不高的实时数据传输,如摄像头、USB 音响等。
注意:中断传输并不意味这传输过程中,设备会先中断 HOST,继而通知 HOST 启动传输。中断传输
也是 HOST 发起的传输,采用轮询的方式询问设备是否有数据发送,若有则传输数据,否则 NAK 主
机。
不同的传输类型在物理上并没有太大的区别,只是在传输机制、主机安排传输任务、可
占用USB 带宽的限制以及最大包长度有一定的差异。
USB 设备通过管道和HOST 通信,在默认控制管道上接受并处理以下三种类型的请求:
1. 标准请求 标准请求 标准请求 标准请求: :: :一共有11 个标准请求,如得到设备描述、设置地址、得到配置描述等。
所有USB 设备均应支持这些请求。HOST 通过标准请求来识别和配置设备。
2. 类 类类 类( (( (class) )) )请求 请求 请求 请求: :: :USB 还定义了若干个子类,如HUB 类、大容量存储器类等。不
同的类又定义了若干类请求,该类设备应该支持这些类请求。设备所属类在设备描
述符中可以得到。
3. 厂商请求 厂商请求 厂商请求 厂商请求: :: :这部分请求并不是 USB 规范定义的,而是设备生产商为了实现一定的
功能而自己定义的请求。

展开阅读全文

没有更多推荐了,返回首页