《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于CY7C68013的高速数据传输系统的设计
基于CY7C68013的高速数据传输系统的设计
来源:电子技术应用2010年第7期
熊俊俏,刘 峥
武汉工程大学 电气信息学院,湖北 武汉430073
摘要: 采用Cypress公司的CY7C68013芯片设计了通用的USB接口,结合MAX7128的串/并/串转换和光纤收发系统,实现数据的高速传输。介绍了系统的软硬件结构, 详细介绍了固件设计和WDM驱动程序的结构、特性、工作机制、软件流程及与USB设备通信的方法。测试表明,该系统达到了预期的设计目标和实用要求。
中图分类号: TP334.7
文献标识码: A
文章编号: 0258-7998(2010)07-0073-03
Design and realization of high-speed data transmission system based on CY7C68013
XIONG Jun Qiao,LIU Zheng
College of Electrical and Electronic Engineering, Wuhan Institute of Technology, Wuhan 430073,China
Abstract: A common USB interface was designed based on Cypress′s CY7C68013 chip, jointed with serial- parallel or parallel-serial conversion by MAX7128 and optical transceiver systems, the high-speed data transmission was achieved. The system hardware and software architecture was described. All were described in detail including firmware design, structure、characteristics and working mechanism of WDM driver software, software processes and methods to communicate with USB devices. The testing shows that the system can absolutely fulfill the design and practical requirements.
Key words : CY7C68013;USB2.0;MCU;WDM

    USB控制器是以USB串口引擎为主的专用集成电路,并可延伸至对其进行管理的MCU以及相应的软硬件。目前市场上供应的USB控制器主要有2种:带USB接口的单片机(MCU)或纯粹的USB接口芯片。带USB接口的单片机可分为2类:一类是从底层设计专用于USB控制的单片机,如Cypress公司的CY7C63513、CY7C64013等[1],由于开发工具的专用性,往往应用于各种专业应用场合,如微机主板等[2-4];另一类是增加了USB接口的普通单片机,如Intel公司的8X931、8X930以及Cypress公司的EZ-USB,由于均基于8051内核,因而得到了广泛应用。
1 CY7C68013与系统结构简介
    Cypress公司的CY7C68013芯片是集成USB2.0协议的微处理器,支持12 Mb/s的全速传输和480 Mb/s的高速传输,具有控制传输、中断传输、块传输和同步传输4种传输方式,内部包括一个增强型8051处理器内核、一个串行接口引擎(SIE)、一个USB收发器、8.5 KB片上RAM和4 KB FIFO存储器以及一个通用可编程接口(GPIF)。8051可工作在48 MHz/24 MHz/12 MHz时钟频率,内部可自动产生480 MHz的频率供USB2.0串行收发引擎使用。由于数据缓冲器与SIE相连接,数据进入收发器后,通过SIE可直接转向FIFO,通过8 bit或16 bit数据接口与外设连接,存取数据。微控制器不参与数据传输,但允许以FIFO或RAM的方式访问这些共享FIFO,从而实现低速控制、高速传输。CY7C68013有GPIF/SLAVE FIFO/GPIO 3种接口模式,本系统采用Slave FIFO接口模式,选用控制传输和块传输2种方式,外部控制器可像普通FIFO一样对FIFO进行读写。
    本数据传输系统分为3部分:发送端和接收端、CY7C68013控制器、具有并/串(或串并转换)功能的CPLD芯片(MAX7128)以及光纤传输模块。其中,CY7C68013和MAX7128之间采用并行连接方式,MAX7128与激光发送(接收)模块间是串行连接,如图1(a)所示。

    图1(a)中,主机将数据发送到CY7C68013端点FIFO缓冲器中,然后CY7C68013将端点FIFO中的数据分字节放到一组I/O口上,并且使能读信号,MAX7128读取I/O上的逻辑值,当接收512 B后,MAX7128将这512 B的数据从低到高串行发送给激光发送模块;数据经过光纤传输,进入激光接收模块,输出串行信号,通过MAX7128实现串并转换,数据宽度为8 bit,通过CY7C68013的从属FIFO的写入时序即可将数据写入CY7C68013的端点缓冲器中。
    USB数据传输接口开发分为4个层次,接口硬件、接口软件、驱动和应用程序如图1(b)所示。
