USB1.1协议学习经验之5---- USB设备请求
来源:互联网 发布:好的机械键盘品牌知乎 编辑:程序博客网 时间:2024/06/05 14:39
所有的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域指出那个接口或端节点。
这个域标识特别的请求。bmRequestType域的Type啦可修改此域的含义。本说明仅定义Type 字位为0即标准设备请求时bRequest域值的含义。
此域用来传送当前请求的参数,随请求不同而变。
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 格式
这个域表明第二阶段的数据传输长度。传输方向由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 标准特性选择符
- USB1.1协议学习经验之5---- USB设备请求
- USB1.1协议学习经验之2---- USB设备加载过程
- USB1.1协议学习经验之3---- USB设备传送类型(数据流模型)
- USB1.1协议学习经验之4---- USB设备的描述表
- USB1.1协议学习经验之1----设备端点
- LINUX下USB1.1设备学习小记(2)_协议
- LINUX下USB1.1设备学习小记(2)_协议
- LINUX下USB1.1设备学习小记(2)_协议
- LINUX下USB1.1设备学习小记(2)_协议
- USB协议介绍[5]-设备请求
- LINUX下USB1.1设备学习小记(4)_uhci(5)
- LINUX下USB1.1设备学习小记
- LINUX下USB1.1设备学习小记
- USB1.1规范之请求篇
- USB1.1规范之协议篇
- LINUX下USB1.1设备学习小记(5)_uhci与设备(1)
- LINUX下USB1.1设备学习小记(5)_uhci与设备(2)
- LINUX下USB1.1设备学习小记(1)
- 管理人才的七大方法
- FireFox 继续优化 JS处理性能再度大幅提升
- Windows Sysinternals Desktops v1.0 发布 - 超简单的虚拟桌面程序
- 微软对键盘上的Page Up Page Down按钮享有专利权
- path
- USB1.1协议学习经验之5---- USB设备请求
- bfin-xxx-gcc中cc1plus.exe的生成
- 关于逻辑行和物理行
- 编程语言的传统魔咒
- 程序设计语言的通用点
- 关于Qt中.pro文件命令介绍和写法
- 关与C、C++、VC 的说明
- 翟鸿燊经典语录
- Python库集锦