嵌入式系统的USB虚拟串口设计

现代嵌入式系统中,异步串行通信接口往往作为标准外设出现在单片机和嵌入式系统中。但是随着个人计算机通用外围设备越来越少地使用串口,串口正在逐渐从个人计算机特别是便携式电脑上消失。于是嵌入式开发人员常常发现自己新买来的计算机上没有串口,或者出现调试现场用户的计算机没有串口的尴尬局面。相反,现在的个人计算机普遍拥有4个以上的usb接口,能不能使用usb接口代替串口,完成pc机和嵌入式系统的通信呢?

  1.usb虚拟串口代替物理串口的可行性

  首先,越来越多带usb接口的器件涌现出来,如带usb接口的单片机,或独立的usb接口器件,而且这些器件的成本已经很接近于使用rs232电平转换芯片所带来的成本。

  其次,市场上也出现了一些usb接口转串口的芯片,这些芯片一头为串口,另一头为usb接口,在其内部完成串口到usb协议的转换。该芯片通过usb口连接到个人计算机后,在操作系统中表现为一个串口设备,这意味着usb接口对于传统的串口调试工具(hyperterninal)和用户基于串口的应用程序是透明的,开发人员完全不用更改pc端的调试和应用程序。

  但是这些器件的usb类不属于标准的usb设备类,因此需要在windows和linux操作系统上安装额外的设备驱动。另外,由于不是操作系统自带的设备驱动,而且通信经过了由串口到串口,usb从设备到usb主机的多次转换,当调试遇到问题时常常无法确定是串口出了问题还是usb出了问题。因此,应该使嵌入式系统直接和pc通过usb总线接口连接(通过片上的usb接口或片外usb接口芯片),由单片机直接完成usb虚拟串口的协议转换。

  在usb标准子类中,有一类称之为cdc类,可以实现虚拟串口通信的协议,而且由于大部分的操作系统(windows和linux)都带有支持cdc类的设备驱动程序,可以自动识别cdc类的设备,这样不仅免去了写专用设备驱动的负担,同时简化了设备驱动的安装。

  2.什么是cdc类

  usb的cdc类是usb通信设备类(communication device class)的简称。cdc类是usb组织定义的一类专门给各种通信设备(电信通信设备和中速网络通信设备)使用的usb子类。根据cdc类所针对通信设备的不同,cdc类又被分成以下不同的模型:usb传统纯电话业务(pots)模型,usb isdn模型和usb网络模型。其中,usb传统纯电话业务模型,有可分为直接线控制模型(direct line control model)、抽象控制模型(abstract control model)和usb电话模型(usb telephone model),如图1所示。本文所讨论的虚拟串口就属于usb传统纯电话业务模型下的抽象控制模型。

  通常一个cdc类又由两个接口子类组成通信接口类(communication interface class)和数据接口类(data interface class)。笔者主要通过通信接口类对设备进行管理和控制,而通过数据接口类传送数据。这两个接口子类占有不同数量和类型的终端点(endpoints),如图2所示。

  对于前面所述的不同cdc类模型,其所对应的接口的终端点需求也是不同的。如所需要讨论的抽象控制模型对终端点的需求,通信接口类需要一个控制终端点(control endpoint)和一个可选的中断(interrupt)型终端点,数据接口子类需要一个方向为输入(in)的周期性(isochronous)型终端点和一个方向为输出(out)的周期性型终端点。其中控制终端点主要用于usb设备的枚举和虚拟串口的波特率和数据类型(数据位数、停止位和起始位)设置的通信。输出方向的非同步终端点用于主机(host)向从设备(slave)发送数据,相当于传统物理串口中的txd线(如果从单片机的角度看),输入方向的非同步终端点用于从设备向主机发送数据,相当于传统物理串口中的rxd线。

  3.at89c5131的简单介绍

  基于单片机的嵌入式系统要实现usb总线通信,通常都是通过外扩专用的usb总线接口芯片(如飞利浦的d12)。但是这样的方案既增加了成本,又使pcb板的面积变大,所以使用atmel公司的集成了usb

  • 嵌入式系统的USB虚拟串口设计已关闭评论
    A+
发布日期:2019年07月02日  所属分类:参考设计