USB设备请求

在枚举过程中,USB主机会向USB设备请求参数,用于读取描述符信息,为USB设备分配设备地址等等。USB设备通过默认控制管道响应这些请求,这些请求参数在SETUP数据包中,长度为8个字节。Linux对于请求参数结构体定义如下:

146 struct usb_ctrlrequest {
147         __u8 bRequestType;
148         __u8 bRequest;
149         __le16 wValue;
150         __le16 wIndex;
151         __le16 wLength;
152 } __attribute__ ((packed));

bRequestType: 位详细定义如下。

                           D7 数据传输方向

                                 0 主机到设备

                                 1 设备到主机

                           D6~D5 类型

                                 0 Standard

                                 1 Class

                                 2 Vendor

                                 3 Reserved

                           D4~D0 接收者

                                 0 设备

                                 1 接口

                                 2 端点

                                 3 Other

                                 4~31 Reserved

bRequest: 特定请求。

wValue:

wIndex:

wLength: 这三个参数视具体请求而定。

标准设备请求代码有:



1 Clear Feature


用于清除或禁止某些feature,该请求为OUT传输,接收者为设备、接口和端点。


2 Get Configuration


用于返回当前设备配置值,IN传输。


3 Get Descriptor


用于获取描述符,IN传输,wValue高字节为描述符类型,例如,设备描述符、配置描述符等等,wValue低字节用于选择特殊的描述符,例如设备有多个配置描述符、或者多个字符串描述符时需要使用该参数去指定索引,wIndex为字符串描述符中的LanguageID,wLength为请求的数据长度,例如,读取设备描述符请求字段如下:

0x80    0x06    0x0100    0x00    0x0012


4 Get Interface



5 Get Status



6 Set Address


用于为设备分配设备地址,OUT传输,wValue为分配的设备地址。


7 Set Configuration


用于选择一个设备配置,OUT传输,wValue为配置值。


8 Set Descriptor


该请求是可选的,用于更新描述符信息,OUT传输。


9 Set Feature


用于设置或使能某些featureOUT传输。


10 Set Interface



11 Synch Frame



Logo

更多推荐