标准USB设备请求命令

一、标准的usb设备请求命令

控制传输是最重要和结构最复杂的一种传输类型。控制传输的“初始设置步骤”中包含了1 个8 字节的DATA0 数据包( 参见图6 .6) , 这8 字节的数据包是主机用来发送控制阶段中的请求命令的, 而这些请求命令是主机配置USB 设备的关键。这里就来详细分析这8 字节请求命令的结构和内容。

1.设备请求命令的格式

这里写图片描述

1)
bmRequestType字段

这里写图片描述

2)
bRequest字段

标准请求命令的编号

请求命令名称 编号( bRequest 字段的值) 描述
GET_STATUS 0 用来返回特定接收者的状态
CLEAR_FEATU RE 1 用来清除或禁止接收者的某些特性
Reserved for future use 2
SET_FEATURE 3 用来启用或激活命令接收者的某些特性
Reserved for future use 4
SET_ADDRESS 5 用来给设备分配地址
GET_DESCRIPTOR 6 主机获取设备的特定描述符
SET_DESCRIPTOR 7 修改设备中有关的描述符,或者增加新的描述符
GET_CONFIGURATION 8 主机获取设备当前设备的配置值(注同上面的不同)
SET_CONFIGURATION 9 主机指示设备采用的要求的配置
GET_INTERFACE 10 获取当前某个接口描述符编号
SET_INTERFACE 11 主机要求设备用某个描述符来描述接口
SYNCH_FRAME 12 设备设置和报告一个端点的同步帧

3)
wValue字段

命令信息。占用2 个字节。每一种请求命令都可以自行来定义这个字段的内容。根据不同的命令,含义也不同

4)
wIndex字段

索引信息。占用2 个字节。命令也可以自定义该字段的内容, 但一般该字段的内容为索引值或偏移量。

a.传输端点索引值

这里写图片描述
D7为方向位,为0时表示输出OUT端点,1为输入IN端点
D3~D0表示端点号

b.传输接口索引值

这里写图片描述

5)
wLength字段

传输的数据大小。共有2 字节。该字段表示在控制传输的“可选数据步骤”中要传输的数据大小。当然, 数据是主机发送给设备的, 那么该字段中的值便是实际的数据大小; 而当数据发送方向是设备到主机时, wLength 的值是设备能够发送的最大数据包的大小, 当然, 设备实际发送的数据可以比wLength 的值小。

二、命令详解

USB标准命令

这里写图片描述

获取描述符类型

这里写图片描述

1)
GET_STATUS获取状态请求

具体见上图

a.返回数据:

(1)命令接收者为设备时, 设备返回的数据格式如图所示。仅D1 和D0 位有效。
D1 位用于表示设备的远程唤醒能力, 当D1 = 1 时, 表示设备被使能, 能够远程唤醒; 当D1 = 0 时, 表示设备的远程唤醒能力被禁止。在系统复位后,D1 位默认为0。主机可以通过ET_FEA TURE和CLEAR_FEAT URE 命令来改变设备的远程唤醒能力。D0 位指示设备的供电模式, 当D0 = 0时, 表示设备是总线供电; 当D0 = 1 时, 表示设备为自供电。主机无法改变设备的供电模式。
这里写图片描述
(2)命令接收者为接口时, 返回的数据不带有任何信息,如图所示。
这里写图片描述

(3)命令接收者为端点时, 返回的状态信息数据格式如图所示。
仅D0 位有效, 指示该端点是否被禁止( Halt )。当D0 = 0 时, 表示该端点处于禁止状态; 当D0 = 1 时, 表示该端点状态正常。
这里写图片描述

2)
CLEAR_FEATURE清除特性请求

这里写图片描述

a.wValue 字段:

填入的该字段内容是特性选择器。这个特性选择器其实就是代表了一些特定的需要被清除或禁用的特性代码,如下图所示。
这里写图片描述
比如DEVICE_REMOTE_WAKEUP 特性选择器, 就是主机用来管理设备的远程唤醒的能力。通过此请求命令, 主机可以禁用设备的远程唤醒功能。而ENDPOINT_HALT特性选择器选择
端点的禁用特性, 主机可以利用此命令来解除一个端点的禁用状态。由于特性选择器的接收者不同,此字段的值要与bmRequestType 字段的值相匹配。