2 固件程序设计
    由于高速数据传输不需要固件程序参与,固件程序仅仅处理主机的发送请求。在发送端,固件将数据放置到I/O口上供MAX7128读取;在接收端,MAX7128完成串并转换后,将数据用特定时序写入CY7C68013。此时只需设定寄存器,固件程序相对简单,图2为发送和接收固件程序流程。

    CY7C68013芯片固件程序负责处理主(从)机发送来的各种请求,以完成与外围电路间的各种数据传输。本系统固件一共包含九个程序文件,其中的头文件分别定义了CY7C68013中的寄存器名和特殊功能寄存器、通用的CY7C68013常量、数据类型和宏、特殊功能寄存器所需要的同步延迟宏、用来描述CY7C68013状态的各种USB描述符、INT2和INT4中断跳转表等。主函数负责处理标准USB请求和自定义请求,控制整个硬件系统的运行。接收端固件主循环不用做任何操作,与发送端程序流程图完全相同。其固件运行的主程序清单如下,负责处理主机发出的各种USB请求。
……
    TD_Init();//初始化用户设备
    EZUSB_IRQ_ENABLE();//使能USB中断(INT2)
    EZUSB_ENABLE_RSMIRQ();//使能唤醒中断
    INTSETUP |=(bmAV2EN | bmAV4EN);//使能INT2
//和INT4中断跳转向量
    USBIE |=bmSUDAV | bmSUTOK | bmSUSP | bmURES |
bmHSGRANT;//使能所选择的中断
    EA=1;//打开8051中断
    UsbDisconnect();
    CKCON=(CKCON&(~bmSTRETCH)) | FW_STRETCH_
VALUE;//设为0值
    Sleep=FALSE;//清除sleep标志
    while(TRUE)//主循环
    {
        if(GotSUD)//等待SETUP令牌数据的到来
        {
            ParseControlTransfer();//处理SETUP令牌数据
            GotSUD=FALSE;//清除SUDAV标志
        }
        if (Sleep)
        {
            Sleep=FALSE;//清除sleep标志
            do
            {
            EZUSB_Susp();//置8051为空闲
            }
            while(!Rwuen&&EZUSB_EXTWAKEUP());
            EZUSB_Resume();//从空闲状态恢复
        }
        TD_Poll();//完成用户任务
    }
……
    需要强调的是:固件程序设计完成后需要进行调试,确保系统硬件正常工作。
    (1)工作时钟频率的确定:晶振两引脚对地电压均为1.6 V左右,此时CLKOUT引脚默认输出为24 MHz,当输出48 MHz时,电压为2.5 V。
    (2)电平触发中断方式:中断后一定要读上次传输状态寄存器(命令40 H~45 H),以清除中断寄存器中的中断标志,这样中断输出才能变回高电平。
    (3)使能端口:接收到Setup包后,必须用ACKsetup命令重新使能端口为低电平。
    (4)缓冲区数据标志:在向IN端点写完数据后,必须设置EP2BCH:L,指明缓冲区中的数据有效,示意可以发送到主机。当IN端点的数据被外设读走后,一定要调用OUTPKTEND来清除缓冲区数据,否则无法向IN端点写入数据。
    在USB设备枚举的过程中,可采用USB调试工具BusHound软件来抓取它和主机的通信数据进行分析,以检查硬件和固件程序的工作是否正确。
