USB协议分析

USB设备逻辑结构

在USB设备的逻辑组织中,包含设备、配置、接口和端点4个层次。设备通常有一个或多个配置,配置通常有一个或多个接口,接口通常有零个或多个端点。                        

 

USB设备描述符

当我们把USB设备(例如USB鼠标)插到我们的PC时,主机能够自动识别出我们的USB设备类型。在每一个USB设备内部,包含了固定格式的数据,通过这些数据,USB主机就可以获取USB设备的类型、生产厂商等信息。这些固定格式的数据,我们称之为USB描述符。标准设备有5种USB描述符:设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符。这些描述符在USB设备内部的寄存器中,供主机来调取查看。

一个USB设备只有一个设备描述符,设备描述符的长度为18个字节。

1.重要的设备描述符有:

bDeviceClass:类型代码

bDeviceSubClass:子类型代码

idVendor:供应商ID

idProduct:产品ID

通过类型代码和子类型代码就可以确定USB设备的类型。

2.重要的配置描述符有:

bNumInterfaces:配置所支持的接口数,指该配置设备配置的接口数量,也表示该配置下接口描述符的数量。

USB数据通讯

一个transfer(传输)由一个或多个transaction(事务)构成,一个transaction(事务)由一个或多个packet(包)构成,一个packet(包)由一个或多个sync(域)构成。

1.传输数据通信

USB的数据通讯首先是基于传输(transfer)的,传输的类型有:中断传输、批量传输、同步传输、控制传输。

2.事务数据通讯

一次传输由一个或多个事务(transaction)构成,事务可以分为:in事务、out事务、setup事务。

3.包数据通讯

一个事务由一个或多个包(packet)构成,包可分为:令牌包(setup)、数据包(data)、握手包(ack)、特殊包。

4.域数据通讯

一个包由多个域构成,域可分为:同步域(sync)、标识域(pid)、地址域(addr)、端点域(endp)、帧号域(fram)、数据域(data)、校验域(crc)。

USB设备枚举

USB设备在正常工作以前,第一件要做的事就是枚举。枚举是让主机认得这个USB设备,并且为该设备准备资源,建立好主机和设备之间的数据传递通道。

1.获取设备描述符

2.复位

3.设置地址

4.再次获取设备描述符

5.获取配置描述符

6.获取接口、端点描述符

7.获取字符串描述符

8.选择设备配置

在具体分析之前我们先来掌握一些基础知识:

这个表格就是主控制器发送给设备的请求信息的格式

bmRequestType主要规定了下一条信息的传输方向,0表示主机发送给设备,1相反

bRequest请求的类型:

wValue根据不同的请求而设置不同的值,一般就是传送参数给设备标明这是什么请求。在GET_DESCRIPTOR获取设备描述符里,它的值是00 01。在GET_DESCRIPTOR里这个字段的低字节表示描述符的索引,高字节表示描述符的类型,高字节的类型如下

我们来看个例子:01 00

01表示设备描述符,00表示从偏移地址0处开始读取设备描述符。

wIndex 用来说明端点号或者说明接口标识

wLength传送数据的长度

好的,接下来我们开始分析:

我们插上鼠标后后出现如下的信息,我们先来分析第一个传输:

我们看到第一个是控制传输,它包含了4个事物,分别是:1个setup事务,3个in事务,1个out事务,我们先打开setup事务:

我们看到这个事务里包含了3个包

第一个包是令牌包,它由主控制器发送给目标设备的0号端口,用于设置目标设备的地址和端口号,我们看到后面两个包都缺省了地址与端口号。在usb系统中,所有的通信都是由主机发出相应的令牌所引起的。

第二个是数据包,由主控器发送给目标设备,其中数据的内容表示:

80:表示要求设备向主机发送信息

06:表示GET_DESCRIPTOR,即设备向主机发送设备描述符

00与01:Word-sized field that varies according to request

00与40:Word-sized field that varies according to request; typically used to pass an index or offset

00:Number of bytes to transfer if there is a:Data stage

总结一下第二个包就是向默认地址0 发送GET_DESCRIPTOR 指令包,请求设备发送设备描述符

第三个是应答包:设备接收到主机发送的数据后会给出应答

接着我们看第一个in事务

