摘要:本文阐述了利用CYPRESS公司EZ-USB FX2系列USB2.0集成芯片CY7C68013的高速Slave FIFO通用外部接口来实现PC机和LED点阵显示屏间数据通讯的设计方案,给出了其接口电路的硬件原理及底层软件的设计过程。
关键词:USB2.0;CY7C68013;FIFO;LED显示
1 引言
LED显示屏具有亮度高,故障低、能耗少、使用寿命长、显示内容多样、显示方式丰富等优点,可广泛用于公路、金融、证券、车站、码头、体育场馆等公共场合,其显示数据通常来自上位PC机,这就要求有一个高速通道来传输大量的显示数据,USB2.0接口无疑是一个很好的解决方案。
USB由总线提供电源,传输时具有CRC检错、纠错能力,能实现真正的实时热插拔,并支持多个外设连接到同一个连接器上,从而缓解PC系统资源冲突,这些突出的优点使得USB1.x在PC机外部设备上得到了广泛的应用, USB2.0传输速度高达480Mb/s,是USB1.x的40倍,并向下兼容USB1.x。这样就使得快速大量的数据传输得以实现。
在此强调一下两个下文将要用到的概念:IN端点和OUT端点。此处的IN、OUT都是相对于上位PC机而言,IN端点指用来接收上位PC机数据的端点,OUT端点则是往PC机发送数据的端点。
2 CY7C68013简述
带高速Slave FIFO通用外部接口的CY7C68013是CYPRESS公司推出的USB2.0集成微处理芯片,片上集成了USB收发器(SIE)、增强型8051单片机(其指令系统与普通8051单片机完全兼容)及8k程序存储区? 共有4个支持USB2.0高速传输的“大”端点(2个IN端点和2个OUT端点)和4kB片内RAM?该RAM 可配置为4个“大”端点的FIFO,其中2个“大”端点可以配置为双、三、四缓冲区(FIFO),一个“大”端点最大可配置为2kB FIFO,更重要的是?该芯片提供了两个用于实现USB2.0高速传输的可编程外部设备接口以及Slave FIFO和GPIF,这2个通用外部接口可通过与4个“大”端点协调工作来实现USB2.0的高速传输,本文只讨论 Slave FIFO可编程外部设备接口的应用。
CY7C68013有56pin、100pin、128pin三种封装,其中56pin已具备所有USB2.0功能,而100pin则在56pin基础上增加了更多I/O和更多GPIF模式下的控制信号,128pin又在100pin基础上增加了用于扩充数据存储区的地址总线和数据总线。本应用就是基于可编程外部设备接口Slave FIFO,大量数据传输可直接由FPGA处理而无需扩充外部数据存储区,在此选择最经济的56pin CY7C68013 即可满足设计要求, 其体系结构如图1所示。
3 Slave FIFO简介
CY7C68013 虽然可以用内置增强型8051单片机直接处理USB2.0数据,但这样会受到单片机速度的限制而无法实现USB2.0的高速传输。通常为了解决这一矛盾,可使CY7C68013的片上增强型8051单片机仅用于辅助处理USB设备请求和设备列举以及协调内部“大”端点和外部数据处理设备(如 FPGA,ASIC? DSP,IDE等)的工作,这样USB数据流就可绕过慢速的8051单片机而直接从“大”端点FIFO进入快速外部主设备或从外部主设备进入“大”端点FIFO,以实现USB2.0高速传输。由于CY7C68013“大”端点FIFO的读写是受外部数据处理设备控制的,所以这些FIFO称为 Slave FIFO,上述这种实现USB2.0高速传输的模式称为 Slave FIFO模式。
4 CY7C68013固件程序设计
为方便应用开发,CYPRESS 公司为CY7C68013所属的EZ-USB FX2系列提供了免费下载的Keil C环境下的USB固件库,以及C51编写的固件构架程序和一些典型应用的范例程序,这使得开发者只需理解USB数据传输原理,而不用钻入艰深的USB底层协议就可完成开发,从而大大缩短开发时间,以便把更多的精力放在外部接口设计上。
下面仅就固件程序设计进行论述,整个固件应用程序通常包含3个程序文件:
DSCR.A5——设备描述符表文件,该文件详细记录了USB外围设备的相关信息,这里需要注意的是设备描述符和端点描述符。设备描述符给出了USB的一般信息,其中VID/PID 码十分重要,上位PC机根据这个码值才能正确加载USB应用设备驱动程序。至于端点描述符,每个端点都有,上位PC机根据端点描述符的内容来决定每个端点的带宽要求。本设计用1个“大”端点EP2来接收上位PC机的显示数据;另用一个“小”端点EP1来处理上位机和通讯接口间开发者自定义的通讯协议,以使上位机可以在需要的时候查询已被传送的显示数据的接收状况,从而进一步保证显示数据的有序传输。
FW.C——固件构架程序。该固件构架程序主要用于实现USB设备列举的诸多控制传输和USB总线协议的相关工作,完成了USB与外部兼容设备所需的基本功能。该程序的核心函数 void SetupCommand?void? 称作设备请求剖析器,用于处理上位PC机发送的标准USB设备请求以实现USB设置命令。
APP.C ——开发者在相关范例应用程序的基础上通过修改或增加一些应用程序段而形成的面向实际的应用程序。本应用中主要修改了Slave FIFO的操作方式以使Slave FIFO接收数据的速度能够达到最大值,所采用的设置方法如下:
通过寄存器EP2CFG可将EP2设置为OUT端点。当需要首先考虑数据准确性时,可将该端点传输模式设置为批量传输,其最大包长为512字节,4缓冲区(FIFO)。而当需要传输视频数据时,可将该端点的传输模式设置为同步传输,最大包长1024字节,双缓冲区(FIFO)。
通过寄存器EP2FIFOCFG设置下面的内容:将“大”端点EP2设置为16位操作模式(一次可以操作2个字节)以与FD 16位宽度总线匹配; 再设置该OUT端点为AUTOOUT模式,这样来自上位PC机的数据就可以不通过CY7C68013上的8051单片机,而是自动地填充相应的“大”端点FIFO。
通过寄存器IFCONFIG设置这样的工作模式:用CY7C68013产生48MHz IFCLK时钟,将该时钟作为片上SlaveFIFO与外部主设备的工作时钟;数据的接收与发送设置为同步读写方式,这样在每个IFCLK 时钟的上升沿就可以读写2个字节,从而使数据读写速度可以达到96MHz byte/s。
本设计只使用了EP2这个“大”端点,而且 已将其配置为AUTOOUT操作模式。因此,CY7C68013可绕过片上8051而自动将USB数据接收到EP2的FI-FO中。
需要增加的程序段是CY7C68013片内8051单片机根据上位机查询回应当前数据接收状况,这个程序段和普通的8051单片机232串口通讯程序类似,不同的只是原来的232串行口中断被EP1 IN和EP1 OUT这两个USB2.0中断所替换,当EP1 OUT 端点收到上位PC机发来的数据时,将产生EP1 OUT中断来处理接收到的数据;同样当CY7C68013片内8051欲发往上位PC机的数据已通过EP1 IN发送完毕时,也会产生EP1 IN中断以使片内8051可以在该端点放入新的发送数据。
5 硬件设计
图2所示是FPGA与CY7C68013 的连接图,除将IFCLK作为FPGA输入时钟外,其它信号均在FP-GA和CY7C68013之间互连。由于FPGA片内RAM很小,本系统还使用了一片128k×8的高速静态RAM(型号为IS63LV1024,读写周期为15ns)作为数据暂存器。FPGA与CY7C68013、RAM、VT6103的硬件连接见图2。
从USB收到的来自上位PC机数据最终将被远端安装在LED显示屏屏体内的显示控制部件中,当RAM被填入预定数量的显示数据时,FPGA会从RAM中连续取出数据并送到与VT6103连接的4位数据输出端口,VT6103收到4位数据后,其内部会自动按照IEEE802.3规范对该数据进行4B5B?转换4位数据数据码为5位数据码?重新编码,然后将5B码送扰频器,再经片内整形后输出给以太网变压器,以驱动五类双绞线并将数据传给远端显示控制部件。
6 软件设计
本系统的外部主设备接口逻辑采用VHDL硬件描述语言,利用ALTERA公司QUARTUS II开发平台进行设计。软件设计是以FPGA为核心的,主要由下面3个并行执行的部分组成,在此每个部分分别设计为一个VHDL进程?process?:
进程1:外部主设备FPGA同步读写CY7C68013“大”端点FIFO的时序逻辑? 并把接收到的数据存入FPGA FIFO中。这部分只需要根据Slave FIFO读写时序进行设计,Slave FIFO时序图如图3所示。
这里需要引起注意的是两个建立时间:其一是tOEon,这个建立时间是从SLOE拉低到 Slave FIFO数据有效。其二是tSRD ,即从SLRD信号拉低到第1个同步读时钟上升沿的时间。这两个建立时间应大于等于CY7C68013数据手册规定的时间。由于该FPGA有59904 bit的片上RAM,这里使用其中4k byte的 RAM来生成FIFO结构,这样从Slave FIFO同步接收到的USB数据就可以直接存入FPGA片上的4k FI-FO中。图4是此进程的设计流程图。
进程2:用于完成将FPGA的FIFO中数据写入128kB RAM的设计。只要FPGA的FIFO中有数据,则该进程启动,FPGA会连续地把片内FIFO中取出的数据存入片外128kB的高速静态RAM (IS63LV1024)中,这个片外的128kB RAM分为两个64kB区,两个区轮流接收来自FPGA片内FIFO的数据,当一个区接收完规定的显示数据后,FPGA会置位send data flag去启动进程3,如果FPGA片内FIFO中还有数据,则FPGA会把RAM切换到另一个区继续接收片内FIFO中的数据,其设计流程图如图5所示。
进程3:此进程由send data flag信号启动,当发送数据标志被置位时,此进程启动。此后,FPGA开始从已完成显示数据接收的RAM区读取数据并送到4位宽度的数据输出口,此输出口与VT6103相连。VT6103以25MHz时钟每次接收半个字节(4bit),然后经片内4B5B编码、整形后将数据由差分输出口TX+和TX-串行输出,以把数据从USB2.0接口模块发给外部的显示处理模块。其设计流程图如图6所示。
其中,VT6103 接收显示数据时序如图7所示。每次接收4bit后,芯片内部都将自动对每次接收到的4bit数据进行处理并以100MHz的时钟频率串行差分输出给以太网变压器。