NCM 命令集详情功能描述符
2025-07-08
0
0
1. 描述符作用
这是可选的描述符,用于对Command Set Functional Descriptor
进行补充说明,提供:
- 外部命令协议的详细实现参数
- 厂商特定的扩展配置信息
- 协议版本兼容性说明
2. 存在条件
前提条件 | 是否允许出现 |
---|---|
存在Command Set Functional Descriptor |
允许(可选) |
不存在Command Set Functional Descriptor |
严格禁止 |
3. 描述符结构(基于[USBWMC11] 8.1.2.3)
偏移量 | 字段名 | 大小 | 说明 |
---|---|---|---|
0 | bLength | 1 | 描述符长度(可变,最小5字节) |
1 | bDescriptorType | 1 | 0x24(CS_INTERFACE) |
2 | bDescriptorSubtype | 1 | 0x22(Command Set Detail子类型) |
3 | bGuidDescriptorType | 1 | 详情类型(由GUID规范定义) |
4 | bDetailData[] | N | 可变长的详情数据(格式由GUID决定) |
4. 典型应用场景
- 协议版本声明
[0x05, 0x24, 0x22, 0x02, 0x01] // 声明协议版本v1.0
- 厂商扩展配置
[0x07, 0x24, 0x22, 0x80, 0x01, 0x00, 0xFF] // 自定义超时参数
5. 实现规则
顺序强制要求
- 必须紧跟在对应的
Command Set Functional Descriptor
之后 - 允许多个Detail描述符串联
- 必须紧跟在对应的
长度灵活性
- 最小长度5字节(仅头部)
- 最大长度受USB描述符总长度限制
主机处理逻辑
def handle_descriptors(): if not has_command_set_descriptor: ignore_all_detail_descriptors() else: parse_details_based_on_guid()
6. 开发者注意事项
一致性检查
- 在设备固件中需验证:
if (detail_descriptor_exists && !command_set_descriptor_exists) { trigger_error(); }
- 在设备固件中需验证:
与GUID的关联
bGuidDescriptorType
必须与主Command Set描述符的GUID配套使用- 自定义类型需在厂商文档中明确说明
典型配置示例
// AT命令集详情示例 const uint8_t AT_DetailDesc[] = { 0x08, // bLength 0x24, // bDescriptorType 0x22, // bDescriptorSubtype 0x02, // bGuidDescriptorType (版本类型) 0x01, 0x01, 0x00, 0x00 // v1.1.0.0 };
7. 特殊限制
- 禁止单独出现:必须依附于主Command Set描述符
- 无默认解析规则:内容格式完全由GUID对应的规范定义
- 主机可忽略:即使存在,主机也可能不处理(取决于GUID支持情况)
此描述符为NCM设备提供了深度协议定制能力,但需要厂商与主机驱动开发者预先约定数据格式。