b.wIndex 字段

同GET_STATUS请求命令一样, 该字段的值要与bmRequest Type 字段的内容匹配。当该命令获取的是设备的状态时, 值为0x00; 当命令接收者是接口时, 该字段的值即为相应接口的编号, 即接口描述符的bInter faceNumbe r 字段。当命令接收者是端点时, 该字段的值即为相应的端点号, 即端点描述符的bEndpointAddress字段

3)
SET_FEATURE设置特性请求

这里写图片描述
与CLEAR_FEAT URE 相对应,wValue字段选择与上面一致。测试模式具体请看手册chapter9.4.9

4)
SET_ADDRESS设置地址请求

这里写图片描述

5)
GET_DESCRIPTOR获取描述符请求

该命令能够获取的描述符只有3 类: 设备描述符(包括速度限定描述符)、配置描述符(other_speed_configuration)和字符串描述。
这里写图片描述

a.wValue 字段

此字段占用了2 字节, 其高字节为描述符的类型编号,具体编号看上面的获取描述符类型图表, 低字节为描述符的字符串索引。这些值都可以在描述符中找到字段值对应
这里写图片描述

b.wIndex 字段

如果该命令获取的是字符串描述符, 则此字段的内容即为与字符串有关的语言ID。如果该命令获取的是设备或配置描述符, 则此字段的值为0。

语言ID代码:
http://www.usb.org/developers/docs/USB_LANGIDs.pdf

c.返回数据

此数据即为设备在控制传输的“可选数据步骤”中返回的描述符。当该命令获取的是配置描述符时, 设备将会按顺序返回该配置描述符, 以及该配置支持的所有接口描述符和接口使用的所有端点描述符。发送的顺序是: 首先发送配置描述符, 然后发送第一个接口描述符, 再发送该接口使用的端点描述符; 接下来, 才发送该配置支持的第二个接口描述符(如果存在的话) , 再发送该接口使用的所有端点描述符。

6)
SET_DESCRIPTOR设置描述符请求

主机利用该请求命令来修改设备中的有关描述符, 或者增加新的描述符
这里写图片描述

a.wIndex

如果该命令修改或增加的是字符串描述符,则此字段的内容即为与字符串有关的语言ID;如果该命令修改或增加的是设备或配置描述符,则此字段值为0。注意,该命令能够修改或增加的描述符只有3类:设备描述符、配置描述符和字符串描述。

7)
GET_CONFIGURATION获取配置请求

这里写图片描述

a.返回数据

即在控制传输的“可选数据步骤”中设备返回给主机的当前配置值,即配置描述符中的bConfigurationValue字段的值。

8)
SET_CONFIGURATION设置配置请求

这里写图片描述

a.wValue 字段

值为主机要求设备采用的配置的配置值, 即配置描述符中的bConfigurationValue 字段内容。

9)
GET_INTERFACE获取接口请求

这里写图片描述

a.wIndex 字段

值为接收该命令的接口的编号, 即接口描述符中的bInterfaceNumbe r 字段的值。

b.返回数据

该数据为设备在“可选数据步骤”中返回给主机的与特定接口描述符一一对应的接口描述符编号, 即接口描述符中的bAlternat eSetting 字段的值。

10)
SET_INTERFACE设置接口请求

这里写图片描述

a.wValue 字段

值为主机希望设定的接口描述符编号, 即接口描述符中的bAlternat eSetting 字段。

b.wIndex 字段

值为接收该命令的接口编号, 即接口描述符中的bInter faceNumbe r 字段的值。

11)
SYNCH_FRAME同步帧请求

此命令用于设备设置和报告一个端点的同步帧
这里写图片描述

a.wIndex 字段

值为端点号, 即端点描述符中的bEndpointAddres s 字段。

b.返回数据

内容即为端点返回的帧号。

猜你喜欢

转载自blog.csdn.net/hushiganghu/article/details/64906052
今日推荐