一、USB命令
在USB规范里,对命令一词提供的单词为“Request”,但这里为了更好的理解主机与设备之间的主从关系,将它定义成“命令”。
所有的USB设备都要求对主机发给自己的控制命令作出响应,USB规范定义了11个标准命令,它们分别是:Clear_Feature、Get_Configuration、Get_Descriptor、Get_Interface、Get_Status、Set_Address、Set_Configuration、Set_Descriptor、Set_Interface、Set_Feature、Synch_Frame。所有USB设备都必须支持这些命令(个别命令除外,如Set_Descriptor、Synch_Frame)。
不同的命令虽然有不同的数据和使用目的,但所有的USB命令结构是一样的。下表所示为USB命令的结构:
表1、USB命令的结构 | ||||
偏移量 | 域 | |
值 | 描述 |
0 | bmRequestType | 1 | 位图 | 请求特征: D7:传输方向 0=主机至设备 1=设备至主机 D6..5:种类 0=标准 1=类 2=厂商 3=保留 D4..0:接受者 0=设备 1=接口 2=端点 3=其他 4..31 保留 |
1 | bRequest | 1 | 值 | 命令类型编码值(见表3) |
2 | wValue | 2 | 值 | 根据不同的命令,含义也不同 |
4 | wIndex | 2 | 索引或偏移 | 根据不同的命令,含义也不同,主要用于传送索引或偏 移 |
6 | wLength | 2 | |
如有数据传送阶段,此为数据字节数。 |
下表列出了USB的11种标准命令
表2、USB的11种标准命令 | ||||||
命令 | bmRequestType |
bRequest |
wValue |
wIndex |
wLength |
Data |
Clear_Feature | 00000000B |
CLEAR_FEATURE |
特性选择符 |
零 |
零 |
无 |
Get_Configuration | 10000000B |
GET_CONFIGURATION |
零 |
零 |
一 |
配置值 |
Get_Descriptor | 10000000B |
GET_DESCRIPTOR |
描述表种类(高字节,见表5)和索引(低字节) |
零或语言标志 |
描述表长 |
描述表 |
Get_Interface | 10000001B |
GET_INTERFACE |
零 |
接口号 |
一 |
可选设置 |
Get_Status | 10000000B |
GET_STATUS |
零 |
零(返回设备状态) |
二 |
设备, |
Set_Address | 00000000B |
SET_ADDRESS |
设备地址 |
零 |
零 |
无 |
Set_Configuration | 00000000B |
SET_CONFIGURATION |
配置值(高字节为0,低字节表示要设置的配置值) |
零 |
零 |
无 |
Set_Descriptor | 00000000B |
SET_DESCRIPTOR |
描述表种类(高字节,见表5)和索引(低字节) |
零或语言标志 |
描述表长 |
描述表 |
Set_Feature | 00000000B |
SET_FEATURE |
特性选择符(1表示设备,0表示端点) |
零 |
零 |
无 |
Set_Interface | 00000001B |
SET_INTERFACE |
可选设置 |
接口号 |
零 |
无 |
Synch_Frame | 100000010B |
SYNCH_FRAME |
零 |
端点号 |
二 |
帧号 |
其中bRequest为命令编码值,含意见表3:
表3、USB标准命令的编码值
|
|
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_INTE |