USB CDC类说明
因为近期的一个项目用到了USB的CDC类,留个记录
USB的CDC类是USB通信设备类 (Communication Device Class)的简称。CDC类是USB组织定义的一类专门给各种通信设备(电信通信设备和中速网络通信设备)使用的USB子类。
CDC规范是为满足电信服务(传统上终止模拟或数字电话线的设备)和中速网络服务(“始终连接”LAN/WAN媒体类型)的需求而制定的,是移动电话、模拟/ADSL/电缆调制解调器、模拟/数字电话、无线终端、以太网适配器以及Legacy和其他网络设备的理想选择。
CDC USB Driver支持以下子类:ECM、NCM、ACM、OBEX、设备管理。
CDC USB Class Driver支持主机端与CDC USB外设的通信,CDC USB Function Driver提供设备端对CDC外设所需的USB CDC实现。
USB (Universal Serial Bus)提供可扩展、可热插拔的 Plug and Play 串口接口,确保与存储设备、键盘、操纵杆、打印机、扫描仪、调制解调器和数码相机等外围设备进行标准、低成本的连接。
USB Class Driver是一种逻辑设备驱动程序(LDD),它控制提供通用功能的USB设备,并按照特定的设备类实现。
USB Function Driver USB功能驱动程序是在设备内实现的驱动程序,用于处理标准或自定义USB设备功能的设备特定功能。这个驱动程序提供了对应的USB类驱动程序。
CDC USB (USBnet) Class/Function Driver是一个USB类/函数驱动程序,支持通信设备的USB类定义,以及无线移动通信设备的CDC子类。
USB CDC Class Driver和USB CDC Function Driver分别是全功能的USB通信类/设备驱动程序。DC类驱动程序是USB主机栈的一部分,它为不支持USB的嵌入式系统提供了一个完整的USB主机通信解决方案。CDC功能驱动程序是USB设备栈的一部分,它使软件和设备制造商能够将标准USB设备/功能连接到他们的嵌入式设备中。
允许任何通信设备提供串行通信接口(例如发送和接收AT命令的调制解调器设备)。
CDC ACM驱动实现以USB设备驱动和tty设备驱动为基础,可将USB设备驱动的实现看作tty驱动和硬件之间数据流转换的桥梁。也即,整个USB CDC协议的实现均体现在USB部分,USB设备的描述符定义,CDC虚拟串口的设定,线路状态设置与读取,串口数据的发送与读取均遵循CDC协议规范。
进入到直接下载的kernel目录下,运行命令make menuconfig
host端
Symbol: USB_ACM [=n] │
│ Type : tristate │
│ Prompt: USB Modem (CDC ACM) support │
│ Location: │
│ -> Device Drivers │
│ (3) -> USB support (USB_SUPPORT [=y])
device端
Symbol: USB_CONFIGFS_ACM [=n] │
│ Type : boolean │
│ Prompt: Abstract Control Model (CDC ACM) │
│ Location: │
│ -> Device Drivers │
│ -> USB support (USB_SUPPORT [=y]) │
│ -> USB Gadget Support (USB_GADGET [=y]) │
│ (4) -> USB Gadget functions configurable through configfs (USB_CONFIGFS [=n])
多个USB CDC ACM设备在单独的物理USB设备上。
具有CDC ACM多种功能的复合USB设备。
两种方式之一的枚举:
虚拟COM口(虚拟串口)
虚拟调制解调器设备。
同步I/O和重叠I/O
串行事件(如TX空,RX准备,RLSD, RING)
封装命令。
串口配置(如波特率、流量控制)
NCM(网络控制模型)协议用于在设备和主机之间交换高速以太网框架数据。 符合CDC NCM的设备作为虚拟网卡向主机操作系统公开。 为网卡分配MAC地址和IP地址。
CDC NCM设备的一般使用情况是支持3.5G/4G网络的无线网络适配器,如HSPA+和LTE。
进入到直接下载的kernel目录下,运行命令make menuconfig
host端
Symbol: USB_NET_CDC_NCM [=m] │
│ Type : tristate │
│ Prompt: CDC NCM support │
│ Location: │
│ -> Device Drivers │
│ -> Network device support (NETDEVICES [=y]) │
│ -> USB Network Adapters (USB_NET_DRIVERS [=y]) │
│ (4) -> Multi-purpose USB Networking Framework (USB_USBNET [=y])
│ Symbol: USB_NET_HUAWEI_CDC_NCM [=m] │
│ Type : tristate │
│ Prompt: Huawei NCM embedded AT channel support │
│ Location: │
│ -> Device Drivers │
│ -> Network device support (NETDEVICES [=y]) │
│ -> USB Network Adapters (USB_NET_DRIVERS [=y]) │
│ (5) -> Multi-purpose USB Networking Framework (USB_USBNET [=y])
device端
Symbol: USB_CONFIGFS_NCM [=n] │
│ Type : boolean │
│ Prompt: Network Control Model (CDC NCM) │
│ Location: │
│ -> Device Drivers │
│ -> USB support (USB_SUPPORT [=y]) │
│ -> USB Gadget Support (USB_GADGET [=y]) │
│ (1) -> USB Gadget functions configurable through configfs (USB_CONFIGFS [=n])
多个USB CDC NCM设备在单独的物理USB设备上
设备管理控制请求
具有多种CDC NCM功能的复合USB设备
获取/设置NDIS对象标识符(OID)
NDIS 5.0/5.1/6.0和NDIS 6.2
支持高速4G LTE网络
EEM(以太网仿真模型)是一个在USB总线上廉价和高效传输以太网帧的规范。
EEM是USB CDC规范的一部分,但与ECM不同的是,EEM规范缺乏通过USB扩展以太网接口的控制请求。 相反,EEM利用USB带宽在设备和主机之间移动以太网数据包(虽然ECM只是作为一个通道,通过USB总线将以太网数据包传输到设备,然后将它们输出到网络,EEM可以将几个以太网帧封装到一个USB数据包,从而利用USB带宽来实现最大的传输性能)。
CDC EEM设备的一般使用情况是创建与主机的“USB网络”连接,而不是将EEM设备扩展为实际LAN/WLAN的“网卡”。
host端
Symbol: USB_NET_CDC_EEM [=n] │
│ Type : tristate │
│ Prompt: CDC EEM support │
│ Location: │
│ -> Device Drivers │
│ -> Network device support (NETDEVICES [=y]) │
│ -> USB Network Adapters (USB_NET_DRIVERS [=y]) │
│ (8) -> Multi-purpose USB Networking Framework (USB_USBNET [=y])
device端
Symbol: USB_CONFIGFS_EEM [=n] │
│ Type : boolean │
│ Prompt: Ethernet Emulation Model (EEM) │
│ Location: │
│ -> Device Drivers │
│ -> USB support (USB_SUPPORT [=y]) │
│ -> USB Gadget Support (USB_GADGET [=y]) │
│ (6) -> USB Gadget functions configurable through configfs (USB_CONFIGFS [=n])
Symbol: USB_ETH_EEM [=n] │
│ Type : boolean │
│ Prompt: Ethernet Emulation Model (EEM) support │
│ Location: │
│ -> Device Drivers │
│ -> USB support (USB_SUPPORT [=y]) │
│ -> USB Gadget Support (USB_GADGET [=y]) │
│ -> USB Gadget precomposed configurations (<choice> [=m]) │
│ (7) -> Ethernet Gadget (with CDC Ethernet support) (USB_ETH [=n])
多个USB CDC EEM设备在单独的物理USB设备上
USB设备连接
设备管理控制请求
具有多种CDC EEM功能的复合USB设备
获取/设置NDIS对象标识符(OID)
NDIS 5.0/5.1和NDIS 6.0
提供设备制造商接口作为一个标准的NIC (Network interface Card)设备。该接口通常用于高速局域网网络设备,通过USB实现高速以太网数据传输。
CDC
ECM(以太网网络控制模型)协议用于在设备和主机之间交换以太网框架的数据。符合CDC ECM的设备将自己作为虚拟网卡公开给主机操作系统。为网卡分配MAC地址和IP地址。
CDC ECM设备的一般用例是LAN/WLAN的点对点以太网适配器。
host端
Symbol: USB_NET_CDCETHER [=y] │
│ Type : tristate │
│ Prompt: CDC Ethernet support (smart devices such as cable modems) │
│ Location: │
│ -> Device Drivers │
│ -> Network device support (NETDEVICES [=y]) │
│ -> USB Network Adapters (USB_NET_DRIVERS [=y]) │
│ (4) -> Multi-purpose USB Networking Framework (USB_USBNET [=y])
device端
Symbol: USB_CONFIGFS_ECM [=n] │
│ Type : boolean │
│ Prompt: Ethernet Control Model (CDC ECM) │
│ Location: │
│ -> Device Drivers │
│ -> USB support (USB_SUPPORT [=y]) │
│ -> USB Gadget Support (USB_GADGET [=y]) │
│ (5) -> USB Gadget functions configurable through configfs (USB_CONFIGFS [=n])
Symbol: USB_CONFIGFS_ECM_SUBSET [=n] │
│ Type : boolean │
│ Prompt: Ethernet Control Model (CDC ECM) subset │
│ Location: │
│ -> Device Drivers │
│ -> USB support (USB_SUPPORT [=y]) │
│ -> USB Gadget Support (USB_GADGET [=y]) │
│ (6) -> USB Gadget functions configurable through configfs (USB_CONFIGFS [=n])
多个USB CDC ECM设备在单独的物理USB设备上
设备管理控制请求
具有多种CDC ECM功能的复合USB设备
获取/设置NDIS对象标识符(OID)
NDIS 5.0/5.1和NDIS 6.0
RNDIS是指RemoteNDIS,既是远程网络驱动接口规范,基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。
host端
Symbol: USB_NET_RNDIS_HOST [=y] │
│ Type : tristate │
│ Prompt: Host for RNDIS and ActiveSync devices │
│ Location: │
│ -> Device Drivers │
│ -> Network device support (NETDEVICES [=y]) │
│ -> USB Network Adapters (USB_NET_DRIVERS [=y]) │
│ (5) -> Multi-purpose USB Networking Framework (USB_USBNET [=y])
device端
Symbol: USB_ETH_RNDIS [=n] │
│ Type : boolean │
│ Prompt: RNDIS support │
│ Location: │
│ -> Device Drivers │
│ -> USB support (USB_SUPPORT [=y]) │
│ -> USB Gadget Support (USB_GADGET [=y]) │
│ -> USB Gadget precomposed configurations (<choice> [=m]) │
│ (2) -> Ethernet Gadget (with CDC Ethernet support) (USB_ETH [=n])
OBEX(对象交换)兼容无线移动通信OBEX功能模型,支持通过USB的OBEX应用程序。
CDC OBEX驱动程序通过将USB设备公开为主机操作系统的虚拟COM端口来提供一个传输层。驱动程序可以与支持各种OBEX配置文件的OBEX栈接口,例如文件传输,对象推送。
OBEX协议被设计用来在设备之间传输数据对象。该协议最初是为红外数据传输而开发的,但现在已普遍用于蓝牙和其他各种无线通信。
该协议是面向消息的,但被设计为在面向字符的类tcp协议之上分层。因此,OBEX是使用一对散装管道实现的。
在单独的物理USB设备上支持多个CDC OBEX设备
支持具有多种CDC OBEX功能的复合USB设备
OBEX函数被枚举为一个虚拟串口
用户模式传输层,工作在虚拟串行端口和带有OpenOBEX栈的接口之上
支持同步I/O和重叠I/O
支持串行事件(如TX空,RX准备,RLSD, RING
WMC-Device Management兼容Device Management功能模型,支持基于AT命令的最小控制模型。
参考:
https://www.jungo.com/st/embedded_usb_cdc.html