我们看到这个事务里也有三个包

第一个是in包:由主机发送给设备,表示要设备向主机发送上面请求的设备描述符

第二个是数据包:由设备发送给主机,当然是发送设备描述符,我们来分析一下:

12:表示接下来要求主机向设备发送信息

01:CLEAR_FEATURE、

第三个是应答包,由主机发送给设备

接着我们来看第二个in事务

这个事务里依旧是3个包

第一个是in包:由主机发送给设备,表示需要输入

第二个是数据包:由设备发送给主机,我们来解析一下:

6D:表示要求主机发给设备数据

04:Reserved for future use

第三个是主机给设备的应答包

然后看第三个in事务

第一个是in包:主机发给设备

第二个是数据包,由设备发给主机

00:要求主机发给设备信息

01:CLEAR_FEATURE

第三个是主机给设备的应答信号

最后来看out事务

第一个是out包:由主机发给设备

第二个是数据包:由主机发给设备,无数据

第三个包是设备给主机的应答包

总结一下,第一个传输就是主控制器要求设备发送设备描述符,然后设备分三次将设备描述符发送给了主控制器,但是由于主控制器不知道设备描述符有多长,所以要求发送的是64个字节长度。由于知道了设备描述符,主控制器就可以找到相应的驱动程序了。

第一个传输后面是是一个复位包

下面我们的分析就不在贴出图片了,知识列出重要的信息

第二个传输:

00 05 02 00 00 00 00 00

这是主控制器发送给设备的配置信息,05表示这是一个地址配置包。由于每条usb总线上最多可以连接127个设备,每个设备必须要有唯一的地址才能正常通讯。02表示分配的设备地址是02。

第三次传输:

80 06 00 01 00 00 12 00

这是主控制器向设备发出的信息,06表示要获取设备的描述符,(00和01)表示要获取的是设备描述里面的关于设备的信息。长度是12。注意因为上一个传输已经将设备的地址设置为2了,所以这里是向地址2发送信息。

12 01 00 02 00 00 00 08

6D 04 18 C0 01 43 01 02

00 01

这三条是设备发送给主机的设备描述符

第四次传输:

80 06 00 02 00 00 09 00

这条数据由主机发送给设备,(00和02)表示设备描述符的类型是配置信息。长度是9

09 02 22 00 01 01 00 A0

32

这9个字节是设备发送给主机的配置信息。

第五次传输:

80 06 00 02 00 00 22 00

表示主控制器要求主机发送配置信息

09 02 22 00 01 01 00 A0

32 09 04 00 00 01 03 01

02 00 09 21 11 01 00 01

22 34 00 07 05 81 03 05

00 0A

这几条是设备发送给主控制器的配置信息

第六次传输:

80 06 00 03 00 00 FF 00

03表示字符串描述符,值主机要求设备发送字符串描述符

04 03 09 04

这是设备发送给主机的字符串描述符

第七次传输:

80 06 02 03 09 04 FF 00

表示主控制器要求主机发送配置信息,偏移地址是02

24 03 55 00 53 00 42 00

20 00 4F 00 70 00 74 00

69 00 63 00 61 00 6C 00

20 00 4D 00 6F 00 75 00

73 00 65 00

这是设备发送给主机的配置信息

第八次传输:

80 06 01 03 09 04 FF 00

表示主控制器要求主机发送配置信息,偏移地址是01

12 03 4C 00 6F 00 67 00

69 00 74 00 65 00 63 00

68 00

这几条就是设备传递给主控制器的配置信息

第九次传输:

00 09 01 00 00 00 00 00

表示主控器要对设备进行配置,偏移为1。

第十次传输:

21 0A 00 00 00 00 00 00

表示主控制器要获得设备的接口信息

第十一次传输:

81 06 00 22 00 00 34 00

表示主控制器要获得设备描述符

05 01 09 02 A1 01 09 01

A1 00 05 09 19 01 29 03

15 00 25 01 75 01 95 03

81 02 75 05 95 01 81 01

05 01 09 30 09 31 09 38

15 81 25 7F 75 08 95 03

81 06 C0 C0

这是设备发送给主机的设备描述符

猜你喜欢

转载自blog.csdn.net/zjy900507/article/details/81280089