4.3 接口描述符
接口描述符定义了 USB 设备支持的“功能”(如音频输入、存储、HID 等)。一个配置描述符可包含多个接口描述符,每个接口描述符代表设备的一种独立功能。接口的特性通过端点描述符进一步描述。
USB 接口描述符的结构
偏移量 | 域 | 大小 | 值 | 描述 |
---|---|---|---|---|
0 | bLength |
1 | 数字 | 描述符的字节数(固定为 0x09 )。 |
1 | bDescriptorType |
1 | 常量 | 描述符类型(此处为 0x04 ,表示接口描述符)。 |
2 | bInterfaceNumber |
1 | 数字 | 接口编号(从 0 开始,作为配置中接口数组的索引)。 |
3 | bAlternateSetting |
1 | 数字 | 可选设置的索引值(用于切换同一接口的不同配置)。 |
4 | bNumEndpoints |
1 | 数字 | 此接口使用的端点数量(不包括端点 0 )。若为 0 ,则仅使用控制端点。 |
5 | bInterfaceClass |
1 | 类 | 接口所属的类别(见下表 USB 接口类别)。 |
6 | bInterfaceSubClass |
1 | 子类 | 子类代码,依赖 bInterfaceClass 的值。 |
7 | bInterfaceProtocol |
1 | 协议 | 协议代码,依赖 bInterfaceClass 和 bInterfaceSubClass 。 |
8 | iInterface |
1 | 索引 | 描述此接口的字符串描述符索引(若为 0 表示无描述)。 |
USB 接口类别(bInterfaceClass
常见值)
值(十六进制) | 类别 | 典型设备 |
---|---|---|
0x01 |
音频类 | 麦克风、扬声器 |
0x03 |
HID(人机接口设备) | 键盘、鼠标 |
0x08 |
大容量存储类 | U盘、移动硬盘 |
0x09 |
集线器类 | USB Hub |
0x0E |
视频类 | 摄像头 |
0xE0 |
无线控制器类 | 蓝牙适配器 |
0xFF |
厂商自定义类 | 特定厂商设备 |
示例:一个 HID 设备的接口描述符
字段 | 值(十六进制) | 说明 |
---|---|---|
bLength |
0x09 |
描述符长度为 9 字节。 |
bDescriptorType |
0x04 |
接口描述符类型。 |
bInterfaceNumber |
0x00 |
第一个接口(索引 0)。 |
bAlternateSetting |
0x00 |
无备用配置。 |
bNumEndpoints |
0x01 |
使用 1 个端点(非端点 0)。 |
bInterfaceClass |
0x03 |
HID 设备(如键盘)。 |
bInterfaceSubClass |
0x01 |
子类:Boot Interface(键盘)。 |
bInterfaceProtocol |
0x01 |
协议:键盘。 |
iInterface |
0x00 |
无描述字符串。 |
关键说明:
端点数量(
bNumEndpoints
):- 若为
0
,表示仅通过控制端点(端点0
)通信。 - 例如,HID 设备可能只需
1
个中断端点(IN
方向)用于上报按键数据。
- 若为
备用配置(
bAlternateSetting
):- 同一接口可通过不同配置切换工作模式(如音频设备的采样率切换)。
协议与子类:
- 例如
bInterfaceClass=0x03
(HID)时:bInterfaceSubClass=0x01
表示支持 BIOS 兼容的 Boot 模式(如键盘无需驱动)。
- 例如
字符串描述符(
iInterface
):- 可选字段,用于提供用户友好的接口名称(如
"Audio Control Interface"
)。
- 可选字段,用于提供用户友好的接口名称(如