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

发布者:数据舞者最新更新时间:2006-07-25 来源: CE china关键字:终端点  接口  单片机 手机看文章 扫描二维码
随时随地手机看文章

   引 言:

  现代嵌入式系统中,异步串行通信接口往往作为标准外设出现在单片机和嵌入式系统中。但是随着个人计算机通用外围设备越来越少地使用串口,串口正在逐渐从个人计算机特别是便携式电脑上消失。于是嵌入式开发人员常常发现自己新买来的计算机上没有串口,或者出现调试现场用户的计算机没有串口的尴尬局面。相反,现在的个人计算机普遍拥有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传统纯电话业务模型下的抽象控制模型。
?


图1


?
  通常一个CDC类又由两个接口子类组成通信接口类(Communication Interface Class)和数据接口类(Data Interface Class)。笔者主要通过通信接口类对设备进行管理和控制,而通过数据接口类传送数据。这两个接口子类占有不同数量和类型的终端点(Endpoints),如图2所示。对于前面所述的不同CDC类模型,其所对应的接口的终端点需求也是不同的。如所需要讨论的抽象控制模型对终端点的需求,通信接口类需要一个控制终端点(Control Endpoint)和一个可选的中断(Interrupt)型终端点,数据接口子类需要一个方向为输入(IN)的周期性(Isochronous)型终端点和一个方向为输出(OUT)的周期性型终端点。其中控制终端点主要用于USB设备的枚举和虚拟串口的波特率和数据类型(数据位数、停止位和起始位)设置的通信。输出方向的非同步终端点用于主机(Host)向从设备(Slave)发送数据,相当于传统物理串口中的TXD线(如果从单片机的角度看),输入方向的非同步终端点用于从设备向主机发送数据,相当于传统物理串口中的RXD线。


图2


?
  3、AT89C5131的简单介绍
?
  基于单片机的嵌入式系统要实现USB总线通信,通常都是通过外扩专用的USB总线接口芯片(如飞利浦的D12)。但是这样的方案既增加了成本,又使PCB板的面积变大,所以使用Atmel公司的集成了USB2.0全速(Full Speed)从接口外设的51单片机AT89C5131。

   AT89C5131是一个基于52内核的单片机。在存储器方面,其内部集成了32KB的Flash存储器用于代码的存储,1KB的EEPROM存储器用于用户数据的存储,用户可以使用片上的Bootloader或Flash API通过USB接口或者其他接口(如UART和I2C总线)对Flash存储器和EEPROM存储器进行ISP或者IAP编程。 此外AT89C5131还集成了10位的ADC、I2C总线接口和PCA模块等丰富的外设。

  AT89C5131的USB2.0全速从接口的结构如图3所示,其包括USB D+/D-的接口缓冲,数字锁相环,串行接口引擎(SIE)和通用功能接口(UFI)。其中数字锁相环以单片机的时钟为输入,产生了USB接口其他部分所需的48MHz时钟。串行接口引擎完成USB通信物理层NRZI码的编码与解码,CRC生成以及校验与纠错。通用功能接口包含了一个双端口的数据存储器,其一端与串行接口引擎链接,另一端通过数据总线与单片机相连接,使单片机可以通过特殊功能寄存器完成对USB2.0从接口的控制与通信。


图3

  AT89C5131的USB2.0全速从接口包含了7个终端点,其中0号终端点被配置成为默认的控制终端点。其他1~6号终端点都可以通过特殊寄存器配置为控制(Control),突发(Bulk),中断(Interrupt)和周期性(Isochronous)模式。由于每一个终端点都由一组独立的寄存器对该终端点进行控制、状态识别和数据的存取,则如果将这些寄存器直接映射到51单片机的特殊功能寄存器地址空间显然是容纳不下的。因此,这7个终端点的7组寄存器在单片机的地址空间中其实使用的是同一组寄存器的地址,而通过一个特殊功能寄存器(UEPNUM)来选择当前该组寄存器实际选择的是哪个终端点的寄存器组,这样就大大节省了所占用的地址空间,为集成其他特殊外设提供了可能。

  4、基于AT89C5131的CDC类的实现
