AVR单片机的V-USB和串口通信方式比较

2012-12-17 10:4893707部队王志海
电子世界 2012年8期
关键词:电平开源上位

93707部队 王志海

1.引言

串口通信是单片机与上位机最常用的数据通信方式,随着USB接口的普及,单片机与计算机之间越来越多的使用USB接口进行数据传输,但是直接选用USB接口控制芯片会增加开发成本与难度。为单片机设备选择一个简单、快速、适用的通信方式,不但可以降低开发成本和技术难度,也可以最大程度的提高单片机系统的运行效率。本文对AVR单片机使用串口通信和V-USB方案的开发实现过程进行比较,分析了两种通讯方式的特点和应用场合。

1.1 V-USB简介

V-USB的全称是Virtual USB for AVR microcontrollers,是一个开源项目。它利用纯软件的实现方式在ATMEGA公司的AVR系列单片机上虚拟出USB口,将其模拟为低速USB设备,实现方案不需要添加其他的USB接口芯片。通常单片机与上位机进行USB通信,需要用专用的芯片进行USB协议的转换,例如CP2101、PL2303、SL811、PDIUSBD12等。其中CP2101、PL2303芯片使用起来虽然简单,但是功能单一,只能做USB转串口的通讯设备;而PDIUSBD12、SL811芯片功能较强,但是设计使用复杂,这些USB芯片的价格都相对较高,增加了系统的硬件成本。而V-USB简单易用,成本较低,绝大多数的AVR系列单片机加上很少的几个外部元件,就可以组成一个USB系统。

1.2 串口通信简介

串口通信基于RS-232-C串行总线接口标准,最初是为了连接计算机主机与CRT终端之间的通信,后来逐渐广泛地应用于各种设备之间的数据交换。早期的计算机主机都带有RS-232接口,是最常用的数据接口,具有传输距离远、连接方式简单、线路占用少、开发资料多等优点。绝大多数的单片机都内置USART单元用于串行通信。

2.下位机实现方法

2.1 V-USB下位机实现

V-USB系统的硬件结构很简单,需要一个AVR单片机(片上具有2KB Flash,128字节RAM的大部分型号都可以),再加上少量的外部元件(晶振、电阻、稳压二极管等),就组成了一个基本的V-USB系统,实现方案需占用单片机的两个数据引脚(其中D+必须连接至INT0),并不占用其他的UART、计时器等硬件资源。系统组成如图1。

图中的D1和D2是3.6V稳压二极管,目的是限制USB数据线上的电平。USB通信规范中规定,数据线D+、D-上的电平范围在3.0V至3.6V之间,而AVR单片机的输出电平是VCC。如果单片机的VCC是5V,如没有D1、D2的情况下将导致电平不匹配,会出现在计算机中无法正确识别出USB设备的情况。单片机所需的电源VCC可由USB的5V输出电源直接提供,电阻R1和R2起到了限流和保护的作用,避免意外情况下损坏计算机的USB端口或单片机的端口。

V-USB的软件源代码是由C代码和汇编代码组成的,开发环境为AVR GCC,已组织好几种不同USB设备的框架,开发者只需直接利用即可。最小化的V-USB程序框架编译后需要占用单片机1150至1400字节的程序空间。

由于V-USB使用单片机IO口模拟USB通信,是用纯软件的方式实现了硬件芯片的功能。而USB通信的速率要求是比较高的。因此在进行USB通信时单片机的CPU占用率比较高的。为保证可靠的USB数据传输,单片机CPU时钟必须是工作在12MHz、12.8MHz、15MHz、16MHz、16.5MHz、18MHz、20MHz这几个频率。

2.2 串口通信下位机实现

具备USART单元的AVR单片机都可以使用串行通信方式,硬件实现仅使用单片机的RXD和TXD引脚。为和计算机的RS-232接口连接,一般使用MAX232芯片进行电平转换,这需要增加部分外围电路,MAX232应用电路如图2:

若要提高用串口通讯硬件的易用性,还可以选择成品的USB转TTL接口芯片,可以方便的将使用串口通信的单片机设备变为USB设备,并且不影响上位机和下位机的程序编制。

为减小波特率偏差,USART对单片机的使用的晶振频率和串口设置的通讯速率有一些要求,不匹配的波特率和晶振频率会使传输出现通讯错误。具体可查各型单片机的数据手册中的波特率设置表。

3.上位机程序编制

3.1 V-USB上位机程序编写

V-USB项目在计算机端使用跨平台的开源项目LibUSB来访问USB设备。LibUSB-Win32是LibUSB在Windows操作系统(Win2k,WinXP,Vista,Win7)上的通用USB设备驱动程序及开发包。利用LibUSB可以在不设计核心驱动程序代码的情况下,访问Windows系统上的USB设备。LibUSB-Win32的开源项目网站是http://libusb-win32.sourceforge.net,遵守GNU Lesser General Public License(LGPL)和GNU General Public License(GPL)许可协议。协议规定LibUSB-Win32可以开源也可以用于商业软件。

