4.5 字符串描述符
字符串描述符用于提供设备、配置或接口的文本信息(如厂商名称、产品序列号等),采用 Unicode 编码。它是可选的,若未提供,其他描述符中的字符串索引字段(如 iManufacturer)应设为 0。
字符串描述符类型
- 语言 ID 描述符  
- 主机首次请求字符串描述符时(索引 
0),设备返回支持的语言列表。 
 - 主机首次请求字符串描述符时(索引 
 - 具体字符串描述符  
- 主机根据语言 ID 请求特定索引的字符串(如产品名、厂商名)。
 
 
1. 语言 ID 描述符结构
| 偏移量 | 域 | 大小 | 值 | 描述 | 
|---|---|---|---|---|
| 0 | bLength | 
1 | 数字 | 描述符总长度(N + 2,N 为语言 ID 数量 × 2)。 | 
| 1 | bDescriptorType | 
1 | 常量 | 描述符类型(固定为 0x03)。 | 
| 2 | wLANGID[0..N] | 
2 | 数字 | 支持的语言 ID 数组(如 0x0409 表示英语)。 | 
示例:
| 字段               | 值(十六进制) | 说明                     |
|--------------------|----------------|--------------------------|
| `bLength`          | `0x04`         | 总长度 4 字节(1 种语言)。|
| `bDescriptorType`  | `0x03`         | 字符串描述符类型。         |
| `wLANGID[0]`       | `0x0409`       | 英语(美国)。             |
2. Unicode 字符串描述符结构
| 偏移量 | 域 | 大小 | 值 | 描述 | 
|---|---|---|---|---|
| 0 | bLength | 
1 | 数字 | 描述符总长度(Unicode 字符串字节数 + 2)。 | 
| 1 | bDescriptorType | 
1 | 常量 | 描述符类型(固定为 0x03)。 | 
| 2 | bString | 
N | Unicode | 字符串内容(每个字符占 2 字节,以 \0 结尾)。 | 
示例:厂商名称 “ABC Corp” 的字符串描述符
| 字段               | 值(十六进制)       | 说明                     |
|--------------------|----------------------|--------------------------|
| `bLength`          | `0x12`               | 总长度 18 字节(8字符×2 + 2)。 |
| `bDescriptorType`  | `0x03`               | 字符串描述符类型。         |
| `bString`          | `0041 0042 0043 0020 0043 006F 0072 0070` | "A B C   C o r p"(Unicode) |
关键说明
获取流程
- 步骤 1:主机请求索引 
0的字符串描述符,获取语言 ID 列表。bmRequestType = 0x80, bRequest = 0x06, wValue = (0x03<<8)|0x00, wIndex = 0x0000 - 步骤 2:主机选择语言(如 
0x0409),请求具体字符串(如索引1的厂商名)。bmRequestType = 0x80, bRequest = 0x06, wValue = (0x03<<8)|0x01, wIndex = 0x0409 
- 步骤 1:主机请求索引 
 常见语言 ID
| 语言 ID(十六进制) | 语言 | 
|---|---|
0x0409 | 
英语(美国) | 
0x0404 | 
中文(繁体) | 
0x0804 | 
中文(简体) | 
- 特殊值  
- 若 
iManufacturer/iProduct等字段为0,表示无对应字符串描述符。 
 - 若 
 
实际应用示例
设备描述符片段
| 字段               | 值(十六进制) | 说明                     |
|--------------------|----------------|--------------------------|
| `iManufacturer`    | `0x01`         | 厂商名索引为 1。          |
| `iProduct`         | `0x02`         | 产品名索引为 2。          |
| `iSerialNumber`    | `0x00`         | 无序列号字符串。          |
主机请求流程
- 获取语言 ID:
wValue = 0x0300→ 返回0x0409(英语)。 - 获取厂商名:
wValue = 0x0301, wIndex = 0x0409→ 返回 “ABC Corp”。 