?
  AT89C5131与USB接口的硬件连接很简单,选用一个Btype的USB插座,因为按照USB规范,从设备使用Btype的USB插座,主设备使用Atype的USB插座,将Btype的USB插座的D+和D-脚分别与AT89C5131上的D+和D-脚相连。然后再在电源和D+之间用一个1.5 kΩ的上拉电阻连接,因为按照USB规范,USB主设备是通过从设备在插入时D+和D-上的绝对电平来确定从设备是一个全速设备还是一个低速设备的,而AT89C5131是一个全速设备,所以需要将D+上拉。

  下面介绍虚拟串口的单片机软件设计与实现。首先来看一下终端点的分配,按照CDC类抽象控制模型对终端点的需求,将单片机0号终端点和1号终端点分配给通信接口子类,分别作为控制终端点(完成枚举和串口参数设置)和中断终端点,而将2号和3号终端点分配给数据接口子类,分别作为IN和OUT终端点,虚拟串口的数据主要从这两终端点来进行传送。
?
  由于各个终端点的行为相对独立,对于每个终端点的控制过程又有相似性,在这里以2号终端点即作为数据接口的IN终端点为例,说明软件是如何对终端点进行操作和控制的,其控制流程图如图4所示。2号终端点是一个IN的终端点,它的主要工作是模拟物理串口的TXD线,向主设备发送数据。当主设备发出IN的请求时,如果FIFO不空,就向主设备发送FIFO的内容;如果FIFO为空,则向主设备发送一个空包作为回应。

  AT89C5131在收到IN的请求时,会触发USB中断(如果被使能),在中断处理程序中,如图4所示,首先判断中断的触发源是哪个终端点,如果是2号终端点,将USB寄存器组映射到2号终端点的那一组,然后将需要发送的串口数据填入FIFO寄存器(UEPDATX),置位UEPSTAX的TXRDY位,表示FIFO中的数据已经准备好,这时USB接口就会自动响应IN请求,并将FIFO中的数据发送出去,程序则可退出中断服务程序。对于其他的终端点,其处理过程也是相似的。


图4


  软件使用Keil C51为编译系统,为了便于和系统的其他程序集成,采用标准字符型设备的API接口usb_getc()和usb_putc(),使程序具有很好的移植性。应用程序层函数(usb_getc()和usb_putc())与USB中断处理程序通过两个先进先出FIFO循环队列(TX和RX)来交换数据,这样有效的起到收发缓冲的作用,防止缓冲溢出。

  5、总结
  
  在单片机上实现基于CDC类的USB虚拟串口很好的适应了当前计算机外设接口的发展,同时因为这样的接口在PC操作系统中仍然映射为一个串口,所以又避免了大量的PC端调试程序和应用程序的重新编写。

关键字:终端点  接口  单片机 引用地址:嵌入式系统的USB虚拟串口设计

上一篇:U-Boot在S3C2410上的移植
下一篇:基于嵌入式Linux平台的多协议路由器设计

推荐阅读最新更新时间:2024-05-13 18:13