3 驱动程序设计
    为了配合CY7C68013的工作,需要有驱动程序[6,7]以使上位机程序能正常访问USB芯片。以Cypress公司提供的参考程序为基础[1],增加自定义控制请求即可。
    由于驱动程序必须和系统的总线驱动进行通信,系统总线驱动为WDM(Win32 Driver Model)驱动。因此,USB驱动程序采用WDM设备驱动程序[8]。由于USB总线驱动程序(USBD)一般由操作系统提供,负责与实际的硬件打交道,因此,重点是开发USB设备驱动程序(USB Device Driver)。USB设备的WDM驱动程序是通过创建URB(USB请求块),并向USB总线驱动程序发送包含URB的IRP来实现对USB设备信息的发送和接收。此外,USB设备驱动程序除负责处理应用程序的I/O请求外,还要处理PnP请求。
    CY7C68013的驱动程序包括2部分:usbfft.sys,专用于下载芯片的固件程序;loaderfft.sys,上位机和CY7-
C68013进行通讯的部分,用于实现数据收发功能。这2个部分都存放在上位机上,当系统上电或USB连接时,固件部分将自动下载到芯片的RAM中供8051执行。
4 应用程序设计
    上位机是人机交互的平台,需要良好的操作界面。本系统通过VB6.0开发了上位机应用程序,运行界面如图3所示。

    应用程序是完成数据发送与接收并且对系统进行有效控制的平台,不仅需要向CY7C68013发送数据,还需要将接收的数据显示出来并保存。此外为了系统测试的方便,增加了误码率和速率测试模块,以测试系统的整体性能。
    本系统上位机的主要功能有:(1)文件的发送;(2)文件的接收;(3)速率测试;(4)误码率测试;(5)系统控制,用来获取CY7C68013描述符以及其内部寄存器的情况,并对整个系统进行控制,如使能CY7C68013的数据输出功能及片内数据转移功能等。
    系统中定义了6个时间控件来完成数据的发送与接收,timer1、timer3和timer4分别完成文件、误码率及速率测试的发送,Timer2、timer6和timer8分别完成文件、误码率及速率测试的接收。另外定义了一个时间控件来控制开启哪一个接收数据时间控件。为了保证有效判断所接收到的数据是文件、速率测试还是误码率测试数据,在timer1、timer3和timer4发送前都先发送一个512 B的前导包。全为1时表示下一个数据包包含着速率测试数据,全为2时表示下一个数据包包含着误码率测试数据,全为3时表示下一个数据包包含着文件数据。这样就能判断出应该开启哪一个接收时钟。
    具体的文件数据处理方法是:文件打开后,先将文件缓冲,定义一个二维数组:行512 B,列由文件大小决定。数组的第一个512 B前20 B记录所发送文件的大小,并且在最开始的5 B以0xAA填充,表明这个数据包是全部文件的开始,当文件大小不足填满最后的512 B时,数据补0,但数组结尾为0xAA。
    采用CY7C68013设计的高速数据传输系统,经过测试,达到了设计要求,实现了数据的高速传输,为下一步开展数据编码/译码、调制/解调研究打下了良好的基础。
参考文献
[1] www.cypress.com.EZ-USB FX2 Technical Reference Manual.
[2] 戴红梅,胡仁杰.USB(通用串行总线)及USB外设的开发[J].电测与仪表,2000(12):53-56.
[3] 陈明智,李锋,尚淮.USB通信协议分析和系统设计[J].自动化与仪器仪表,2006(6):46-49.
[4] 邹建彬,高凯,张尔扬.基于USB 2.0协议的高速图像传输系统[J].现代电子技术,2009(22):195-197.
[5] 李鉴,黄大勇.基于CY7C68013的USB数据采集系统[J].微计算机信息.测控自动化,2009,25(1-1):97-98+154.
[6] 陆原,魏杰,孟玮.Windows XP环境下USB设备驱动程序的开发[J].国外电子元器件,2007(7):28-30.
[7] 陈新忠.USB设备驱动程序设计[J].电子产品世界,2009(5):48-51.
[8] 王跃钢 ,韩心中.基于WDM模式的USB设备驱动程序开发[J].微计算机信息(管控一体化),2006,22(8-3):
305-307.

此内容为AET网站原创,未经授权禁止转载。