NCM 命令集功能描述符
2025-07-08
0
0
1. 描述符作用
当NCM通信接口的bInterfaceProtocol
设置为FEh
(外部协议)时,必须提供命令集功能描述符(Command Set Functional Descriptor)。
它用于:
- 声明设备支持的外部命令协议规范
- 通过GUID唯一标识命令集格式(如AT命令、厂商自定义协议等)
- 为
SendEncapsulatedCommand
/GetEncapsulatedResponse
提供解析依据
2. 触发条件
bInterfaceProtocol 值 |
是否需要此描述符 |
---|---|
FEh | 必须提供 |
其他值(00h等) | 禁止出现 |
3. 描述符结构(基于[USBWMC11] 8.1.2.2)
偏移量 | 字段名 | 大小 | 说明 |
---|---|---|---|
0 | bLength | 1 | 描述符长度(固定为24字节) |
1 | bDescriptorType | 1 | 0x24(CS_INTERFACE) |
2 | bDescriptorSubtype | 1 | 0x21(Command Set功能描述符) |
3 | bGuidDescriptorType | 1 | GUID描述符类型(通常为0x01) |
4 | bGuidCode | 16 | 16字节GUID,标识外部命令规范(小端序) |
20 | bVendorSpecificCode | 4 | 厂商特定扩展码(可选) |
4. GUID的作用
- 全局唯一性:由外部规范定义(如IEEE/厂商注册)
- 典型示例:
{4D36E978-E325-11CE-BFC1-08002BE10318}
:标准AT命令集- 厂商可自定义GUID实现私有协议
5. 实现要求
6. 示例配置(AT命令集)
const uint8_t CmdSetDescriptor[24] = {
0x18, // bLength
0x24, // bDescriptorType
0x21, // bDescriptorSubtype
0x01, // bGuidDescriptorType
// GUID {4D36E978-E325-11CE-BFC1-08002BE10318}
0x78,0xE9,0x36,0x4D, // Data1
0x25,0xE3,0xCE,0x11, // Data2
0xBF,0xC1,0x08,0x00, // Data3
0x2B,0xE1,0x03,0x18, // Data4
0x00,0x00,0x00,0x00 // bVendorSpecificCode
};
7. 主机行为规则
- 协议为FEh时:
- 必须解析此描述符获取GUID
- 根据GUID加载对应的命令解析模块
- 协议非FEh时:
- 忽略任何Command Set描述符
- 不尝试发送封装命令
8. 开发者注意事项
GUID注册:
- 使用公共规范(如AT命令)时需准确复制GUID
- 自定义协议需向厂商申请唯一GUID
兼容性检查:
if (bInterfaceProtocol == 0xFE) { assert(存在CommandSet描述符); } else { assert(无CommandSet描述符); }
与NCM功能描述符关联:
bmNetworkCapabilities
的D2位必须为1(支持封装命令)
此描述符是NCM设备实现厂商自定义控制协议的关键,需严格遵循[USBWMC11]的格式要求。