NCM通讯类特定消息
2025-07-08
0
0
1. 通信接口(Communications Interface)要求
必须支持以下三类请求:
请求类型 | 规范依据 | 示例请求 |
---|---|---|
标准USB请求 | [USB30] Chapter 9 | GET_DESCRIPTOR , SET_CONFIGURATION , CLEAR_FEATURE |
CDC类特定请求 | [USBCDC12] | SET_LINE_CODING (虽NCM不适用但需实现框架) |
NCM子类特定请求 | 本规范第6章 | SET_NTB_INPUT_SIZE , GET_NTB_PARAMETERS , SET_CRC_MODE |
通知(Notifications)要求:
- 必须通过Interrupt IN端点异步发送
- 包含网络状态变化(如连接/断开)和错误报告
2. 数据接口(Data Interface)限制
严格禁止以下操作:
// 错误示例(主机禁止行为)
usb_control_transfer(
dev,
USB_DIR_OUT|USB_TYPE_CLASS,
0x22, // 假设的类请求
0, 0,
data, len, timeout); // 目标为数据接口
违规后果:
- 设备行为未定义(可能:静默丢弃/返回STALL/系统崩溃)
- 主机驱动应预先验证目标接口类型
3. 请求处理流程(通信接口)
4. 关键实现约束
端点分配策略:
// 正确配置示例 #define COMM_IFACE 0 // 通信接口(控制+中断IN) #define DATA_IFACE 1 // 数据接口(批量IN/OUT) void handle_request(usb_request_t *req) { if (req->wIndex == DATA_IFACE) { // 检测到针对数据接口 usb_stall_ep0(); // 立即终止 return; } // ...正常处理通信接口请求 }
错误恢复机制:
- 主机收到STALL后应:
- 重置通信接口(
SET_INTERFACE
到Alternate Setting 0) - 重新初始化NCM功能描述符
- 切回工作模式(Alternate Setting 1)
- 重置通信接口(
- 主机收到STALL后应:
5. 开发者检查清单
请求过滤:
if ((bmRequestType & USB_RECIPIENT_MASK) == USB_RECIPIENT_INTERFACE) { if (wIndex == data_iface_num) { /* 拒绝数据接口请求 */ } }
通知优先级:
合规性测试:
- 使用USB-IF的USB Command Verifier验证:
- 标准请求响应时间≤50ms
- 类请求参数边界检查
- 使用USB-IF的USB Command Verifier验证:
6. 典型NCM特定请求
// 设置NTB输入大小(Host→Device)
#define SET_NTB_INPUT_SIZE 0x80
#pragma pack(1)
typedef struct {
uint32_t dwNtbInMaxSize;
uint16_t wNtbInMaxDatagrams;
} ntb_input_size_t;
此规范通过严格的接口隔离,确保NCM设备在保持USB通用性的同时,实现高效的网络数据流管理。