CDC 协议单元功能描述符
2025-07-10
0
0
Protocol Unit Functional Descriptor(协议单元功能描述符)协议单元功能描述符用于描述设备内部协议栈的层次结构、协议类型及其连接关系,便于主机识别和管理复杂的通信协议栈。
协议单元功能描述符用于标识协议栈中某一层的具体协议实例(bProtocol),并通过bEntityId唯一标识该单元。它只能出现在接口描述符的类特定部分。
- 通信协议栈由多个通信功能(协议)按层次结构组合而成,每层为上一层提供抽象功能。
- 每层可有一组协议参数(可配置、可查询、可清除)。
- 该描述符用于描述协议栈中某一协议单元的结构和连接关系。
描述符结构(Table 37)
偏移 | 字段名 | 大小 | 值/类型 | 描述 |
---|---|---|---|---|
0 | bFunctionLength | 1 | 数值 | 此功能描述符的字节数 |
1 | bDescriptorType | 1 | 常量 | CS_INTERFACE 描述符类型 |
2 | bDescriptorSubtype | 1 | 常量 | 协议单元功能描述符子类型 |
3 | bEntityId | 1 | 常量 | 唯一标识该单元的ID |
4 | bProtocol | 1 | 协议码 | 协议代码,见Table 19(如00h=无协议,30h=ISDN BRI等) |
5 | bChildId0 | 1 | 常量 | 连接到此单元的下级终端或单元的第一个ID |
… | … | … | … | … |
4+N | bChildIdN-1 | 1 | 常量 | 连接到此单元的下级终端或单元的第N个ID |
示例(C结构体及二进制示例)
C结构体定义
typedef struct _USB_CDC_PROTOCOL_UNIT_DESCRIPTOR {
uint8_t bFunctionLength; // 描述符长度
uint8_t bDescriptorType; // CS_INTERFACE (0x24)
uint8_t bDescriptorSubtype; // Protocol Unit subtype (0x0B)
uint8_t bEntityId; // 单元唯一ID
uint8_t bProtocol; // 协议代码
uint8_t bChildId[1]; // 下级终端/单元ID(可变长度)
} USB_CDC_PROTOCOL_UNIT_DESCRIPTOR;
示例数据(假设单元ID为1,协议为ISDN BRI(0x30),有两个下级单元ID为2和3)
字节序号 | 值(十六进制) | 含义 |
---|---|---|
0 | 0x07 | bFunctionLength = 7 |
1 | 0x24 | bDescriptorType = CS_INTERFACE |
2 | 0x0B | bDescriptorSubtype = Protocol Unit |
3 | 0x01 | bEntityId = 1 |
4 | 0x30 | bProtocol = 0x30 (ISDN BRI) |
5 | 0x02 | bChildId0 = 2 |
6 | 0x03 | bChildId1 = 3 |
二进制示例:
07 24 0B 01 30 02 03
说明
- bFunctionLength:描述符总长度,=5+下级单元数量
- bDescriptorType:固定为0x24(CS_INTERFACE)
- bDescriptorSubtype:协议单元功能描述符为0x0B
- bEntityId:单元唯一ID
- bProtocol:协议代码(见Table 19)
- bChildIdN:下级终端/单元ID(可有多个)