摘要 :本文阐述了利用 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 的 FI2 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 输入时钟外 ,其它信号均在 FP2 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 FI2 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 的时钟频率串行
差分输出给以太网变压器。