比亚迪车规MCU再扩充 !全新8位通用MCU BS9000AMXX系列推出!
如果说IGBT解决了汽车电动化的瓶颈,那MCU就是解决汽车智能化的关键,对汽车智能化发展起着决定性的作用。 性能优势加持 车规级品质背书 比亚迪半导体不断攻克智能化关键技术,进一步扩大了车规级8位通用MCU系列产品阵容,于2022年3月全新推出车规级8位MCU BS9000AMXX系列,客户端应用开发项目已全面启动。这是比亚迪半导体在车规MCU市场上的又一重要突破。 BS9000-AM28芯片图 BS9000-AM20芯片图 BS9000AMXX系列是一款车规级高品质等级的8位通用MCU,该芯片采用S8051 内核,主频最高为24MHZ,基于标准8051指令流水线结构,包含31KB FLASH、2KB SRAM
[汽车电子]
比亚迪车规<font color='red'>MCU</font>再扩充 !全新8位通用<font color='red'>MCU</font> BS9000AMXX系列推出!
用电位器通过STC12C2052AD单片机片内AD和PWM控制电机无极变速
/******************************************************** 功能 :用电位器通过STC12C2052AD片内AD和PWM控制电机转速 单片机;STC12C2052AD 晶振 :12M ********************************************************/ #include STC12C2052AD.H //头文件 #include intrins.h //51基本运算(包括_nop_空函数) #define uchar unsigned char #define uin
[单片机]
MCS-51单片机内部程序存储器ROM结构详解
MCS-51单片机的程序存储器用于存放编好的程序和表格常数。8051片内有4 KB的ROM,8751片内有4 KB的EPROM,8031片内无程序存储器。 MCS-51的片外最多能扩展64 KB程序存储器,片内外的ROM是统一编址的。如端保持高电平,8051的程序计数器PC在0000H~0FFFH地址范围内 (即前4 KB地址) 是执行片内ROM中的程序,当PC在1000H~FFFFH地址范围时,自动执行片外程序存储器中的程序;当保持低电平时,只能寻址外部程序存储器,片外存储器可以从0000H开始编址。 MCS-51的程序存储器中有些单元具有特殊功能,使用时应予以注意。 其中一组特殊单元是0000H~0002H。系统复位后,(
[单片机]
单片机数据采集系统研究瞬变过程
0 引 言   在教学实验及科学实验中,我们常常需要了解充电的电压、电流曲线、放电的电压曲线,记录并整理数据,画曲线,这里使用单片机数据采集系统可以直观了解RC电路的过渡过程,用数据采集系统得出的数据计算该RC电路的时间常数。 1 RC电路的过渡过程   实验电路如图1所示。   当数据采集系统启动后,U1为高电平,晶体三极管T1导通,T1集电极U C1 下降,合二极管D截止,三极管T2也截止,而电容器C通过r4及r5充电,充电时间常数近似为      τ充=(r4+r5)·C   电阻r5上的电压U r 与电容电流成正比,U C 近似为电容器电压,将U C 与U r 送入数据采集系统,可以得到256对电容电压及电容
[单片机]
时间片轮转算法在单片机程序设计中的应用
摘要:提出一种采用时间片轮转算法改进单片机系统程序设计,实现多任务机制的软件设计方法,并给出了在MCS-51分级分布式系统中应用该算法进行程序设计的实例。 关键词:时间片 多任务机制 单片机系统 传统的单任务编程思想对于明显的顺序控制要求编程简单、思路清晰、开发周期短;但对于任务较多、控制功能复杂的问题时,却难以满足要求。因此,有必要对传统的单任务设计思想进行改进。时间片轮转算法是实现多任务调度的一种常用算法。在这种算法中,系统将所有的任务按顺序排成一个队列,每次调度时把CPU分配给队首的任务,并令其执行一个时间片,构成微观上轮流运行、宏观上并执行的多任务效果。作者在基于单片机的分级分布式控制系统——程控对讲系统的用户控制器
[应用]
基于HMS30C7202嵌入式处理器实现触摸屏控制器的接口设计
1.导言 随着现代计算机技术和互联网技术的飞速发展,嵌入式系统开始占据市场主流。因32位ARM嵌入式处理器具有高性能、低功耗的特性,它已广泛应用于科学研究、工程设计,军事技术,商业文化艺术及消费产品。而触摸屏作为一种最新的电脑输入设备,具有坚固耐用、反应速度快、节省空间、易于交流等优点。主要用于公共信息的查询、工业控制、军事指挥、旅游、电子游戏、点歌点菜、多媒体教学和房地产预售等场所。因此,本文着重讨论基于嵌入式微处理器HMS30C720与触摸屏控制器的接口设计和底层串口驱动与上层microwindows图形界面结合的编程设计方法,以实现触摸屏对嵌入式设备之间的控制。 2.系统的整体结构 该系统的整体结构如图1所示:本系统由A
[单片机]
基于HMS30C7202嵌入式处理器实现触摸屏控制器的<font color='red'>接口</font>设计
MPC555微控制器与汽车电子
引言 随着汽车工业的飞速发展,汽车在控制、通信和网络方面的要求越来越复杂。以32位微控制器及嵌入式实时操作系统为基本技术特征的新一代电控单元 ECU(Electronic Control Unit)成为汽车电子应用的主流。32位微控制器MPC555以其强大的性能在汽车电子等领域得到了广泛的应用。 1 MPC555微控制器简介 MPC555微控制器是Motorola PowerPC 555系列的代表产品,是专为汽车电子、航空航天、智能系统等高端嵌入式控制系统所设计。该产品可在高速移动及苛刻的环境下工作(工作温度:- 40~125℃),性能优良,并具有高度的灵活性和可靠性,适合大批量低成本生产。 MPC555主要有以下功能模块
[单片机]
MPC555<font color='red'>微控制器</font>与汽车电子
飞利浦51LPC系列单片机用于控制交流电机
    摘要: 飞利浦公司研制的51LPC系列单片机是采用两倍速80C51内核,具有低成本、低功耗、低电磁干扰(EMI)、高抗干扰性及内建电源Brownout侦测、模拟功能、UART、I2C和片内RC振荡器的新一代单片机。本文介绍51LPC系列单片机控制交流电机的原理电路和源程序。     关键词: P87LPC761 Brownout侦侧 模拟比较器 EMI 电流过零检测 半波整流 双向可控硅 1 概述 PHILIPS 51LPC系列单片机目前已包括P87LPC760/1/2/4/7/8/9共七个型号。51LPC提供高速和低速的晶振和RC振荡方式,可编程选择;具有较宽的操作电压范围2.7~6.
[应用]
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved