USB CDC
+ -

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(可有多个)

0 篇笔记 写笔记

关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!