3. 控制传输 控制传输是最重要和最复杂的一种传输类型,其中使用了一个8字节大小的DATA0数据包,这8个字节的数据包是主机用来发送控制阶段中的请求命令,而这些请求命令是主机配置USB设备的关键。
1) bmRequestType(向谁请求)
D7:传输方向
0=主机至设备;1=设备至主机
D6..5:命令类型
D6D5=00:标准请求命令; D6D5=01:类请求命令;
D6D5=10:用户定义命令; D6D5=11:保留。
D4..0:接受者类型
0=设备;1=接口 ;
2=端点;3=其它
4..31 保留
这个域表明此请求的特性。特别地,这个域表明了第二阶段控制传输方向。如果wLength域被设作0的话,表明没有数据传送阶段,那Direction位就会被忽略.
USB说明定义了一系列所有设备必须支持的标准请求。这些请求见下面的表<Standard Device Requests>。另外,一个设备类可定义更多的请求。设备厂商也可定义设备支持的请求.
请求可被导引到设备,设备接口,或某一个设备端结点(endpoint)上。这个请求域也指定了接收者。当指定的是接口或端结点(endpoint)时,wIndex域指出那个接口或端节点。
2) bmRequest(什么请求)
这个域标识特别的请求。bmRequestType域的Type字段可修改此域的含义。本文仅定义Type 字段为0即标准设备请求时bRequest域值的含义。
3) wValue域
此域用来传送当前请求的参数,随请求不同而变。
4) wIndex域
当bmRequestType的Recipient字段为接口或端点时,wIndex域用来表明是哪一个接口或端结。
5) wLength域
这个域表明第二阶段的数据传输长度。传输方向由bmRequstType域的Direction位指出。wLength域为0则表明无数据传输。在输入请求下,设备返回的数据长度不应多于wLength,但可以少于。在输出请求下,wLength指出主机发出的确切数据量。如果主机发送多于wLength的数据,设备做出的响应是无定义的。
3.1 标准设备请求
3.2 标准请求码(bRequest的值)
3.3 描述符类型
3.4 GET_DESCRIPTOR(读取描述符) 这个请求返回存在的描述符.
wValue域:
高一字节:标识描述表类型(Descriptor Types)
低一字节:表示描述符号的索引,将几个类型相同的描述符应用到设备中时,描述符索引用于选择一个特定的描述符(只能是配置和字符串描述符)。
例如:设备可以用几个配置描述符。对于其他可以通过GetDescriptor()请求取得的标准描述符来说,描述符的索引须为0。描述符索引值的范围从0开始到设备使用该类型描述符的数量减1。
wIndex域:
标识字串描述表的语言(Language ID),如果是其它语言的话就设为0。
wLength域:
表示要返回多少字节。如果描述表长度大于wLength域值,那么只有描述表的初始部分被返回。如果描述表比wLength域值小,则发送一个短包来标志传输的结束。一个短包被定义成一个长度短于最大负载长度或一个空(NULL)包。
这个标准请求包括3种描述符:设备(也就是设备的限定符)、配置(也就是其他速度配置)、及字符串。能进行高速操作的设备支持设备限定描述符返回有关设备不支持的速度信息(包括默认端点的wMaxPacketSize和其他速度配置的数量)。
其他速度配置用与配置描述符相同的结构返回信息,但如果设备在其他速度下操作则返回配置信息。请求配置描述符将返回配置描述符,所有接口描述符和在这个请求中所有接口的端点描述符。
第一个接口描述符的设备请求会一次返回配置描述表,所有的接口描述表和所有接口的端节点的描述表。第一个接口描述符紧跟着配置描述符号,第一个接口的端节点的描述符号随后。如果有其它的接口与端节点,它们的描述符欲跟在第一个接口与端节点描述符之后。与类有关的描述符,和/或厂商定义的描述符跟在标准描述符之后.
所有的设备必须提供一个设备描述符并且至少一个配置描述符,如果一个设备不支持一个请求的描述符,则返回请求错误。
•缺省状态:此请求合法。
•地址状态:此请求合法。
•配置状态:此请求合法。
3.5 GET_INTERFACE(取得接口) 这个请求向指定接口返回选中的备用设备。
一些USB设备有接口设置互斥的配置。这个请求允许主机确定当前选定的备用设置。如果wValue或者wLength的值与上面指定的不一致,那么设备的行为没有定义;如果指定的接口不存在,那么设备将用请求错误响应。
•默认状态:当设备处于默认状态时接收到这个请求,设备的行为没 有定义
•地址状态:设备给出请求错误
•配置状态:当设备处于配置状态时,这是一个有效的请求 |