ACM&ECM&NCM&EEM&RNDIS&RmNet介绍

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中指定的文档。

CodeSubclassReference
00hRESERVED
01hDirect Line Control ModelUSBPSTN1.2
02hAbstract Control ModelUSBPSTN1.2
03hTelephone Control ModelUSBPSTN1.2
04hMulti-Channel Control ModelUSBISDN1.2
05hCAPI Control ModelUSBISDN1.2
06hEthernet Networking Control ModelUSBECM1.2
07hATM Networking Control ModelUSBATM1.2
08hWireless Handset Control ModelUSBWMC1.1
09hDevice ManagementUSBWMC1.1
0AhMobile Direct Line ModelUSBWMC1.1
0BhOBEXUSBWMC1.1
0ChEthernet Emulation ModelUSBEEM1.0
0DhNetwork Control ModelUSBNCM1.0
0Dh~7FhRESERVED(future use)
80h~FEhRESERVED(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上网卡(连接移动通信网络),该模型包括以下内容:WMC框架


RNDIS

  • RNDIS(Remote Network Driver Interface Specification 远程网络驱动接口协议)是Microsoft专有协议,主要用于USB之上,在支持Microsoft RNDIS协议的Windows PC上提供类似CDC的通信功能。它提供了大多数Windows,Linux和FreeBSD操作系统版本的虚拟以太网链接。
  • NDISRNDIS区别:NDIS是一种规范,定义了网络驱动接口的api。RNDIS是一种技术,是将TCP/IP封装在USB报文里,实现网络通信。
  • RNDIS的框架如下:
    RNDIS框架

RmNet

RmNet是高通公司为其手机平台开发的专有USB虚拟以太网框架。 RmNet通过薄层协议(TLP)提供更高的吞吐量,并允许服务质量流量控制。

  • RmNetCDC-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开头

参考资料

Title:ACM&ECM&NCM&EEM&RNDIS&RmNet介绍

Author:Victor Huang

Time:2019-08-11 / 14:08

Link:http://wowothink.com/588ebc22/

License: Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)