文章目录
所有USB设备都要响应USB主机通过默认控制管道发送过来的请求(Requests),USB协议定义了一个8字节的标准请求,主要用在设备的枚举过程中。这8字节的数据是在控制传输的SETUP阶段发送给默认控制端点0的。在这8字节的数据中,包含了DATA阶段数据传输的方向、长度、类型等信息。
设备请求的数据结构
在控制传输的SETUP阶段,会发送一个DATA0 Packet,该数据包的内容就是设备请求,大小为8 byte。
bmRequestType
大小为1 byte,分成三部分。
[7]:这1 bit指定接下来的数据阶段的数据传输方向。0:主机到设备。1:设备到主机
[6:5]:请求类型。 0:标准请求。 1:类请求。 2:厂商自定义请求。 3:预留。
[4:0]:请求的接收者。0:设备。 1:接口。 2:端点。 3:其它。 4~31:预留。
bRequest
大小为1 byte,记录请求代码。
wValue
大小为2 byte,具体含义由具体的请求决定。
wIndex
大小为2 byte,具体含义由具体的请求决定。通常是指定端口或者接口。
wLength
大小为2 byte,指定数据阶段数据传输的字节数。
标准设备请求
USB定义了11个标准设备请求,如下图所示。
1 Clear Feature
该请求用于关闭某个特定功能。
功能选择器只在启动或者设置某个功能时使用
2 Get Configuration
该请求获取当前的设备配置值。返回数据只有1 byte,如果是值为0,表示设备没有配置。
3 Get Descriptor
该请求用于获取描述符。描述符记录了设备的很多信息,设备拥有多种描述符,具体类别如下图所示。这是枚举过程使用次数最多的请求。
4 Get Interface
5 Get Status
该请求获取特定接收方(设备/接口/端点)的状态。
6 Set Address
该请求为设备分配地址。
7 Set Configuration
该请求为设备选择一种配置。大多数设备只有1种配置。
8 Set Descriptor
该请求可以更新描述符或者添加新的描述符
9 Set Feature
该请求用于启动某项特定功能。
10 Set Interface
11 Synch Frame
该请求用于获取端点帧号。
参考资料
- Universal Serial Bus Specification Revision 2.0 ,April 27, 2000
- USB in a Nutshell
- 《圈圈教你玩USB》 刘荣编著 2009.1