USB——设备请求和描述符
来源:互联网 发布:linux 修改路由表 编辑:程序博客网 时间:2024/06/05 15:15
描述符(descriptor)是一个数据结构,使主机了解设备的格式化信息。每一个描述符可能包含整个设备的信息,或是设备中的一个组件。所有的USB外围设备,都必须对标准的USB描述符作出响应。
表1 标准描述符类型
描述符类型
说明
是否需要
Device
设备
是
Device_qualifier
只有同时支持全速与高速的设备才需要,其它设备不允许
Configuration
配置
是
Other_speed_configuration
只有同时支持全速与高速的设备才需要,其它设备不允许
Interface
接口
是
Endpoint
端点
否,如果设备只使用端点0
String
字符串
否,选择性的描述文字
Interface_power
否。支持接口层级的电源管理
表2 描述符的数值
类型
数值(十六进制)
描述符
标准
(standard)
01
device
02
configuration
03
String
04
Interface
05
Endpoint
06
Device_qualifier
07
Other_speed_configuration
08
Interface_power
类别
(class)
21
HID
29
Hub
HID类别特定
22
Report
23
physical
每一个描述符包含有数个字段,大部分的字段使用前置名称(prefix),来指出该字段的格式与内容。例如:
b表示该字段为一个字节的长度;
w表示两个字节的长度;
bm表示位映射,即字节中的每一位都对应不同的含义;
bcd表示BCD码;
i表示索引或是指针(index);
id表示标志符(identifier)。
n
表3 设备描述符
位移
十进制
字段
大小
(字节)
数值
说明
0
bLength
1
数字
描述符大小(字节)
1
bDescriptorType
1
常数
常数Device(01h)
2
bcdUSB
2
BCD
USB规范版本号码
4
bDeviceClass
1
类别
类别码
5
bDeviceSubclass
1
子类别
子类别码
6
bDeviceProtocol
1
协议
协议码
7
bMaxPacketSize(0)
1
数字
端点0的最大信息包大小
8
idVendor
2
ID
厂商ID
10
idProduct
2
ID
产品ID
12
bcdDevice
2
BCD
设备版本号码
14
iManufacturer
1
索引值
制造者的字符串描述符的索引值
15
iProduct
1
索引值
产品的字符串描述符的索引值
16
iSerialNumber
1
索引值
序号的字符串描述符的索引值
17
bNumConfigurations
1
数字
可能配置的数目
n
表4 device_qualifier描述符
位移
十进制
字段
大小
(字节)
数值
说明
0
bLength
1
数字
描述符大小(字节)
1
bDescriptorType
1
常数
常数Device_qualifier(06h)
2
bcdUSB
2
BCD
USB规范版本号码
4
bDeviceClass
1
类别
类别码
5
bDeviceSubclass
1
子类别
子类别码
6
bDeviceProtocol
1
协议
协议码
7
bMaxPacketSize(0)
1
数字
端点0的最大信息包大小
8
bNumConfigurations
1
数字
可能配置的数目
9
Reserved
1
0
保留
n
配置描述符有8个字段,如表5所示,在许多设置配置中,有些字段并不使用。
表5 配置描述符
位移
十进制
字段
大小
(字节)
数值
说明
0
bLength
1
数字
描述符大小(字节)
1
bDescriptorType
1
常数
常数configuration(02h)
2
wTotalLength
2
数字
此配置传回的所有数据大小(字节)
4
bNumInterfaces
1
数字
此配置支持的接口数目
5
bConfigurationValue
1
数字
Set_configuration与get_configuration要求的标识符
6
iConfigurtion
1
索引值
此配置的字符串描述符的索引值
7
bmAuributes
1
位图
自身电源/总线电源以及远程唤醒设置
8
MaxPower
1
mA
需要总线电源,标识法为(最大mA/2)
2
2
2
n
同时支持全速与高速的设备,必须有一个Other_speed_configuration描述符。此描述符的结构与配置描述符相同,唯一的差别是other_speed_configuration描述符描述的是当设备是在非作用中速度时的配置,Other_speed_configuration描述符与设备配置描述符相同。
表6 other_speed_configuration描述符
位移
十进制
字段
大小
(字节)
数值
说明
0
bLength
1
数字
描述符大小(字节)
1
bDescriptorType
1
常数
常数other_speed_configuration(07h)
2
wTotalLength
2
数字
此配置传回的所有数据大小(字节)
4
bNumInterfaces
1
数字
此配置支持的接口数目
5
bConfigurationValue
1
数字
Set_configuration与get_configuration要求的标识符
6
iConfigurtion
1
索引值
此配置的字符串描述符的索引值
7
bmAuributes
1
位图
自身电源/总线电源以及远程唤醒设置
8
MaxPower
1
mA
需要总线电源,标识法为(最大mA/2)
n
每一个设置配置必须支持一个接口,对许多设备来说,一个接口就已经足够,不过一个设置配置,可以同时又多个作用中的接口。每一个接口有它自己的接口描述符,此接口所支持的所有端点又各有一个附属描述符。
如果一个设备拥有同时多个作用中接口的设置配置,它就是一个复合设备,主机会为每一个接口,加载一个驱动程序。
表7 接口描述符
位移
十进制
字段
大小
(字节)
数值
说明
0
bLength
1
数字
描述符大小(字节)
1
bDescriptorType
1
常数
常数interface(04h)
2
bInterfaceNumber
1
数字
识别此接口的数字
3
bAlternateSetting
1
数字
用来选择一个替代设置的数值
4
bNumEndpoints
1
数字
除了端点0外,支持的端点数量
5
bInterfaceClass
1
类别
类别码
6
bInterfaceSubclass
1
子类别
子类别码
7
bInterfaceProtocol
1
协议
协议码
8
iInterface
1
索引值
此接口的字符串描述符的索引值
n
表8 端点描述符
位移
十进制
字段
大小
(字节)
数值
说明
0
bLength
1
数字
描述符大小(字节)
1
bDescriptorType
1
常数
常数endpoint(05h)
2
bEndpointAddress
1
端点
端点数目与方向
3
bmAttributes
1
数字
支持的传输类型
4
wMaxPacketSize
2
数字
支持的最大信息包大小
6
bInterval
1
数字
最大延迟/轮询时距/NAK速率
2
2
n
字符串描述符包含描述的文字,USB规范定义了制造者、产品、序号、配置以及接口的字符串描述符,字符串描述符是选择性的,设备可以支持额外的字符串描述符。
表9 字符串描述符
位移
十进制
字段
大小
(字节)
数值
说明
0
bLength
1
N+2
描述符大小(字节)
1
bDescriptorType
1
常数
常数STRING(03h)
2
bString
不定
数字
如果是字符串描述符0,此字段是一个1个或更多语言标识符码的数组。如果是其他的字符串描述符,此字段是一个Unicode字符串
///////////////////////////////////////////////////////////////////////////////////////////////////
转自:http://blog.sina.com.cn/s/blog_98ee3a930100wh9w.html
1. USB协议定义了一个8字节的标准设备请求,主要用在设备的枚举过程中。这个8字节的数据是在控制传输的建立通过默认控制端点0发出的。
下图是标准的设备请求结果
现在分别的说明各个域;
(1)bmRequestType域
这个在上面的图表中已经说明的很详细了。
(2)bRequest域
这个域标识特别的请求。bmRequestType域的Type啦可修改此域的含义。本说明仅定义Type 字位为 0即标准设备请求时bRequest域值的含义
(3)wValue域
此域用来传送当前请求的参数,随请求不同而变
(4)wIndex域
(5)wLength域
这个域表明第二阶段的数据传输长度。传输方向由bmRequstType域的Direction位指出。wLength域为0则表明无数据传输。在输入请求下,设备返回的数据长度不应多于wLength,但可以少于。在输出请求下,wLength指出主机发出的确切数据量。如果主机发送多于wLength的数据,设备做出的响应是无定义的。
2.标准的USB请求
3.USB描述符
4.设备描述符
设备描述表给出了USB设备的一般信息。这包括对设备及所有设备配置起全程作用的信息。一个USB设备只能有一个设备描述表。
5.配置描述符
配置描述表给出了一设备配置的信息,描述表包括一个bConfigurationValue域,在SetConfiguration( )请时被用作参数来设置所需配置。
此描述表给出了此配置下的接口数,每个接口可能独立操作。比如,一个ISDN设备可能配置有两个接口,每个都提供64KB/S的有独立数据源与数据接收者的双向通道在另一个配置下ISDN可能表现为单个接口,将两个通道合成一个128KB/S的双向通道。
当主机发出请求要得配置描述表时,所有相关接口与端节点的描述表都被返回。
一个USB设备有一个或多个配置。每个配置只有一个或多个接口。而每个接口又有0个或多个端节点。在一个配置下,一个端节不会在接口之间共享,除非端节点被同一个接口的不同设置使用。在不同配置端节点,可无此限制。
一个配置好后,设备可支持对配置的有限调整,如果一个接口有备选设置,在配置好后可选择不同设置。表8-8是标准配置描述表。
6.接口描述符
此描述表在一个配置内给出一个接口的信息。如果一个配置支持不止一个接口,端节点的描述表会跟在接口描述表后被返回,接口描述表总是作为配置描述表的一部分被返回。接口描述不可直接用SetDescription ( )和GetDescriptor ( )存取。
一个接口可能包含备选设置,以使得端节点或他们的特性在设备配置好以后能改变。一个接口的缺省设置总是可选设置。SetInterface ( )与GetInterface ( )用来选择与返回选择了的接口设置。
可选的接口设置使得部分的设备配置能在其它接口进行操作的情况下改变。如果一个配置对于它的一个或多个接口有备选设置,每一设置包括一个独立接口描述表和相关结点。
如果一个设备配置支持单个接口,并此接口有两个可选设置,配置描述表返回以后会紧跟着返回bInterfaceNumber与bAlternateSetting域皆为0的第一个设置的接口描述表及相关的结点描述表,而随之后是另一个设置接口描述表与结点描述表。第二个接口描述表的bInterfaceNumber域也应为0,但bAlternate Setting域应为1。
如果一个接口仅使用节点0,则接口描述表以后就不再返回节点描述表,并且此接口表示的是一个请求接口,它使用连在节点0上的缺省通道。在这种情况下bNumberEndpoints域应被设置成0。
7.端点描述符
每个接口使用的结点都有自己的描述表,此描述表被主机用来决定每个节点的带宽需求。每个结点的描述表总是作为配置描述的一部分返回的,结点0无描述表。8-10为标准节点描述表
8.字符串描述符
9.人机接口类描述符
- USB——设备请求和描述符
- USB标准输入请求:获取描述符——设备描述符
- USB请求和USB描述符
- USB设备和设备描述符
- USB 开发基础--USB 命令(请求)和USB 描述符
- USB设备描述符
- USB设备描述符
- usb标准设备请求+usb各种描述符结构+usb枚举过程
- 4.10 基于OHCI的USB主机 —— USB设备取得设备描述符
- USB命令(请求)和USB描述符(1)
- USB命令(请求)和USB描述符
- USB命令(请求)和USB描述符(1)
- USB命令(请求)和USB描述符(2)
- USB命令(请求)和USB描述符
- USB命令(请求)和USB描述符
- USB命令(请求)和USB描述符
- USB命令(请求)和USB描述符
- USB命令(请求)和USB描述符
- 4401: 块的计数
- JavaWeb:上传下载文件
- android 广播大全
- Maven管理,Spring与Mybatis的环境整合
- 解决vs2015无法启动IIS Express的问题
- USB——设备请求和描述符
- Redis高级特性及应用场景
- 见习报告
- wsdl文件转换成java代码
- 序
- RPC框架Thrift架构描述
- 暑期复习计划。
- MySql表名称大小写敏感问题以及修改配置报错问题
- 左旋转字符串