USB CDC类

因为近期的一个项目用到了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设备/功能连接到他们的嵌入式设备中。

USB CDC ACM(抽象控制模型)

允许任何通信设备提供串行通信接口(例如发送和接收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设备上。
具有CDC ACM多种功能的复合USB设备。
两种方式之一的枚举:

  • 虚拟COM口(虚拟串口)
  • 虚拟调制解调器设备。

同步I/O和重叠I/O
串行事件(如TX空,RX准备,RLSD, RING)
封装命令。
串口配置(如波特率、流量控制)

USB CDC NCM(控制网络模型)

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设备上
设备管理控制请求
具有多种CDC NCM功能的复合USB设备
获取/设置NDIS对象标识符(OID)
NDIS 5.0/5.1/6.0和NDIS 6.2
支持高速4G LTE网络

USB CDC EEM(以太网仿真模型)

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 CDC EEM设备在单独的物理USB设备上
USB设备连接
设备管理控制请求
具有多种CDC EEM功能的复合USB设备
获取/设置NDIS对象标识符(OID)
NDIS 5.0/5.1和NDIS 6.0

USB CDC ECM(以太网控制模型)

提供设备制造商接口作为一个标准的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设备上
设备管理控制请求
具有多种CDC ECM功能的复合USB设备
获取/设置NDIS对象标识符(OID)
NDIS 5.0/5.1和NDIS 6.0

RNDIS

RNDIS是指RemoteNDIS,既是远程网络驱动接口规范,基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。
官方rndis文档

内核配置

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]) 
调试4g T-BOX过程中遇到的问题

问题:我的linux 设备作为 usb host端无法ping通usb device端的T-BOX,无法通信
排查思路:
1.host端是否配置成功,是否已经加载rndis driver,网卡驱动是否配置正确,是否检测到了rndis设备
2.usb设备是否正常,是否切换到rndis模式,可与供应商确认,可先与pc连接,看pc是否能够ping通设备
3.检查是否host端是否给rndis虚拟的网卡配置了IP

在命令行中输入 dmesg ,如此出现  rndis_host 1-1:1.0 usb1 这样的打印,则证明已经识别到了
如果没有,就要检查是否加载了rndis驱动,如果是配置成模块,用lsmod | grep rndis_host查看,modprobe rndis_host加载

指令ifconfig,如果没有出现中的usb1的网卡名,则发送ifconfig -a,如果有usb1,使用ifconfig usb1 up拉起网卡
没有ip 地址,发送 udhcpc -i usb1 -q 通过hdcp动态分配IP(需要设备支持hdcp协议),或者ifconfig usb1 192.168.225.10静态配置,即可使用此网卡进行上网

OBEX

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

WMC-Device Management兼容Device Management功能模型,支持基于AT命令的最小控制模型。

参考:
https://www.jungo.com/st/embedded_usb_cdc.html

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值