表1 两种通信接口特征对比

图1

图2

LibUSB-Win32为C/C++程序员提供了可直接用于开发的头文件和Lib文件,其中Lib文件还提供了BCC、GCC和MSVC这三个版本。C/C++程序员在自己的程序中要使用LibUSB-Win32时,只需包含提供的头文件,并链接合适的Lib文件即可。对于使用其他语言的开发者,可以通过直接调用LibUsb-Win32的动态链接库中的函数来使用LibUSB的功能来访问USB设备。如果开发者希望具体的控制通讯细节,可以使用LibUSB提供的函数usb_init()、usb_find_busses()、usb_control_msg()来实现设备操作、控制传输、批量传输、中断传输等功能。

在V-USB项目中,有多个使用LibUSBWin32访问USB设备的工程。开发者可以直接在自己的工程中添加opendevice.h和opendevice.cpp来访问外围USB设备,编程时仅使用已经编写好的usbOpenDevice()、usb_set_configuration()、usb_control_msg()、usb_close()等几个函数就可以快速实现与外围USB设备的数据通信功能。

由于AVR单片机具有低成本、高性能的特性,使得V-USB非常适合于应用于USB加密狗、低速USB数据采集设备、HID设备等,这样通过使用极少元件构成的具有USB通信功能的单片机系统比很多使用专用芯片的系统成本低、开发难度低。

目前应用V-USB的成熟产品有:

USBasp(USB接口的AVR编程写入器)、AVRCDC(USB转RS232)、USB Bootlader等。在V-USB网站上(见参考文献)还有许多使用V-USB的开源项目,这些项目提供了完整的单片机程序和计算机程序的代码及原理图,非常方便开发者查阅参考这些资源,并在这些开源工程实例的基础上进行修改,快速开发适合于应用需求的单片机设备。

3.2 串口通信上位机程序编写

在Windows下,常用的串口方法主要有:使用MSComm控件、Windows API函数、第三方类库等。使用MSComm控件比较简单,多种计算机编程语言均可利用其实现对串口的控制,但是对于通讯速度和实时性要求高的场合,如果处理不好就会出现内存泄露等问题。使用Windows API中用于控制串口通信的函数,需要对相关的参数和数据结构有一定的了解,虽然各种语言、各种应用场合都可以使用,但是编程较为复杂,开发周期长,只适合需要精准的控制通讯细节的情况。相对而言第三方的开发类库例如CSerialPort类,CSerialPortEx等,不但支持多串口多线程,而且使用简单,开发周期短,应用场合较广。

4.通讯速度比较

V-USB将单片机实现为支持USB1.1协议的低速设备。由于低速USB设备的速度是1.5M位/秒,而AVR单片机为单指令周期的,当单片机使用12MHz的时钟频率时,单片机运行时每8条指令就精确完成一个数据位的采集。这对单片机的时序要求非常严格,所以V-USB项目的核心部分代码完全由汇编语言实现,并对AVR GCC编译器做了优化。笔者使用V-USB的最小框架进行数据传输测试,上位机发送一次USB命令,下位机不做处理直接应答,每次传输8字节时数据交换速度最快,约为1600B/s,当传输字节数增加时速度会下降,这种数据通讯是应答式,总数据传输速度为3200B/s即25.6kbps,加上单片机数据处理的耗时,通讯速率应该可以达到20kbps。

单片机的串口通信速度依赖于单片机USART所设置的波特率,其单位时位/秒(b/s),即每秒钟传输的二进制位数。若设置为9600b/s,则每秒钟传输的字节数为9600/8=1200Byte。由于USART本身是串行通信,所以收发数据时均是单字节到达的。而V-USB可以设置一次通讯所传输的字节数,最大一次可以传输254Byte。在编程上可以一次传输处理指定字节的数据结构,设计使用上更为简单。

5.结束语

综上所述,两种通信接口(如表1所示)各有优缺点。V-USB适用于对单片机空闲时间多、通讯速度要求不高,硬件成本较低、易用性好、需要快速开发应用USB接口设备的单片机项目。串口通信适用于传输距离远、处理器功能任务复杂、需要对数据通信严格控制的单片机项目。

[1]V-USB项目.http://www.obdev.at/vusb/.

[2]libusb-win32项目.http://libusb-win32.sourceforge.net.

[3]ATMEL公司.http://www.atmel.com.

[4]MSDN.http://www.microsoft.com/msdn.

猜你喜欢
电平开源上位
五毛钱能买多少头牛
特斯拉 风云之老阿姨上位
“三扶”齐上位 决战必打赢
基于ZigBee和VC上位机的教室智能监测管理系统
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
NPC五电平Z源逆变器的设计研究
以新思路促推现代农业上位
基于三电平光伏并网逆变器控制系统的研究与实践
基于NPC三电平变换器的STATCOM研究