测控仪器通讯扩展模块的研制
2011-01-29沈晓红张艳婷
沈晓红,李 凯,张艳婷
SHEN Xiao-hong, LI Kai, ZAHNG Yan-ting
(北京工商大学 材料与机械工程学院,北京 100048)
0 引言
USB接口依靠其高速、支持热插拔等特性,在外设接口类型中迅速崛起,逐渐成为PC机以及一些智能仪器与外设连接的普遍标准。同时,这也使得目前许多采用并口连接外设的专用测控仪器的使用受到了限制。因此,为这类仪器扩展USB接口势在必行。另外,USB技术规范将USB进行数据传输的双方分成两种角色:主(Host)和从(Slave),并且规定数据只能在Host和Slave之间传输[1]。但在目前绝大多数的设备以及研究中,Host功能被集成在计算机上,基于USB的设备大部分都只集成了Slave功能,这样USB设备必须依赖于PC机操作。为了脱离这种以计算机为核心的数据传输结构,使得USB设备应用于专业测控仪器,必须在这些仪器中实现USB主机功能。
基于此,本文作者采用Atmel公司的AVR系列单片机ATmega8和南京沁恒公司的USB接口芯片CH375设计了一款并口转USB接口的转接模块,从而实现了上述的功能,使传统测控设备能与USB主机系统高速通信。该模块可以方便地移植进各种智能仪器中,为仪器扩展USB接口。
1 微控制器和USB接口芯片的选择
1.1 微控制器的选择
系统采用AVR高速单片机ATmega8作为单片机主控模块。ATmega8是一款采用低功耗CMOS工艺生产的基于AVR RISC(精简指令集)结构的8位单片机[2]。AVR单片机的核心是将32个工作寄存器和丰富的指令集连接在一起,所有的工作寄存器都与ALU(算术逻辑单元)直接相连,可在一个时钟周期内用一条指令同时访问(读写)2个独立的寄存器。这种结构可提高代码效率,使得大部分指令的执行时间仅为一个时钟周期,故可达到将近1MIPS/MHZ的性能,运行速度比普通单片机高出10倍。
1.2 USB接口芯片的选择
本系统选用南京沁恒公司生产的CH375芯片作为USB控制器。CH375是一个USB总线的接口芯片,具有接口简单、价格低廉的优点。专用USB总线接口芯片内部不带处理器,而仅仅负责处理USB通信,必须有一个外部的处理器来完成协议处理和数据交换。由于这些接口芯片依赖于外部的微处理器实现USB接口的全部功能,所以可以在保持原有硬件平台基本不变的情况下,通过更改软件模块对原有设备进行维护或升级,因而可扩展性更强[3]。CH375支持USB-HOST主机方式和USB-DEVICE/SLAVE设备方式。在本地端,CH375具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机/DSP/MCU/MPU等控制器的系统总线上。在USB主机方式下,CH375还提供了串行通讯方式,通过串行输入、串行输出和中断输出与单片机/DSP/MCU/MPU等相连接。
2 系统硬件设计
系统硬件整体结构框图如图1所示。
图1 硬件整体结构框图
系统的硬件设计主要是单片机主控模块设计和USB主控制器模块设计。
下面以连接打印外设为例,介绍系统的工作原理:测控仪器将打印数据通过自身的并口传送给单片机模块,并暂存在单片机内部的数据缓冲区中,等待USB主控芯片模块发出中断请求,收到USB主控芯片发送的打印数据的中断请求后,单片机把数据传送给USB主控芯片,USB主控芯片再将打印数据通过USB总线发送给打印机,并在打印语言的控制下按要求格式打印出数据。系统总原理图如图2所示。
并口的信号、BUSY信号、ACK信号分别连接 ATmega8的 PD3、PC5和 PC4,8位数据线分别连接ATmega8的 PB0~PB3、PC0~PC3。USB接口芯片CH375在本地端采用串行接口与ATmega8通信,串口信号线包括:串行数据输出引脚TXD、串行数据输入引脚RXD和中断输出引脚INT#。通过串行接口,CH375可以用最少的连线与单片机进行较远距离的点对点连接。CH375芯片的RXD和TXD可以分别连接到单片机的串行数据输出引脚和串行数据输入引脚。INT#输出的中断请求是低电平有效,用于通知单片机。ATmega8可以通过查询或中断的方式获得中断信号。数据线D+、D-用于收发USB总线传输的数据差分信号。
图2 系统原理图
3 系统软件设计
单片机与CH375的通信主要靠单片机给CH375发命令和数据来完成,而CH375给出了许多常用命令以及操作状态的代码,比如:从USB中断的端点缓冲区读取数据块命令CMD_RD_USB_DATA,向USB主机端点的发送缓冲区写入数据块命令CMD_WR_USB_DATA7等。因此,可以将这些命令做成函数,即通过函数实现该命令;然后在编写其他函数时就可以直接调用这些命令函数。
系统软件设计主要包括ATmega8及CH375的初始化、CH375与ATmega8的通信程序设计、USB外设的枚举初始化、数据传送等。本设计采用了ICCAVR编译器来进行程序设计。
3.1 ATmega8及CH375的初始化
ATmega8的初始化主要是指其I/O口初始化和USART(通用同步和异步串行接收器和转发器)的初始化。
I/O口的初始化程序如下:
USART(通用同步和异步串行接收器和转发器)的初始化程序如下:
CH375的初始化主要是CH375复位并通过函数SET_USB_MODE(6)来设置其主机模式。
3.2 CH375与ATmega8的通信程序设计
本设计中ATmega8采用USART(通用同步和异步串行接收器和转发器)与CH375进行通信。CH375的串行数据格式是1个起始位、9个数据位、1个停止位,其中前8个数据位是一个字节数据,最后1个数据位是命令标志位。第9位为0时,前8位的数据被写入CH375芯片中,第9位为1时,前8位被作为命令码写入CH375芯片中。
根据此串行数据格式,ATmega8采用9位数据位的帧格式。如果发送9位数据的数据帧(UCSZ=7),应先将数据的第9位写入寄存器UCSRB的TXB8,然后再将低8位数据写入发送数据寄存器UDR。接收数据时,在从UDR读取低8位之前必须首先读取寄存器UCSRB的RXB8以获得第9位数据。据此编写的向CH375写命令、写数据以及从CH375读数据的程序如下:
向CH375写命令子程序:
向CH375写数据子程序:
3.3 USB外设的枚举初始化过程
在USB设备首次连接到主机上之后,要接受主机的枚举。其具体过程如下:
1)主机检测设备的连接,发出复位信号:当USB外设连接到主机之后,通过CH375提供的命令代码CMD_GET_STATUS来获取CH375的中断状态,如果返回状态代码USB_INT_CONNECT,则表明检测到USB外设的连接。检测到后,主机等待100ms以使设备的接入过程顺利完成,并使供电稳定,并向USB信号线的D+和D-输出低电平,复位USB外设。
2)USB外设缺省状态:集线器在设备接入的端口上保持复位命令10ms,这时设备处于缺省状态,并通过地址0与主机通信。
3)读取设备描述符:主机获取USB外设的设备描述符,获得缺省管道的最大数据长度等一系列信息,并确认USB设备的属性。此过程主要通过CH375提供的命令代码CMD_GET_DESCR(1)来获取设备描述符,数据传输完成后,将获取的描述符数据从CH375中读出到单片机的RAM缓冲区中,并返回描述符的长度。
4)地址分配:主机给设备分配一个总线上的惟一地址,使设备进入地址态。以后,设备就将使用这个新地址。此过程主要通过命令代码CMD_SET_ADDRESS和CMD_SET_USB_ADDR分别对USB设备端和主机端设置地址。
5)读取配置描述符:主机通过命令代码CMD_GET_DESCR(2)获取USB外设的配置描述符,将获取的描述符数据从CH375中读出到单片机的RAM缓冲区中,并返回描述符的长度。
6)配置USB设备:在得到配置描述符等一系列信息后,主机就给该设备分配配置值。此过程通过命令代码CMD_SET_CONFIG来实现。
USB外设枚举初始化的程序如下:
3.4 数据发送模块设计
3.4.1 数据同步
USB的数据同步通过切换DATA0和DATA1实现;在设备端,USB外设可以自动切换;在主机端,必须由CMD_SET_ENDP6和CMD_SET_ENDP7命令控制CH375切换DATA0与DATA1实现。主机端的程序处理方法是为设备端的各个端点分别提供一个全局变量,初始值均为DATA0,每执行一次成功事务后取反,每执行一次失败事务后将其复位为DATA1。
3.4.2 数据批量传输
根据USB批量传输协议,在进行数据批量传输前,先判断数据长度len是否大于端点尺寸endp_out_size;如果大于,则此次发送的数据长度为endp_out_siae;反之为len。每次成功发送数据后,需要计算剩余的数据长度,并与端点尺寸进行比较,从而决定要发送的数据长度,直到全部数据发送完成。
数据批量传输部分程序如下:
4 结论
本设计采用AVR高速单片机ATmega8作为USB主机处理器,采用国产芯片CH375作为USB主控芯片,实现了并口到USB接口的转换,从而实现与USB主机系统的高速通信,为测控仪器扩展了USB接口。该转接模块抗干扰能力强、可靠性高、连接灵活、使用方便,已成功应用在诸如便携式数字化超声波探伤仪等专用测控仪器中,并取得了良好的效果。
[1]Universal Serial Bus Specification Revision 1.1 [S].http∶ //www.usb.Org, 1998.
[2]马潮, 等.ATmega8原理及应用手册[M].清华大学出版社, 2003.
[3]李肇庆, 廖峰, 刘建存.USB接口技术[M].国防工业出版社, 2004.
[4]CH375中文手册.南京沁恒公司.
[5]马伟.计算机USB系统原理及其主/从机设计[M].北京航空航天大学出版社, 2004.
[6]梁建均.32位视窗系统串行通讯的串口设置[J].安阳师范学院学报, 2002.
[7]冯星华, 张海洪.PLC与个人计算机间串行通讯及程序设计[J].机电一体化, 2000.
[8]王芙蓉, 黄载禄.一种可扩展的移动通讯系统HLR设计方案.[J].华中科技大学学报, 2001.
[9]罗耀华, 刘昕.用于DSP的多串口扩展通讯模块设计[J].一重技术, 2007.
[10]张文超, 卢可义, 刘振方.几种可用于测控仪器的串行总线研究和应用选择原则[J].测控技术, 2005.