CDC USB终端功能描述符
2025-07-10
0
0
USB Terminal Functional Descriptor(USB终端功能描述符)USB终端功能描述符用于描述设备内部单元与USB接口的关系,以及接口间的连接和协议封装情况,便于主机识别和管理复杂的设备结构。
USB终端功能描述符用于指示一个单元(Unit)与一个USB接口之间的关系,并定义设备与主机之间接口的特定参数。它只能出现在接口描述符的类特定部分。
描述符结构(Table 35)
偏移 | 字段名 | 大小 | 值/类型 | 描述 |
---|---|---|---|---|
0 | bFunctionLength | 1 | 数值 | 此功能描述符的字节数 |
1 | bDescriptorType | 1 | 常量 | CS_INTERFACE 描述符类型 |
2 | bDescriptorSubtype | 1 | 常量 | USB终端功能描述符子类型 |
3 | bEntityId | 1 | 常量 | 唯一标识该终端的常量ID |
4 | bInInterfaceNo | 1 | 数值 | 关联USB接口的输入接口号 |
5 | bOutInterfaceNo | 1 | 数值 | 关联USB接口的输出接口号 |
6 | bmOptions | 1 | 位图 | D7..D1: 保留,置零<br>D0: 协议封装使用<br>0-未使用封装<br>1-使用封装 |
7 | bChildId0 | 1 | 常量 | 连接到此终端的下级终端或单元的第一个ID |
… | … | … | … | … |
6+N | bChildIdN-1 | 1 | 常量 | 连接到此终端的下级终端或单元的第N个ID |
示例(C结构体及二进制示例)
C结构体定义
typedef struct _USB_CDC_USB_TERMINAL_DESCRIPTOR {
uint8_t bFunctionLength; // 描述符长度
uint8_t bDescriptorType; // CS_INTERFACE (0x24)
uint8_t bDescriptorSubtype; // USB Terminal subtype (0x09)
uint8_t bEntityId; // 终端唯一ID
uint8_t bInInterfaceNo; // 输入接口号
uint8_t bOutInterfaceNo; // 输出接口号
uint8_t bmOptions; // 选项位图
uint8_t bChildId[1]; // 下级终端/单元ID(可变长度)
} USB_CDC_USB_TERMINAL_DESCRIPTOR;
示例数据(假设终端ID为1,输入接口号为2,输出接口号为3,未使用协议封装,有两个下级终端ID为4和5)
字节序号 | 值(十六进制) | 含义 |
---|---|---|
0 | 0x09 | bFunctionLength = 9 |
1 | 0x24 | bDescriptorType = CS_INTERFACE |
2 | 0x09 | bDescriptorSubtype = USB Terminal |
3 | 0x01 | bEntityId = 1 |
4 | 0x02 | bInInterfaceNo = 2 |
5 | 0x03 | bOutInterfaceNo = 3 |
6 | 0x00 | bmOptions = 0(未使用封装) |
7 | 0x04 | bChildId0 = 4 |
8 | 0x05 | bChildId1 = 5 |
二进制示例:
09 24 09 01 02 03 00 04 05
说明
- bFunctionLength:描述符总长度,=7+下级终端数量
- bDescriptorType:固定为0x24(CS_INTERFACE)
- bDescriptorSubtype:USB终端功能描述符为0x09
- bEntityId:终端唯一ID
- bInInterfaceNo/bOutInterfaceNo:输入/输出接口号
- bmOptions:D0=1表示使用协议封装,0表示未使用
- bChildIdN:下级终端/单元ID(可有多个)