您现在的位置是:主页 > USB2.0规范 >
USB标准请求、类特定请求总结
发布时间:2022-11-07 12:46:17所属栏目:USB2.0规范 已帮助人编辑作者:【USB接口百科】
做USB开发,最常见的就是USB的控制请求的那8个字节的分析,如果抓包工具有协议分析那还好说,但是如果不带速协议分析,那其实还是挺郁闷的。所以说,如何快速的通过USB请求的那几个字段定位出是何请求,是可以大大的提高我们的协议分析效率的。
USB的请求这里包括USB的标准请求和特定类请求,其包括以下几个字段:
1字节 | 1字节 | 2字节 | 2字节 | 2字节 |
---|---|---|---|---|
bmRequestType(1) | bRequest(1) | wValue(2) | wIndex(2) | wLength(2) |
各字段的数据长度分别可见上表,其数据组成也固定。
我们提到的USB标准请求和特定类请求的概念这里有必要做一下解释:
USB标准请求:是USB设备支持的最基本的请求,凡是USB设备都得支持,不管你是HID设备,UVC设备或者UAC等其它设备,或者是自定义USB设备,凡是USB设备,都得支持这些请求。USB标准请求是USB设备通讯的基础,是对USB设备的最基本配置。特定类请求:一些USB设备除了支持USB标准请求外,还支持其特定类的请求。这里的特定类是其它设类型规范,如HID设备,其有HID类特定请求,这些请求只能出现在HID设备中,其它类型的设备不能用。类特定请求是基本该设备类型的协议扩展,常见的类特定请求有UVC设备的类特定请求,UAC设备的类特定请求和HID设备的类特定请求。我们知道,不管是什么类型的USB设备,按功能划分可分为控制整个USB设备的,控制某个接口、控制某个端点的,所以不管是USB标准请求还是类特定请求,控制请求的目的地就有设备、接口、端点,也有一些自定义的,如其它。
USB设备的请求都是由主机发起,设备接受响应,所以该请求后的数据就有方向性分为IN和OUT,该方向是相对USB主机来说。
以上的解释其实就是USB规范对bmRequestType字段的解释,更详尽的该字段解释可见:http://www.usbzh.com/article/detail-417.html
bmRequestType字段的USB标准请求(USB基本请求) 凡是以0x00开头的bmRequestType,都是主机向设备发送数据。凡是以0x01开头的bmRequestType,都是主机向接口发送数据。凡是以0x02开头的bmRequestType,都是主机向端点发送数据。凡是以0x03开头的bmRequestType,都是主机向设备的其它类型发送数据,软件开发者可以自由定义。凡是以0x80开头的bmRequestType,都是设备向主机发送数据,且返回的数据来源于设备。凡是以0x81开头的bmRequestType,都是设备的接口向主机发送数据。凡是以0x82开头的bmRequestType,都是设备中某个接口的端点向主机发送数据。凡是以0x83开头的bmRequestType,这个是USB标准未规范的,可以自由定义,是其它类型向向主机发送数据 bmRequestType字段的类特定请求(HID,UVC,UAC,BOT)类特定请求是在bmRequestType的基础上加0x20,所以是:
凡是以0x20开头的bmRequestType,都是主机向设备发送数据。凡是以0x21开头的bmRequestType,都是主机向接口发送数据。凡是以0x22开头的bmRequestType,都是主机向端点发送数据。凡是以0x23开头的bmRequestType,都是主机向设备的其它类型发送数据,软件开发者可以自由定义。凡是以0xa0开头的bmRequestType,都是设备向主机发送数据,且返回的数据来源于设备。凡是以0xa1开头的bmRequestType,都是设备的接口向主机发送数据。凡是以0xa2开头的bmRequestType,都是设备中某个接口的端点向主机发送数据。凡是以0xa3开头的bmRequestType,这个是USB标准未规范的,可以自由定义,是其它类型向向主机发送数据 bmRequestType字段的厂商自定义请求(自定义,不常见)类特定请求是在bmRequestType的基础上加0x40,所以是:
凡是以0x40开头的bmRequestType,都是主机向设备发送数据。凡是以0x41开头的bmRequestType,都是主机向接口发送数据。凡是以0x42开头的bmRequestType,都是主机向端点发送数据。凡是以0x43开头的bmRequestType,都是主机向设备的其它类型发送数据,软件开发者可以自由定义。凡是以0xc0开头的bmRequestType,都是设备向主机发送数据,且返回的数据来源于设备。凡是以0xc1开头的bmRequestType,都是设备的接口向主机发送数据。凡是以0xc2开头的bmRequestType,都是设备中某个接口的端点向主机发送数据。凡是以0xc3开头的bmRequestType,这个是USB标准未规范的,可以自由定义,是其它类型向向主机发送数据 在USB请求中(包括标准请求和类特定请求) 其bRequest是协议类型,如SET_DESCRIPTOR、GET_IDLE,SET_ADDRESS,GET_CUR,SET_CUR等wValue 一般是类相关的,在UVC,UAC中可以是选择子,在标准请求中可以是具体的某些数据,比较详尽的内容wIndex,一般高字节为USB设备类的信息类型(如ReportId类型,描述符类型,UVC/UAC规范中的UnitId,终端ID等),低字节为接口的ID、端点的ID、ReportId或描述符索引。wLength:数据长度,和bmRequestType的最高位相配合使用 相关USB请求参见: USB标准请求:http://www.usbzh.com/article/detail-417.htmlUVC类特定请求:http://www.usbzh.com/article/detail-29.htmlUAC类特定请求:http://www.usbzh.com/article/detail-172.htmlHID类特定请求:http://www.usbzh.com/article/detail-686.html大容量存储:http://www.usbzh.com/article/detail-617.html以上就是USB接口百科为您提供USB标准请求、类特定请求总结的解读,本文章链接: http://www.usb-hub.cn/usb20gf/42298.html 欢迎分享转载,更多婚礼相关资讯请前往USB2.0规范
上一篇:USB 标准请求