没有合适的资源?快使用搜索试试~ 我知道了~
首页USB CDC类入门培训
资源详情
资源评论
资源推荐

USB CDC 类入门培训
1 前言
本文节选自 2017 年度 USB CDC 类培训内容的整理,主要目的是以方便些没有到现场参加培训的碟粉们可以参阅学习。本文
力求从理论到实践,尽量给读者一个整体了解 USB CDC 类的窗口。当然,阅读此文,还是需要基本的 USB 知识,这个请读
者自行预备。
2 USB CDC 类基础理论知识介绍
2.1 USB CDC 类、USB2.0 标准与 PSTN 之间的关系
CDC(Communication Device Class)类是 USB2.0 标准下的一个子类,定义了通信相关设备的抽象集合。它与 USB2.0 标准以
及其下的子类的相互关系如下图所示:
图 1 USB2.0 标准、CDC、PSTN 之间的关系
如上图,USB2.0 标准下定义了很多子类,有音频类,CDC 类,HID,打印,大容量存储类,HUB,智能卡等等,这些在
urb.org 官网上有具体的定义,这里我们主要讲的是通信类 CDC,CDC 类下面,根据具体的应用场合,又有一些子类,这里
我们主要讲的是 PSTN(Public Switched Telephone Network)。从 PSTN 官方标准文档来看,PSTN 子类是一个与电信相关的
子类,而这里,我们只是将它作为一个普通的通信设备使用,并没有使用到它的一些电话特性。

2.2 从一个具体的 CDC 类通信数据说起
图 2 一个具体的 CDC 类设备通信数据
如上图,USB CDC 类的通信部分主要包含三部分:枚举过程、虚拟串口操作和数据通信。其中虚拟串口操作部分并不一定强
制需要,因为若跳过这些虚拟串口的操作,实际上 USB 依然是可以通信的,这也就是为什么上图中,在操作虚拟串口之前会
有两条数据通信的数据。之所以会有虚拟串口操作,主要是我们通常使用 PC 作为 Host 端,在 PC 端使用一个串口工具来与
其进行通信,PC 端的对应驱动将其虚拟成一个普通串口,这样一来,可以方便 PC 端软件通过操作串口的方式来与其进行通
信,但实际上,Host 端与 Device 端物理上是通过 USB 总线来进行通信的,与串口没有关系,这一虚拟化过程,起决定性作
用的是对应驱动,包含如何将每一条具体的虚拟串口操作对应到实际上的 USB 操作。这里需要注意地是,Host 端与 Device
端的 USB 通信速率并不受所谓的串口波特率影响,它就是标准的 USB2.0 全速(12Mbps)速度,实际速率取决于总线的实际使
用率、驱动访问 USB 外设有效速率(两边)以及外部环境对通信本身造成的干扰率等等因素组成。
2.3 CDC 类设备枚举过程
CDC 类设备与其他标准 USB 设备枚举过程的并没有什么特殊的地方。在设备描述符内可以使用 DeviceClass=0x00,
SubClass=0x00, Protocol=0x00 表示此类信息在接口描述符内给出;或者也可以使用 0x02,0x00,0x00;来表明该设备为
CDC 类设备。或者使用 0xef, 0x02,0x01 表示当前为复合设备。

CDC 类设备在枚举过程中最主要的信息存储在配置描述符内:
图 3 USB CDC 类配置描述符的结构
如上图所示,CDC 类的配置描述符一般包含两个接口(Interface 0),一个控制接口,另外一个是数据接口(Interface 1), 除此之
外,还有一个虚线指向的 IAD(Interface Association Description),这个表示这个是不是可选的,得根据实际情况来确定其是
否真实存在。
2.3 1 控制接口
控制接口下包含类描述符合一个端点(ie:0x82),这个端点(中断传输模式)为异步通知消息的端点,当设备端需要向 Host 端发
送异步消息时,可以通错此端点来发送,但平时主机端都是通过端点 0 来向设备端发送控制消息的,比如那些虚拟串口的操
作指令等等。
除这异步通知端点外,控制接口下还包含 CDC 类相关描述符,这其中就包含 Header 描述符,Call Management 描述符,
ACM 描述符以及 Union 描述符。这些功能描述符整合在一起用来描述此 USB 设备的一些功能特性,比如 AT 指令支持情况,
ACM 模型下的指令集支持情况,以及还有哪些接口与此接口一起对应 Host 端的一个功能(驱动)。
在具体配置描述符内的控制接口内,功能描述符紧跟在接口描述符后,最后才是端点描述符。
控制接口

图 4 控制接口描述符
控制接口主要用来做设备管理和电话管理(可选),设备管理涉及到请求(request)和通知(notification),端点 0 一般用做请求,
一般用来控制和配置设备的运行状态,而非 0 端点(0x82)一般用作异步事件通知,设备端通过此端点向主机端发送设备内部的
一些事件,比如串口状态变化事件,电话状态改变等等。
这里使用到 ACM 模型,后续将讲到这个模型,并且这里指明使用到 V250 版本的 AT 指令,这些指令是与电话相关的,但在
我们这里讲的 CDC 通信实际上并不需要使用这些与电话相关的指令,它只是简单通信而已,这里指出 AT 指令也没有关系,
只是实际不用它而已。
如上图,bNumEndpoints 表示此接口下包含的端点数,这里为 1 个,即那个异步通知端点。bInterfaceSubClass 为
0x02,ACM 通信模型,bInterfaceProtocol 表示 AT 指令集的版本,虽然这里举例为 V2.50,但实际上并没有使用到任何 AT 指
令,因此它放
Header 功能描述符
图 5 Header 功能描述符

Header 功能描述符表示功能描述符的开始,其他紧跟的内容就是此设备的功能描述符的内容。bcdCDC 表示的是 CDC 的版
本。
ACM 功能描述符
图 6 ACM 功能描述符
ACM(Abstract Control Model),即抽象控制模型,PSTN 下,除了 ACM 模型还有还有 DLM(Direct Line Mode),
TCM(Telephone Control Model)。
PSTN 定义了三种模型:DLM(Direct Line Mode),ACM(Abstract Control Model)和 TCM(Telephone Control Model).
• DLM 模型下,USB 设备直接将模拟信号转化为数字信号,并放到 USB 上传输,数据接口直接使用 Audio 类传输音
频数据,控制接口传输的也都是些比较原始的指令,比如脉宽设置,发送脉宽等等;
• ACM 模型则可以很好的支持 AT V250 指令集,数据接口可以使用 Audio 类或 CDC DATA,控制接口传输的也是比
较抽象的高层指令,比如设置、获取波特率,设置获取与通信相关的参数等等,而 AT 指令可以通过控制接口或者数
据接口,这个在控制接口下的功能描述符 Call Management Descriptor 中指明。
• TCM 是指在物理上存在多个连接,可以将接口 0 和接口 1 分别对应到不同的物理连接上。
此外,不同的通信模型对应的指令集合(控制指令)也是不同的,而上图中 bmCapliblities 为位图,内部 bit0~bit3 分别表示 4
类控制指令集在此设备的支持情况。
剩余24页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0