五、ECM网卡
以太网控制模型(Ethernet Networking Control Model) 用于在设备和主机之间传输以太网数据包。
在操作系统看来,CDC ECM设备就是一个虚拟以太网卡,包含标准网卡需要的MAC地址和IP地址。
CDC ECM设备通常是一个以太网卡,用于连接LAN或者是WLAN。ECM是标准的,隶属USB协议,当然是usb封装的TCP协议,数据接口则用于在USB总线上交换USB数据包,这些USB数以的包封装了完整的以太网包。
8910平台支持ECM功能,默认处于关闭状态。需要发送AT+SETUSB=2设置USB网卡的工作模式。命令发送完成之后可以断电保持,重启有效。
正常情况下只要将模块接入运行linux系统,电脑就会识别出来一块网卡。windows系统上默认不支持ECM网卡,需要额外安装驱动才能使用。
5.1、ECM接口关联描述符(8字节)
字段 | 长度(位) | 偏移量(位) | 十六进制值 | 说明 |
---|---|---|---|---|
bLength | 8 | 72 | 0x08 | 描述符大小为8字节 |
bDescriptorType | 8 | 80 | 0x0B | 接口类型:INTERFACE_ASSOCIATION |
bFirstInterface | 8 | 88 | 0x00 | 接口关联的第一个接口号是0 |
bInterfaceCount | 8 | 96 | 0x02 | 接口关联的连续接口数为2 |
bFunctionClass | 8 | 104 | 0x02 | 接口属于通信设备/接口类 |
bFunctionSubClass | 8 | 112 | 0x06 | 接口属于以太网网络控制模型子类 |
bFunctionProtocol | 8 | 120 | 0x00 | 接口使用不需要特定于类的协议 |
iFunction | 8 | 128 | 0x03 | 接口字符串描述符索引为3 |
5.2、控制接口
5.2.1、ECM控制接口描述符(9字节)
字段 | 长度(位) | 偏移量(位) | 十六进制值 | 说明 |
---|---|---|---|---|
bLength | 8 | 136 | 0x09 | 描述符大小为9字节 |
bDescriptorType | 8 | 144 | 0x04 | 接口描述符类型 |
bInterfaceNumber | 8 | 152 | 0x00 | 此接口号的索引为0。 |
bAlternateSetting | 8 | 160 | 0x00 | 用于选择此接口的备用设置的值为0 |
bNumEndpoints | 8 | 168 | 0x01 | 此接口使用的端点数为1(不包括端点0) |
bInterfaceClass | 8 | 176 | 0x02 | 接口实现通信设备/接口类 |
bInterfaceSubClass | 8 | 184 | 0x06 | 接口实现以太网组网控制模型子类 |
bInterfaceProtocol | 8 | 192 | 0x00 | 接口使用不需要特定于类的协议 |
iInterface | 8 | 200 | 0x05 | 接口字符串描述符索引为5 |
5.2.2、ECM CDC Header功能描述符(5字节)
Header功能描述符表示功能描述符的开始,其他紧跟的内容就是此设备的功能描述符的内容。bcdCDC表示的是CDC的版本。
字段 | 长度(位) | 偏移量(位) | 十六进制值 | 说明 |
---|---|---|---|---|
bLength | 8 | 208 | 0x05 | 描述符的大小,以字节为单位 |
bDescriptorType | 8 | 216 | 0x24 | 描述符类型 |
bDescriptorSubType | 8 | 224 | 0x00 | 描述符子类型 |
bcdCDC | 16 | 232 | 0x0110 | USB通信类定义通信规范1.10版 |
5.2.3、ECM CDC Union功能描述符(5字节)
Union描述符就是用来告诉主机端,哪些接口是联合在一起的,对应着一个功能,这个功能需要主机装载对应的驱动来实现,因此,功能与驱动是一对一的关系。这里bControlInterface值为0,则表示接口0为控制接口,bSubBoardinateInterface0值为1,表示接口1为控制接口0的下级接口,即数据接口。在CDC标准中,控制接口是必须的,而数据接口是可选的,因此,数据接口为控制接口的附属。
字段 | 长度(位) | 偏移量(位) | 十六进制值 | 说明 |
---|---|---|---|---|
bLength | 8 | 248 | 0x05 | 描述符的大小,以字节为单位 |
bDescriptorType | 8 | 256 | 0x24 | 描述符类型 |
bDescriptorSubType | 8 | 264 | 0x06 | 描述符子类型 |
bControlInterface | 8 | 272 | 0x00 | 通信或数据类接口的接口号 |
bSubordinateInterface0 | 8 | 280 | 0x01 | 下级接口的接口号 |
5.2.4、ECM CDC ethernet功能描述符(13字节)
字段 | 长度(位) | 偏移量(位) | 十六进制值 | 说明 |
---|---|---|---|---|
bLength | 8 | 288 | 0x0D | 描述符的大小,以字节为单位 |
bDescriptorType | 8 | 296 | 0x24 | 描述符类型:CS_INTERFACE |
bDescriptorSubType | 8 | 304 | 0x0F | 功能描述符子类型 |
iMACAddress | 8 | 312 | 0x06 | 字符串描述符索引 |
bmEthernetStatistics | 32 | 296 | 0x00060F24 | Bit 0: XMIT_OK 0 Bit 1: RVC_OK 0 Bit 2: XMIT_ERROR 0 Bit 3: RCV_ERROR 0 Bit 4: RCV_NO_BUFFER 0 Bit 5: DIRECTED_BYTES_XMIT 0 Bit 6: DIRECTED_FRAMES_XMIT 0 Bit 7: MULTICAST_BYTES_XMIT 0 Bit 8: MULTICAST_FRAMES_XMIT 0 Bit 9: BROADCAST_BYTES_XMIT 0 |
wMaxSegmentSize | 16 | 352 | 0x05EA | 以太网设备能够支持的最大段大小 |
wNumberMCFilters | 16 | 368 | 0x0000 | 多播筛选器位图 |
bNumberPowerFilters | 8 | 384 | 0x00 | 包含可用于唤醒主机的模式筛选器数 |
5.2.5、ECM通知端点描述符(7字节)
字段 | 长度(位) | 偏移量(位) | 十六进制值 | 说明 |
---|---|---|---|---|
bLength | 8 | 392 | 0x07 | 描述符大小为7字节 |
bDescriptorType | 8 | 400 | 0x05 | 端点描述符类型 |
bEndpointAddress | 8 | 408 | 0x81 | 这是端点号为1的输入端点 |
bmAttributes | 8 | 416 | 0x03 | 类型-传输:中断 低功耗:无 Pkt大小调整:无 |
wMaxPacketSize | 16 | 424 | 0x0010 | 此终结点的最大数据包大小为16字节。如果是高速,则每帧增加0个事务 |
bInterval | 8 | 440 | 0x20 | 轮询间隔值为每32帧。高速未定义 |
5.3、数据接口
5.3.1、ECM数据接口描述符alt0(9字节)
字段 | 长度(位) | 偏移量(位) | 十六进制值 | 说明 |
---|---|---|---|---|
bLength | 8 | 448 | 0x09 | 描述符大小为9字节 |
bDescriptorType | 8 | 456 | 0x04 | 接口描述符类型 |
bAlternateSetting | 8 | 464 | 0x01 | 此接口号为1。 |
bAlternateSetting | 8 | 472 | 0x00 | 用于选择此接口的备用设置的值为0 |
bNumEndpoints | 8 | 480 | 0x00 | 此接口使用的端点数为0(不包括端点0) |
bInterfaceClass | 8 | 488 | 0x0A | 接口实现数据接口类 |
bInterfaceProtocol | 8 | 504 | 0x00 | 接口使用不需要特定于类的协议 |
bInterfaceSubClass | 8 | 496 | 0x00 | 子类编码为0 |
iInterface | 8 | 512 | 0x00 | 接口字符串描述符索引为0 |
5.3.2、ECM数据接口描述符alt1(9字节)
字段 | 长度(位) | 偏移量(位) | 十六进制值 | 说明 |
---|---|---|---|---|
bLength | 8 | 520 | 0x09 | 描述符大小为9字节 |
bDescriptorType | 8 | 528 | 0x04 | 接口描述符类型 |
bAlternateSetting | 8 | 536 | 0x01 | 此接口号为1。 |
bAlternateSetting | 8 | 544 | 0x01 | 用于选择此接口的备用设置的值为1 |
bNumEndpoints | 8 | 552 | 0x02 | 此接口使用的端点数为2(不包括端点0) |
bInterfaceClass | 8 | 560 | 0x0A | 接口实现数据接口类 |
bInterfaceProtocol | 8 | 576 | 0x00 | 接口使用不需要特定于类的协议 |
bInterfaceSubClass | 8 | 568 | 0x00 | 子类编码为0 |
iInterface | 8 | 584 | 0x04 | 接口字符串描述符索引为4 |
5.3.3、ECM数据输入端点描述符(7字节)
字段 | 长度(位) | 偏移量(位) | 十六进制值 | 说明 |
---|---|---|---|---|
bLength | 8 | 592 | 0x07 | 描述符大小为7字节 |
bDescriptorType | 8 | 600 | 0x05 | 端点描述符类型 |
bEndpointAddress | 8 | 608 | 0x82 | 这是端点号为2的IN端点 |
bmAttributes | 8 | 616 | 0x02 | 类型-传输:批量 包大小调整:否 |
wMaxPacketSize | 16 | 624 | 0x0200 | 此终结点的最大数据包大小为512字节。如果是高速,则每帧增加0个事务 |
bInterval | 8 | 640 | 0x00 | 轮询间隔值为每0帧。高速未定义 |
5.3.4、ECM数据输出端点描述符(7字节)
字段 | 长度(位) | 偏移量(位) | 十六进制值 | 说明 |
---|---|---|---|---|
bLength | 8 | 648 | 0x07 | 描述符大小为7字节 |
bDescriptorType | 8 | 656 | 0x05 | 端点描述符类型 |
bEndpointAddress | 8 | 664 | 0x01 | 这是端点号为1的输出端点 |
bmAttributes | 8 | 672 | 0x02 | 类型-传输:批量 包大小调整:否 |
wMaxPacketSize | 16 | 680 | 0x0200 | 此终结点的最大数据包大小为512字节。如果是高速,则每帧增加0个事务 |
bInterval | 8 | 696 | 0x00 | 轮询间隔值为每0帧。 |