USB设备请求和描述符整理
### USB设备请求与描述符详解 #### 一、标准USB设备请求 USB设备请求是USB通信中的基础,用于实现主机与设备之间的基本交互。本文将详细介绍标准USB设备请求及其相关描述符。 ### 1. GetStatus 请求 **请求格式:** - **bmRequestType:** 80H (方向为设备到主机,种类为标准,接收者为设备/接口/端点) - **bRequest:** 00H - **wValue:** 0000H - **wIndex:** 取决于状态请求的对象(设备状态: 00H; 接口号: 端点描述符的bInterfaceNumber; 端点状态: 端点描述符的bEndpointAddress) - **wLength:** 0002H (对于设备和端点状态) **数据阶段:** - **设备状态:** 返回两个字节,D0表示供电方式(0为总线供电,1为自供电),D1表示是否支持远程唤醒功能(0为禁用,1为启用)。 - **接口状态:** 总是返回两个字节全为0。 - **端点状态:** 返回两个字节,D0表示端点是否停止(0为未停止,1为停止)。 ### 2. ClearFeature 请求 **请求格式:** - **bmRequestType:** 00H (方向为主机到设备,种类为标准,接收者为设备/接口/端点) - **bRequest:** 01H - **wValue:** 特性选择符 - **wIndex:** 取决于状态请求的对象(接口号/端点号) - **wLength:** 0000H **特性选择符:** - **ENDPOINT_HALT:** 0 (对于端点停止特性) - **DEVICE_REMOTE_WAKEUP:** 1 (对于USB远程唤醒功能) - **TEST_MODE:** 2 (用于USB设备的测试模式) ### 3. SetFeature 请求 **请求格式:** - **bmRequestType:** 00H (方向为主机到设备,种类为标准,接收者为设备/接口/端点) - **bRequest:** 03H - **wValue:** 特性选择符 - **wIndex:** 取决于状态请求的对象(接口号/端点号) - **wLength:** 0000H **特性选择符:** - **TEST_MODE:** 当wValue字段值为TEST_MODE时,wIndex字段的高位字节指明设备测试选择符的值,低位必须为0。 - **Test_J:** 01H - **Test_K:** 02H - **Test_SE0_NAK:** 03H - **Test_Packet:** 04H - **Test_Force_Enable:** 05H ### 4. SetAddress 请求 **请求格式:** - **bmRequestType:** 00H (方向为主机到设备,种类为标准,接收者为设备) - **bRequest:** 05H - **wValue:** 设备地址 - **wIndex:** 0 - **wLength:** 0000H **设备地址:** wValue指明新的设备地址,取值范围为0~127,其中0为缺省地址。 ### 5. GetDescriptor 请求 **请求格式:** - **bmRequestType:** 80H (方向为设备到主机,种类为标准,接收者为设备) - **bRequest:** 06H - **wValue:** 类型和索引 - **wIndex:** 语言ID或0 - **wLength:** 描述符长度 **描述符类型:** - **Device Descriptor:** 提供关于设备的基本信息,如USB版本、设备类别、制造商等。 - **Configuration Descriptor:** 描述设备的一个配置选项,包含多个接口描述符。 - **Interface Descriptor:** 描述配置内的一个接口,可以有多个端点描述符。 - **Endpoint Descriptor:** 描述接口内数据传输的具体端点。 **描述符索引:** - **Device Descriptor:** 索引值为0 - **Configuration Descriptor:** 索引值从1开始 - **Interface Descriptor:** 对于特定配置,索引值从0开始 - **Endpoint Descriptor:** 对于特定接口,索引值从0开始 ### 6. SetDescriptor 请求 **请求格式:** - **bmRequestType:** 00H (方向为主机到设备,种类为标准,接收者为设备) - **bRequest:** 07H - **wValue:** 类型和索引 - **wIndex:** 0 - **wLength:** 描述符长度 此请求用于更新现有的描述符或添加新的描述符。 ### 7. GetConfiguration 请求 **请求格式:** - **bmRequestType:** 80H (方向为设备到主机,种类为标准,接收者为设备) - **bRequest:** 08H - **wValue:** 0000H - **wIndex:** 0000H - **wLength:** 0001H 此请求用于读取USB设备当前的配置值。 ### 8. SetConfiguration 请求 **请求格式:** - **bmRequestType:** 00H (方向为主机到设备,种类为标准,接收者为设备) - **bRequest:** 09H - **wValue:** 配置值 - **wIndex:** 0000H - **wLength:** 0000H 此请求用于为USB设备选择一个合适的配置。 ### 9. GetInterface 请求 **请求格式:** - **bmRequestType:** 81H (方向为设备到主机,种类为标准,接收者为接口) - **bRequest:** 0AH - **wValue:** 0000H - **wIndex:** 接口号 - **wLength:** 0001H 此请求用于读取指定接口的当前可替换设置值。 ### 10. SetInterface 请求 **请求格式:** - **bmRequestType:** 00H (方向为主机到设备,种类为标准,接收者为接口) - **bRequest:** 0BH - **wValue:** 替换设置值 - **wIndex:** 接口号 - **wLength:** 0000H 此请求用于为指定接口选择一个合适的可替换设置。 ### 11. SynchFrame 请求 **请求格式:** - **bmRequestType:** 82H (方向为设备到主机,种类为标准,接收者为端点) - **bRequest:** 0CH - **wValue:** 0000H - **wIndex:** 端口号 - **wLength:** 0002H 此请求用于读取同步端点所指定的帧序号。 ### 总结 以上介绍了USB设备请求和描述符的基础知识,包括标准设备请求(GetStatus、ClearFeature、SetFeature、SetAddress、GetDescriptor、SetDescriptor、GetConfiguration、SetConfiguration、GetInterface、SetInterface 和 SynchFrame)以及主要描述符(Device、Configuration、Interface、Endpoint)的相关内容。通过这些请求和描述符,主机能够控制USB设备,并获取必要的信息以正确地使用设备。理解这些基础知识对于开发USB设备驱动程序和应用程序至关重要。
剩余7页未读,继续阅读
- 粉丝: 5
- 资源: 76
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 深度学习配置,用于导入conda中
- 民宿预定管理系统20241105122503
- 企业平台生态嵌入数据集(2000-2023年).xlsx
- 离线OCR(此软件解压后双击即可运行, 免费)
- 公开整理-上市公司员工学历及工资数据(1999-2023年).xlsx
- 公开整理-上市公司员工学历及工资数据集(1999-2023年).dta
- GDAL-3.4.3-cp38-cp38-win-amd64.whl(GDAL轮子-免编译pip直接装,下载即用)
- 【源码+数据库+运行指导视频】基于SSM框架+mysql实现的影城票务管理系统
- 【Unity中世纪风格幻想武器模型】Medieval Weapons - Fantasy Poly Pack
- 基于Java实现WIFI探针的商业大数据分析技术