USB 设备请求
所 有的 USB 设 备在设备的缺省控制通道 (Default Control Pipe) 处对主机的请求发出响应。这些请求是通过使用控制传输来达到的, 请求及请求的参数通过 Setup 包发向设备,由主机负责设置 Setup 包内的每个域的值。每个 Setup 包有 8 个字节。见表 8-2 。
偏移量 | 域 | 大小 | 值 | 描述 |
0 | bmRequestType | 1 | 位图 | 请求特征 : D7: 传 输方向 0= 主机 至设备 1= 设备 至主机 D6..5: 种类 0= 标准 1= 类 2= 厂商 3= 保留 D4..0: 接受者 0= 设备 1= 接口 2= 端点 3= 其他 4..31= 保留 |
1 | bRequest | 1 |
值 | 具体请求 ( 参见表 8-3) |
2 | wValue | 2 |
值 | 字长域 , 根据不同 的请求含义改变 . |
4 | wIndex | 2 |
索引或偏移 | 字长域 , 根据不同 的请求含义改变 . 典型用于 传送索引或偏移 . |
6 | wLength | 2 |
| 如有数据传送阶段 , 此为数 据字节数 . |
表 8-2 . Setup 数据包的格式
1 bmRequestType域
这个域表明此请 求的特性。特别地,这个域表明了第二阶段控制传输方向。如果wLength 域被设作0 的话,表明没有数据传送阶段,那Direction 位 就会被忽略。
USB 说明定义 了一系列所有设备必须支持的标准请求。这些请求被例举在表8-3 中。另外,一个设备类可定义更多的 请求。设备厂商也可定义设备支持的请求。
请求可被导引到 设备,设备接口,或某一个设备端结点(endpoint) 上。这个请求域也指定了接收者。当指定的 是接口或端结点(endpoint) 时,wIndex 域 指出那个接口或端节点。
2 bRequest 域
这个域标识特别 的请求。bmRequestType 域的Type 啦 可修改此域的含义。本说明仅定义Type 字位为0 即 标准设备请求时bRequest 域值的含义。
3 wValue域
此域用来传送当 前请求的参数,随请求不同而变。
4 wIndex域
wIndex 域用来表明是哪一个接口或端结点,图8-2 表明wIndex 的格式( 当标识端结点时) 。Direction 位在设为0 时表示出结点,设为1 时表示是入结点,Endpoint Number 是结点号。图8-3 表明wIndex 用于标识接口时的格式。
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 | |
方向 |
保留 ( 为 0) |
端点号 | ||||||
D16 |
D15 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 | |
保留 ( 为 0) | ||||||||
图 8-2. 所指为端点时 wIndex 格式
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 | |
接口号 | ||||||||
D16 |
D15 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 | |
保留 ( 为 0) | ||||||||
图 8-3. 所指为接口时 WIndex 格式
5 wLength 域
这个域表明第二 阶段的数据传输长度。传输方向由bmRequstType 域的Direction 位指出。wLength 域为0 则表明无数据传输。在输入请求下,设备返回的数据长度不应多于wLength , 但可以少于。在输出请求下,wLength 指出主机发出的确切数据量。如果主机发送多于wLength 的数据,设备做出的响应是无定义的。
7 标准设惫请求
这部分描述的所 有USB 设备都定义的标准设备请求,表8-3 将 它们列出,而表8-4 、8-5 分别结出了对 应的标准请求码及描述表类型。
不管设备是否被 分配了非缺省地址或设备当前是被配置了的,它们都应当对标准请求产生响应。
特性选择符被用 来设置特性或使特性生效。比如说某个设备、接口、或结点的远程唤醒功能,特性选择符的值在表8-6 中 得到了说明。
对于 非法请求的处理从前所述。但是非法请求并不会使得控制通道设置Halt 特性。如果因为某种原因,设 备因为一个错误状态不能通过缺省控制通道来与主机通信,设备必须被reset 来清除错误状态并重启 缺省通道。
bmRequestType | bRequest | wValue | Windex | wLength | Data |
00000000B 00000001B 00000010B | CLEAR_FEATURE | 特性选择符 | 零 接口号 端点号 | 零 | 无 |
10000000B | GET_CONFIGURATION | 零 | 零 | 一 | 配置值 |
10000000B | GET_DESCRIPTOR | 描述表种类和索引 | 零或语言标志 | 描述表长 | 描述表 |
10000001B | GET_INTERFACE | 零 | 接口号 | 一 | 可选设置 |
10000000B 10000001B 10000010B | GET_STATUS | 零
| 零 接口号 端点号 | 二 | 设备 , 接口 , 或 端点状态 |
00000000B | SET_ADDRESS | 设备地址 | 零 | 零 | 无 |
00000000B | SET_CONFIGURATION | 配置值 | 零 | 零 | 无 |
00000000B | SET_DESCRIPTOR | 描述表种类和索引 | 零或语言标志 | 描述表长 | 描述表 |
00000000B 00000001B 00000010B | SET_FEATURE | 特性选择符 | 零 接口号 端点号 | 零 | 无 |
00000001B | SET_INTERFACE | 可选设置 | 接口号 | 零 | 无 |
100000010B | SYNCH_FRAME | 零 | 端点号 | 二 | 幀号 |
表 8-3 标准设备请求
Brequest | Value |
GET_STATUS | 0 |
CLEAR_FEATURE | 1 |
为将来保留 | 2 |
SET_FEATURE | 3 |
为将来保留 | 4 |
SET_ADDRESS | 5 |
GET_DESCRIPTOR | 6 |
SET_DESCRIPTOR | 7 |
GET_CONFIGURATION | 8 |
SET_CONFIGURATION | 9 |
GET_INTERFACE | 10 |
SET_INTERFACE | 11 |
SYNCH_FRAME | 12 |
表 8-4 标准请求码
描述表种类 | 值 |
DEVICE | 1 |
CONFIGURATION | 2 |
STRING | 3 |
INTERFACE | 4 |
ENDPOINT | 5 |
表 8-5 描 述表种类
特性选择符 | 接受者 | 值 |
DEVICE_REMOTE_WAKEUP | 设备 | 1 |
ENDPOINT_HALT | 端点 | 0 |
表 8-6 标准特性选择符
转自:http://blog.csdn.net/lujunql/archive/2008/08/23/2817000.aspx