NCM 功能描述符
2025-07-08
0
0
1. 描述符概述
NCM功能描述符是强制实现的描述符,用于声明设备支持的NCM特性和能力。它必须位于Header功能描述符之后,其他功能描述符之前或之后均可。
2. 描述符结构(Table 5-2)
偏移量 | 字段名 | 大小 | 值/格式 | 说明 |
---|---|---|---|---|
0 | bFunctionLength | 1 | 6 | 描述符总长度(固定6字节) |
1 | bDescriptorType | 1 | 0x24 | 描述符类型(CS_INTERFACE) |
2 | bDescriptorSubtype | 1 | 0x1A | NCM功能描述符子类型(见表4-4) |
3 | bcdNcmVersion | 2 | 0x0100(小端序) | NCM规范版本号(BCD格式,1.0版) |
5 | bmNetworkCapabilities | 1 | 位图 | 设备能力标志位(1=支持,0=不支持) |
3. 能力位图(bmNetworkCapabilities)详解
位 | 名称 | 能力说明 |
---|---|---|
D7-D6 | 保留 | 必须设为0 |
D5 | 8字节NTB大小支持 | 支持8字节格式的GetNtbInputSize/SetNtbInputSize请求 |
D4 | CRC模式控制 | 支持SetCrcMode/GetCrcMode请求 |
D3 | 数据报大小控制 | 支持SetMaxDatagramSize/GetMaxDatagramSize请求 |
D2 | 封装命令支持 | 支持SendEncapsulatedCommand/GetEncapsulatedResponse请求 |
D1 | MAC地址控制 | 支持GetNetAddress/SetNetAddress请求 |
D0 | 以太网包过滤 | 支持SetEthernetPacketFilter请求(按[USBECM12]定义) |
4. 关键功能说明
版本号(bcdNcmVersion)
- 当前规范版本为1.0(0x0100)
- 小端序存储:实际字节为0x00, 0x01
封装命令支持(D2位)
- 若此位为0,则通信接口的bInterfaceProtocol必须设为00h
- 若为1,可选择FEh(OEM命令)或00h
包过滤功能(D0位)
- 不支持时(D0=0):设备必须将所有包(广播/组播/单播)传递给主机
- 支持时(D0=1):主机可通过SetEthernetPacketFilter控制过滤行为
5. 典型配置示例
// 示例:支持所有标准功能的NCM设备
const uint8_t NcmFunctionalDescriptor[6] = {
0x06, // bFunctionLength
0x24, // bDescriptorType (CS_INTERFACE)
0x1A, // bDescriptorSubtype (NCM)
0x00,0x01, // bcdNcmVersion 1.0 (小端序)
0x3F // bmNetworkCapabilities (D0-D5=1)
};
6. 开发者注意事项
描述符顺序
- 必须保证Header描述符在最前面
- NCM描述符通常紧随其后
能力位声明
- 只声明实际支持的功能
- 不支持的位必须清零
与协议代码的关联
- 若D2=0,bInterfaceProtocol必须为00h
- 若使用FEh(OEM命令),必须同时实现Command Set描述符
版本兼容性
- 当前所有设备应使用0x0100版本