USB CDC
通用串行总线(USB)通信设备(Communication devices)的定义由三个类组成:
- 通信设备类(Communication Device Class, CDC):设备级定义,被主机用于识别(确定)含有几种不同类型接口的通信设备;
- 通信接口类(Communication Interface Class):定义了一种通用机制,该机制可被用来使能处于USB总线上的所有类型的通信服务,即USB通信设备的控制功能;
- 数据接口类(Data Interface Class):定义了一种通用机制,当一种数据不符合任何类的要求时,该机制使这种数据传输能通过USB块传输或同步传输类型在USB总线上进行,即通过USB块传输或同步传输类型去实现任何类型的数据传输的机制。
CDC协议定义了一种使得USB总线能够支持任何通信设备的框架,如支持电信设备、多媒体网络设备等。
CDC协议并非试图去重定义已经存在的那些通信设备连接和控制标准,而是去定义了一种确定设备与主机应该使用哪种现有协议的机制。CDC会尽可能的使用已存在的通信数据格式,而只是由USB通过恰当的描述符(descriptor)、接口(interface)和服务请求(request)定义去使这些数据格式能够在USB总线上传输。确切来说,CDC规范描述了一种包含USB接口、数据结构和服务请求的框架,在该框架下种类繁多的通信设备能够被定义和实现。
通常一个CDC类设备由两个子类接口组成:一个通信接口类接口(Communication Interface Class)和0个或多个数据接口类接口(Data Interface Class)。主机主要通过通信接口类对设备进行管理和控制,而通过数据接口类传送数据。对于前面所述的不同CDC类模型,其所对应的接口的端点需求也是不同的,两个接口子类占有不同数量和类型的端点(Endpoints)。
通信接口类接口(Communication Interface )
设备通过通信接口通过定义好的申请(request)和通知(notification)实施设备控制以及可能的呼叫控制。因此通信接口时通信设备必须配置的接口,通信接口类一般需要一个控制端点(Control Endpoint,EP0)和一个可选的中断(Interrupt)端点。为了达到设备控制的目的,通信设备类在配置描述符中必须通过联合功能描述符(Union Functional Descriptor)将通信接口和数据接口组织起来。数据接口类接口(Data Interface Class)
当通信设备需要传输的数据的数据格式不符合任何类的要求时就需要用数据接口来实现。一个通信设备可以包含0个或多个数据接口,数据接口上的数据格式则是主机和设备通过通信接口协商决定。数据接口子类需要一个方向为输入(IN)的块传输或同步传输类型端点和一个方向为输出(OUT)的块传输或同步传输类型端点。USB CDC包含以下种类,关于每个子类的定义,都可以参考Reference
中指定的文档。
Code | Subclass | Reference |
---|---|---|
00h | RESERVED | |
01h | Direct Line Control Model | USBPSTN1.2 |
02h | Abstract Control Model | USBPSTN1.2 |
03h | Telephone Control Model | USBPSTN1.2 |
04h | Multi-Channel Control Model | USBISDN1.2 |
05h | CAPI Control Model | USBISDN1.2 |
06h | Ethernet Networking Control Model | USBECM1.2 |
07h | ATM Networking Control Model | USBATM1.2 |
08h | Wireless Handset Control Model | USBWMC1.1 |
09h | Device Management | USBWMC1.1 |
0Ah | Mobile Direct Line Model | USBWMC1.1 |
0Bh | OBEX | USBWMC1.1 |
0Ch | Ethernet Emulation Model | USBEEM1.0 |
0Dh | Network Control Model | USBNCM1.0 |
0Dh~7Fh | RESERVED(future use) | |
80h~FEh | RESERVED(vendor specific) |
1、USB CDC ACM
CDC-ACM
(Abstract Control Model 抽象控制模型)允许任何通信设备提供串行通信接口(例如发送和接收AT命令的调制解调器设备)。该设备类型是在PSTN(Public Switched Telephone Network)
中定义的。CDC-ACM
驱动程序将USB设备作为虚拟调制解调器或虚拟COM端口暴露给操作系统。驱动程序可以通过ACM(通过不同通道分离数据和AT命令)或通过串行仿真(按原样传递AT命令和作为数据流的一部分)发送数据和AT命令。
2、USB CDC ECM
CDC-ECM
(Ethernet Networking Control Model 以太网网络控制模型)用于在设备和主机之间交换以太网帧数据。CDC-ECM
设备的一般用例是LAN/WLAN的点对点以太网适配器。
3、USB CDC NCM
CDC-NCM
(Network Control Model 网络控制模型)协议用于在设备和主机之间交换高速以太网帧数据。这些以太网帧可以传送通过通信网络传输的IPv4或IPv6数据报。NCM
设备的一般用例是支持3.5G/4G网络的无线网络适配器,例如:HSPA +和LTE。NCM
是建立在ECM
的基础上,进行改进以支持更高的数据速率,主要表现在:
- 多个以太网帧可以聚合为单个USB传输;
- 为了最大限度地减少在USB设备中处理以太网帧时的开销,
CDC-NCM
可以按照最好的方式将以太网帧放到USB传输中。 CDC-ECM
专为USB full-speed设备而设计,尤其适用于支持DOCSIS 1.0电缆调制解调器。虽然ECM
在功能上是完整的,但它在吞吐量或效率方面不能很好地扩展到更高的USB速度和更高的网络速度。NCM
利用从ECM
实施中获得的经验,并调整数据传输协议,使其更加高效。
4、USB CDC EEM
CDC-EEM
(Ethernet Emulation Model 以太网仿真模型)是一种通过USB总线以低成本和高效率传输以太网帧的规范。与CDC ECM
不同,EEM
不会扩展USB总线上的接口,而是将USB总线视为移动以太网数据包的工具。EEM
是较新的标准,比ECM
稍微简单一些,可以获得更多的硬件支持。两者之间的差别是:
ECM
将网络接口扩展到目标(例如USB电缆调制解调器);EEM
用于移动设备通过USB使用以太网与主机通信。
但是,对于Linux gadget,与主机的接口是相同的(usbX设备),因此差异很小。
5、USB CDC OBEX
USB CDC-OBEX
(Object Exchange 对象交换)符合WMC
(Wireless Mobile Communication 无线移动通信)OBEX
功能模型,支持USB上的OBEX
应用程序。
6、USB WMC
USB WMC
(Wireless Mobile Communication 无线移动通信),我的理解是USB上网卡(连接移动通信网络),该模型包括以下内容:
RNDIS
RNDIS
(Remote Network Driver Interface Specification 远程网络驱动接口协议)是Microsoft专有协议,主要用于USB之上,在支持Microsoft RNDIS协议的Windows PC上提供类似CDC的通信功能。它提供了大多数Windows,Linux和FreeBSD操作系统版本的虚拟以太网链接。NDIS
和RNDIS
区别:NDIS
是一种规范,定义了网络驱动接口的api。RNDIS
是一种技术,是将TCP/IP封装在USB报文里,实现网络通信。RNDIS
的框架如下:
RmNet
RmNet
是高通公司为其手机平台开发的专有USB虚拟以太网框架。 RmNet通过薄层协议(TLP)提供更高的吞吐量,并允许服务质量流量控制。
RmNet
和CDC-ECM
区别:更像是两种拨号方式的区别,RmNet
获取公网IP,CCD-ECM
获取局域网IP。- 在高通平台上,rmnet 也是属于
CDC-ECM
,他们具体的区别在于对于USB命令的封装以及使用的USB接口,端点定义方式不同。 - 如果是使用
RmNet
,那么发起data call是通过QMI工具发的QMI命令,QMI工具为QMICM,QMICM集成了QMI命令。 - 而通过标准的
CDC-ECM
发起data call,则是发送标准的ECM
命令。如果是QMICM建立的data call,不走router的,所以它的IP地址获得的是公网IP。而通过标准的CDC-ECM
建立的data call,是走router的,获得的IP地址是私有的IP如192.168开头