当前位置:网站首页>USB 枚举过程中8 字节标准请求解析
USB 枚举过程中8 字节标准请求解析
2022-08-11 05:25:00 【Emily_rong_2021】
请求
请求和描述符一样,有标准的设备请求,而对于不同类的设备,又有自己特定的请求。先介绍标准的设备请求,对于特殊的请求,介绍每个不同的类设备时,再做解析。
1. 标准设备请求的数据结构
USB协议中规定,标准请求的长度为8个字节。在设备枚举过程中,Host会下发一系列的标准请求,设备端需要去解析这些标准请求(SETUP事务),并作出正确响应,设备才能成功枚举。成功枚举之后,才能调用相关接口进行数据通信。
8字节的标准请求结构如下:
每个域的解析如下表
对于标准的请求,D6~D5 = 00,USB协议规定了11个标准请求,请求码(bRequest)如下表。
标准请求代码表
实例:
- 请求数据为8个字节HEX:80 06 00 01 00 00 12 00 ==> 获取设备描述符
注:这个阶段的设备地址(address)用的0,当然默认端点(endpoint)也是0。
第一个字节0x80拆分可以得到,这是一个主机发给设备(bit0~bit4)的一个标准(bit5~bit6)的请求命令,请求的结果是要求设备给Host返回(bit7 == 1)。
第二个字节0x06查看表9-4可以得到这是一个GET_DESCRIPTOR,即获取描述符 的请求。
第三四自己传的是0x0100 ,查看描述符表,得知高字节表示描述符类型,01表示设备,02表示配置;低字节表示索引。比如设备有多个配置,那需要读取不同配置的时候就通过低字节。或者一个配置下有多个接口,通过索引选择不同的接口。所以这里高字节的1代表 设备,低字节在本设备没用到。
3.3.1 分配地址
- 数据为HEX:00 05 03 00 00 00 00 00 ==> 主机给设备分配地址
注:这个阶段的设备地址(address)用的0,当然默认端点(endpoint)也是0。
第一个字节0x0,这是一个主机发给设备(bit0~bit4)的一个标准(bit5~bit6)的请求命令,请求的结果是主机和设备发送(bit7 == 0)信息。
第二个字节0x05,从table 9-4可以看到,SET_ADDRESS,是主机给从机设置地址。
第三四个字节合起来是0x03,对照标准的设备请求表,可以知道,这是就是主机给设备分配的设备地址3。
3.4.1 建立阶段的请求分析
- 请求数据为8个字节HEX:80 06 00 01 00 00 12 00 ==> 获取设备描述符的请求
3.5.1 建立阶段的请求分析
- 请求数据为8个字节HEX:80 06 00 02 00 00 09 00 == > 获取配置描述符的请求
第一个字节0x80拆分可以得到,这是一个主机发给设备(bit0~bit4)的一个标准(bit5~bit6)的请求命令,请求的结果是要求设备给Host返回(bit7 == 1)。
第二个字节0x06查看表9-4可以得到这是一个GET_DESCRIPTOR,即获取描述符 的请求。
第三四字节传的是0x0100 ,查看描述符表,得知高字节表示描述符类型,01表示设备,02表示配置;低字节表示索引。比如设备有多个配置,那需要读取不同配置的时候就通过低字节。或者一个配置下有多个接口,通过索引选择不同的接口。所以这里高字节的2代表配置,低字节在本设备没用到。
第四五字节为0x0,这个参数如果为0,则不关心;如果为非零,则表示Langurage ID,每一位都有对应的意义。
设备类描述符+配置描述符+接口描述符+端点描述符+厂商定义的描述符的总字节长度为34个字节
- 请求数据为8个字节HEX:80 06 00 03 00 00 FF 00 ==> 获取字符串描述符的请求
第三四字节传的是0x0300 ,查看9-5描述符表,得知高字节表示描述符类型,01表示设备,02表示配置,3表示字符串;低字节表示索引。比如设备有多个配置,那需要读取不同配置的时候就通过低字节。或者一个配置下有多个接口,通过索引选择不同的接口。所以这里高字节的3表示字符串,低字节为索引0。
第六七字节为0xFF,即代表返回的数据不应该多于255个字节。
请求数据为8个字节HEX:80 06 02 03 09 04 FF 00 ==> 获取字符串描述符的请求,索引值为2
第三四字节传的是0x0302 。所以这里高字节的3表示字符串,低字节为索引2。
第四五字节为0x0409,当这个请求的是字符串描述符时,则表示Langurage ID,0x0409表示美式英语。
第六七字节为0xFF,即代表返回的数据不应该多于255个字节。
- 请求数据为8个字节HEX:80 06 01 03 09 04 FF 00 ==> 获取字符串描述符的请求,索引值为1
- 请求数据为8个字节HEX:00 09 01 00 00 00 00 00 ==> 设置配置描述符的请求
第一个字节0x80拆分可以得到,这是一个主机发给设备(bit0~bit4)的一个标准(bit5~bit6)的请求命令,请求的结果是主机给设备发送信息(bit7 == 0)。
第二个字节0x09查看表9-4可以得到这是一个SET_CONFIGURATION,即设置配置。
第三四字节传的是0x1,查看9-3标准请求表,得知这里1就是配置的值。
第四五字节为0x0,在设置配置里,无意义。
第六七字节为0x0,在设置配置里,无意义。
- 请求数据为8个字节HEX: 21 0A 00 00 00 00 00 00
第一个字节0x21拆分可以得到,这是一个主机发给接口(bit0~bit4)的一个类(bit5~bit6)的特定类请求命令,请求的结果是主机给接口发送类命令(bit7 == 0)。
根据手册:0A表示Set_Idle功能,Set_Idle请求使中断输入管道上的特定报告静默,直到发生新事件或经过指定的时间。
参考:
边栏推荐
- MSP430学习总结(二)——GPIO
- 产品版本号是如何确定的
- STM32-串口常用寄存器和库函数及配置串口步骤
- Maykle Studio - HarmonyOS Application Development First Training
- Diagnostic Log and Trace——dlt的编译和安装
- CMT2380F32模块开发1-硬件
- LAGRANGIAN FLUID SIMULATION WITH CONTINUOUS CONVOLUTIONS
- CMT2380F32模块开发9-可编程计数阵列 PCA例程
- 关于openlayer中swipe位置偏移的问题
- ActiveReports报表分类之页面报表
猜你喜欢
产品如何拟定优化方案?
The working principle and industry application of AI intelligent image recognition
Hard hat recognition algorithm
Maykle Studio - HarmonyOS Application Development First Training
关于接口响应内容的解码
小程序技术原理分析
360°大视野安全帽识别系统-深度学习智能视频分析
Robust 3D Object Detection in Cold Weather Conditions
安全帽识别算法
STM32学习笔记(白话文理解版)—小灯的点亮、闪烁、呼吸
随机推荐
ASP.NET MVC 4中实现action的事务功能
需求文档(PRD)撰写指南
目标检测前言
Diagnostic Log and Trace——为应用程序和上下文设置日志级别的方法
Diagnostic Log and Trace——dlt的编译和安装
目标检测学习目录(持续更新)
KANO模型——确定需求优先级的神器
梅科尔工作室-HarmonyOS应用开发第三次培训
10 个超好用的 DataGrip 快捷键,快加入收藏! | 实用技巧
CNN-based Point Cloud De-Noising
梅科尔工作室-HarmonyOS应用开发第四次培训
CMT2380F32模块开发1-硬件
安全帽识别算法
安全帽识别系统
关于openlayer中swipe位置偏移的问题
使用ActiveReports制作第一张报表
张小龙的微信公开课(2019年)
弱监督语义分割CLIMS(CVPR2022)
【调试记录1】提高MC3172浮点运算能力,IQmath库的获取与导入使用教程
Node-2.垃圾回收机制