【USB笔记】 标准请求 获取描述符Get Descriptor

USB笔记 标准请求 获取描述符 Get Descriptor

格式

bmRequestTypebRequestwValuewIndexwLengthData
10000000BGET_DESCRIPTORDescriptor Type and Descriptor IndexZero or Language IDDescriptor LengthDescriptor

功能

主机用于请求一个指定的描述符。如果描述符存在,则这个请求返回指定的描述符。

bmRequestType

bmRequestType10000000B
  bmRequestType.Recipient0b00000(Device)
  bmRequestType.Type0b00(Standard)
  bmRequestType.Direction0b1(Device-to-Host)

接收端:设备(Device)

类型:标准(Standard)

方向:设备到主机(Device-to-Host)

bRequest

GET_DESCRIPTOR : 0x06

wValue

高字节:描述符类型。

低字节:描述符索引。

该字段在高字节中指定描述符类型,在低字节中指定描述符索引。当一个设备中实现了多个相同类型的描述符时,描述符索引用于选择特定的描述符(仅适用于配置configuration和字符串string描述符)。例如,一个设备可以实现多个配置描述符。对于其他可以通过GetDescriptor()请求的标准描述符,描述符索引应该设置为0。描述符索引的取值范围为从0到比设备实现的该类型描述符(不包括字符串描述符)的数量少1。

下面是一些标准描述符类型的值:

Descriptor TypesValue
DEVICE1
CONFIGURATION2
STRING3
INTERFACE4
ENDPOINT5
DEVICE_QUALIFIER6
OTHER_SPEED_CONFIGURATION7
INTERFACE_POWER8
OTG9
DEBUG10
INTERFACE_ASSOCIATION11
SECURITY12
KEY13
ENCRYPTION TYPE14
BOS15
DEVICE CAPABILITY16
WIRELESS_ENDPOINT_COMPANION17
SUPERSPEED_USB_ENDPOINT_COMPANION48
SUPERSPEEDPLUS_ISOCHRONOUS_ENDPOINT_COMPANION49

wIndex

对于字符串描述符,该字段为语言ID(Language ID)。

对于其他描述符,该字段为0x0000。

wLength

wLength字段指定要返回的字节数。如果描述符的长度大于wLength字段,则最多只返回wLength的字节数。如果描述符的长度短于wLength字段,则返回整个描述符,也就是实际的长度。

Data

数据阶段(Data stage)的数据包(Data packet):请求的描述符。

说明

对设备的标准请求支持以下几种类型的描述符:device,device_qualifier,configuration,other_speed_configuration,BOS(Binary device Object Store)和string描述符。

high-speed设备支持设备限定描述符(device_qualifier descriptor),以返回设备的非运行速度的信息(包括默认端点的wMaxPacketSize和其他速度的配置数)。

其他速度配置描述符(other_speed_configuration descriptor)返回的信息与配置描述符(configuration descriptor)的结构相同,但如果设备以其他速度运行,则返回配置信息。对配置描述符(configuration descriptor)的请求会在一次请求中返回配置描述符(configuration descriptor)、所有接口描述符(interface descriptor)、端点描述符(endpoint descriptor)和端点伙伴描述符(endpoint companion descriptor)(以Gen X speed运行时)。第一个接口描述符(interface descriptor)跟随配置描述符(configuration descriptor)。第一个接口的端点描述符跟随第一个接口描述符。此外,增强型超高速设备(Enhanced SuperSpeed devices)应为该接口中的每个端点返回端点伙伴描述符(endpoint companion descriptor),以返回增强型超高速设备所需的端点功能,这些功能将不适合现有的端点描述符占用范围内。如果有其他接口,它们的接口描述符、端点描述符和端点伙伴描述符(当以Gen X speed运行时)跟随第一个接口的端点和端点同伴(当以Gen X speed运行时)描述符。

另外通过BOS描述符定义了一个灵活且可扩展的框架,用于描述和添加设备级功能到USB标准规范中。BOS描述符定义了一个根描述符,它与配置描述符类似,是访问一系列相关描述符的基本描述符。主机可以读取BOS描述符并从wTotalLength字段中了解整个设备级描述符集的大小,也可以读入整个BOS描述符集的设备能力。主机无法读取单个设备功能描述符。整个集合只能通过使用GetDescriptor()请求,读取BOS描述符并使用wTotalLength字段中报告的长度来访问。

特定类或特定厂商的描述符遵循它们扩展或修改的标准描述符。

所有设备必须提供一个设备描述符和至少一个配置描述符。如果设备不支持所请求的描述符,它将以请求错误来响应,返回STALL。

支持的状态

默认状态(Default state),地址状态(Address state),配置状态(Configured state)。

当设备处于这些状态时,这是一个有效的请求。

示例

1、device descriptor
设备描述符的获取过程如下:
1
setup data:
4-1

2、device_qualifier descriptor
设备限定描述符的获取过程如下:
2
setup data:
5-1

3、configuration descriptor
配置描述符Configuration Descriptor的获取过程如下:
2
setup data:
6

4、other_speed_configuration descriptor
其他速度配置描述符Other_Speed_Configuration Descriptor的获取过程如下:
2
setup data:
6

5、BOS descriptor
BOS描述符(BOS Descriptor)的获取过程如下:
2
setup data:
6

6、string descriptor
字符串描述符String Descriptor的获取过程如下:
3
setup data:
1.String Descriptor Zero, Specifying Languages Supported by the Device
8
2.UNICODE String Descriptor
9
7.不支持的描述符
在这里插入图片描述

[参考资料]

Universal Serial Bus Specification Revision 2.0

Universal Serial Bus 3.1 Specification

Universal Serial Bus 3.2 Specification

USB Complete, 5th Edition


本文链接:https://blog.csdn.net/u012028275/article/details/111826105

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值