字符串描述符(String Descriptor)规定了所支持的语言或者存储文本字符串。部分描述符(例如设备描述符中的最后)含有字符串索引,用于描述相关信息。字符串描述符是可选的,如果不支持字符串描述符,需要将相关的描述符中的字符串索引(例如设备描述符中的最后)设置为0。
本文将展示一下标准的字符串描述符获取过程,包括指定设备支持的语言String Descriptor 0,manufacturer string descriptor,product string descriptor和device’s serial number string descriptor,使用USB分析仪抓包,软件Total Phase Data Center。
首先先看下要展示的设备的设备描述符(Device Descriptor),隐去了VID和PID。这是一个USB2.0设备,该设备支持获取manufacturer string descriptor,product string descriptor和device’s serial number string descriptor。
下面开始展示获取过程:
1.String Descriptor 0
主机端首先先获取指定设备支持的语言的String Descriptor 0(String Descriptor Zero, Specifying Languages Supported by the Device)。
Get Descriptor请求的信息如下:
Get Descriptor Value
bmRequestType 0x80
bmRequestType.Recipient 0b00000(Device)
bmRequestType.Type 0b00(Standard)
bmRequestType.Direction 0b1(Device-to-Host)
bRequest 0x06(Get Descriptor)
wValue 0x0300(String #0) // 获取字符串描述符,索引为0的,即语言的String Descriptor 0
wIndex 0x0000
wLength 0x00ff
获取的完整过程信息:
2.UNICODE String Descriptor
1. manufacturer string descriptor
Get Descriptor请求的信息如下:
Get Descriptor Value
bmRequestType 0x80
bmRequestType.Recipient 0b00000(Device)
bmRequestType.Type 0b00(Standard)
bmRequestType.Direction 0b1(Device-to-Host)
bRequest 0x06(Get Descriptor)
wValue 0x0301(String #1) //获取字符串描述符,索引为1的
wIndex 0x0409
wLength 0x00ff
获取的完整过程信息:
2.product string descriptor
Get Descriptor请求的信息如下:
Get Descriptor Value
bmRequestType 0x80
bmRequestType.Recipient 0b00000(Device)
bmRequestType.Type 0b00(Standard)
bmRequestType.Direction 0b1(Device-to-Host)
bRequest 0x06(Get Descriptor)
wValue 0x0302(String #2)//获取字符串描述符,索引为2的
wIndex 0x0409
wLength 0x00ff
获取的完整过程信息:
3.serial number string descriptor
Get Descriptor请求的信息如下:
Get Descriptor Value
bmRequestType 0x80
bmRequestType.Recipient 0b00000(Device)
bmRequestType.Type 0b00(Standard)
bmRequestType.Direction 0b1(Device-to-Host)
bRequest 0x06(Get Descriptor)
wValue 0x0303(String #3) //获取字符串描述符,索引为3的
wIndex 0x0409
wLength 0x00ff
获取的完整过程信息: