摘要:本文以Nios II嵌入式软处理器为核心,利用USB控制芯片CH372,设计了基于Nios II嵌入式软处理器的USB通信接口。本文重点介绍了USB接口的硬件实现方案,分析了CH372的通信流程,并编写了下位机和上位机PC的通信程序。与传统的嵌入式设计方案相比,该方案的整体性更好,具有很强的扩展性和灵活性,降低了软件的开发成本以及硬件实现风险。 关键词:Nios II;CH372;嵌入式处理器;可编程片上系统 www.51kaifa.com
1 引 言
高速化、便携化成为科学仪器的设计发展方向.而通用串行总线USB接口技术以其使用方便、速度快、成本低等特点,为用户和设计者青睐,大大促进了科学仪器在此方向上的发展。目前工业控制及教学、实验、科研中经常用到的数据传输系统,也越来越多的使用USB接口与主机相连。
本设计主要以Nios II嵌入式软处理器为核心,它是一个32位的处理器提供了USB接口具体的软、硬件设计方案。采用的FPGA(Field Programmable Gate Array)器件是Altera公司的Cyclone II系列EP2C20Q,嵌入式USB控制芯片是南京沁恒公司生产的CH372,实现了USB的通信设计。
2 系统结构设计
本文设计的USB接口用于汽车行业中硬件在回路仿真系统与上位PC机的数据传输。硬件在回路仿真系统的功能是对新开发的汽车防抱死制动系统(Antilock Braking System,(简称ABS))的电控单元(ECU)的性能指标进行测试。系统结构如图1所示。系统内运行汽车动力学模型,读取来自汽车ABS电子控制单元(ECU)的数据,进行处理,并实时改变轮子的速度。轮速的改变通过PWM模块输出至ECU,ECU根据当前的轮速发出相应的数据。如此循环,完成整个模型在刹车过程中的仿真。硬件在回路仿真器在整个仿真过程中的数据通过USB接口发送至上位PC机进行存储显示;上位PC机可以通过USB接口修改汽车动力学模型的各项参数。
系统主要包括以下几个模块:
l CycloneII系列FPGA,型号为EP2C20Q,有18752个LEs,239616 bits的RAM, 4个PLLs. 在其内部配置Nios II软核处理器;
l EPCS16,串行flash主要存放硬件的配置信息和程序代码,断电后可以保存数据;
l SRAM采用双片IDT公司的IDT71V416,系统在SRAM内运行程序;
l USB Interface提供了与外部USB控制芯片CH372的接口;www.51kaifa.com
l 在SOPC Builder中添加Avalon Tri-State Bridge, 它实现了SRAM,USB Interface与CPU内部Avalon总线的连接[1];
l I/O口接受来自ECU的控制信号;
l PWM模块根据本次仿真后的轮子速度发送相应频率的方波信号至ECU。
如图1所示,系统通过PLL锁相环把外部输入时钟倍频到所需的80.0MHZ;通过I/O口与其他设备交换需要处理的数据,把处理过后的数据通过CH372传递给上位机PC机显示。

图1 系统结构功能图
3 USB接口的硬件设计
CH372是一个USB总线的通用接口芯片,是同类产品CH375的功能简化版本,内置了USB1.1通讯中的底层协议,提供一对主端点和一对辅助端点.支持控制传输、批量传输和中断传输。CH372支持SLAVE设备方式(CH375还支持HOST主机方式及其模式下的串行通讯方式)。在本地端,CH372具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接至MCU的系统总线上。并且CH372所需外围电路十分简单,只需要一个晶振和两个电容,芯片的D+、D-引脚可直接与计算机USB接口的D+、D-信号线相连。www.51kaifa.com
CH372内部集成了USB接口SIE、数据缓冲区、被动并行接口、命令解释器、电压调整器、控制传输的协议处理器、通用的固件程序等。芯片内部设置了5个物理端点:端点0是默认端点.支持上传和下传,上传和下传缓冲区各为8个字节;端点1包括上传端点和下传端点,每个端点缓冲区为8个字节;端点2也包括上传端点和下传端点,每个缓冲区为64个字节。芯片具有两种工作模式:内置固件模式和外置固件模式。内置固件模式下屏蔽了相关的USB协议.芯片自动完成标准的USB枚举配置过程.完全不需要本地端的MCU做任何处理,并且CH372自动处理默认端点0的所有事务.端点1的下传端点被禁止.端点1的上传端点为中断端点.端点2的上传端点作为批量数据发送端点,端点2的下传端点为批量数据的接受端点,本地端的MCU只是负责数据交换:在外置固件模式下,由外部MCU根据需要自行处理各种USB请求.从而可以灵活实现符合各种USB类规范的设备。本系统所采用的是内置固件模式。
具体的硬件电路图如图2所示。

图2 嵌入式USB通信模块电路图
其中USB接口的设计方案很多.主要有两种类型:一种是MCU和USB接口芯片分离式结构,此类方案的特点是成本低,开发难度较低。另一种方案是采用嵌入式结构.即采用带USB接口的MCU或内嵌MCU的USB接口芯片此类方案的特点是成本高,不适用于简单和低成本的数据采集系统。本文提出的设计方案属于MCU和USB接口芯片分离式结构.但是与其它同类方案相比,它具有成本更低,设计更简单、实用,并且开发周期更短等特点。传统的分离式的方案要用普通I/O口来实现对CH372芯片的控制,而在这个设计中用Verilog HDL硬件描述语言写了一个接口实现了对CH372的整体控制,接口有以下信号:
(1) 输出信号:片选信号(CS#)、读信号(RD#)、写信号(WR)、地址信号A0;
(2) 输入信号:中断信号(INT#)低电平有效;
(3) 三态信号:数据端口(D0~D7);
通过硬件完成信号时序的控制以及读写信号的建立和保持时间。传统的控制器用软件来完成时序以及建立和保持时间的控制,程序烦琐,而使用针对CH372的硬件接口,可以只简单的把数据写到端口,各信号之间时序的控制由硬件来完成,效率更高。其中地址输入的建立时间(TAS)为10ns(CH372最小值为5ns),有效的写选通脉冲的宽度(TWW)和读选通脉冲的的宽度(TRW)为100ns。写选通后的数据保持时间(TIH)为10 ns。图3为CH372的时序图。

图3 CH372时序图
4 USB接口的软件设计
4.1固件程序设计
在内置固件模式下.CH372屏蔽了相关的USB协议,并提供一些常用的命令供开发者直接调用。如RESET_ALL用来执行硬件复位,调用SET_USB_ID可设置USB的厂商识别码和产品识别码.GET_STATUS用来获取中断状态,RD_USB_DATA从当前USB中断的端点缓冲区读取数据块并释放缓冲区,WR_USBDATA5向USB端点1的上传缓冲区写入数据等等。对于需要输入或输出数据的命令.可以通过CH372的A0引脚来控制:即当A0=1时总线DO-D7上可以写命令,A0=0时可以写数据。单片机通过8位I/O口对CH372芯片进行读写,所有操作都是由一个命令码、若干个输入数据和若干个输出数据组成,部分命令不需要输入数据,部分命令没有输出数据。命令操作步骤如下:
(1)在A0为高电平时向命令端口写入命令代码;
(2)如果该命令具有输入数据,则在A0为低电平时依次写入输人数据,每次一个字节;
(3)如果该命令具有输出数据,则在A0为低电平时依次读取输出数据,每次一个字节;
(4)命令完成,可以暂停或者转到(1)继续执行下一个命令。
在Nios II IDE的编辑环境下,具体的写命令,写数据,读数据的函数代码如下;
/*调用指针*CH372CMD、*CH372DATA来通过A0地址的不同使得CH372区别送到数据总线(D7-D0)是命令还是数据*/
volatile alt_u8 *CH372CMD = (alt_u8 *)(CH372_BASE + 4);//写命令,写到*CH372CMD的数据被理
//解为命令,其中CH372_BASE是CH372接口//在整个系统中的基地址
volatile alt_u8 *CH372DATA = (alt_u8 *)(CH372_BASE);//写数据,写到*CH372DATA的数据被理解
//为数据
void CH372WRCMD(alt_u8 command)
{
*CH372CMD = command;//把命令写到CH372CMD地址中,A0自动置1,CH372把D7-D0上的数据理解//为命令
alt_u8 i;
for (i=0; i<100; i++);//两个命令或者一个命令与一个数据之间的间隔时间
}
void CH372WRDATA(alt_u8 data)
{
*CH372DATA = data;//把数据写到CH372DATA地址中,A0自动置0,CH372读取D7-D0上的数据
alt_u8 i;
for (i=0; i<100; i++);//数据与数据之间的间隔时间
}
alt_u8 CH372RDDATA(void)
{
return (*CH372DATA);//返回从D7-D0读取到的数据
alt_u8 i;
for (i=0; i<100; i++);
}
固件程序流程图如图4所示。

图4 固件程序流程图
4.2 应用程序软件接口函数介绍
CH372在计算机端提供了应用层接口,应用层接口是由CH372动态链接库DLL提供的面向功能应用的API,所有API在调用后都有操作状态返回,但不一定有应答数据。CH372动态链接库提供的API包括:设备管理API、数据传输API和中断处理API。
设备管理API主要包括:①打开、关闭设备,CH375OpenDevice,CH375CloseDevice;②获取USB设备,配置描述符,CH375GetDeviceDescr,CH375GetConfigDescr;③复位USB设备,CH375ResetDevice。
数据传输API主要包括:①读取数据块CH375ReadData;②写出数据块CH375WriteData。
中断处理API主要包括:①读取中断数据CH375ReadInter;②设定中断服务程序CH375SetIntRoutine。
5 结 论
基于Nios II软核处理器的USB接口设计方案有比较好的系统稳定性及可靠性。由于SOPC Builder开发环境的完备功能,设计者可以把精力集中在系统整体构架和功能上来,而无须过多考虑电路实现细节,缩短了产品的研发周期。同时由于处理器采用软核的形式实现,所以其功能可以根据需要进行定制。
系统使用CH372接口芯片实现了对高速信号的数据传输,安装简单,支持即插即用;无需外接电源,可直接由USB接口提供5V电压;较常规的基于PCI、ISA的高速数据采集系统,成本更低。USB接口的应用处在高速发展阶段,使用USB2.0可以达到480M/s的通信速度,可以满足大部分高速信号的数据传输要求。
参考文献
[1] 任爱琴,初秀琴,常存.基于FPGA的嵌入式系统设计.西安电子科技大学出版社, 2004.181-246.
[2] 孙耀成,译.HYD J.USB设计应用实例[M].中国铁道出版社,2003.
[3] Altera公司.Nios II Software Developer’s Handbook. [EB/OL]. (2005-10). [2006-05-27]. http://www.altera.com.
[4] 南京沁恒公司.CH372DS1 Datasheet [EB/OL].(2004-05-18). http:∥wch.com.
[5] 李开春 朱伟兴. USB接口芯片CH375在一种电能测量仪系统中的应用. 微计算机信息,2006,9-2:242-244.
|