1、NANO2 开发板实例之USB2.0 接口通信回环基于 FPGA 实现 USB2.0 接口通信, USB2.0 PHY 芯片是 Cypress68013, 68013 内部集成 8051 内核,USB2.0 芯片读写需要对 8051 核进行固件配置。一FX2 特性介绍1 1 介绍Cypress Semiconductor 公司的 EZUSB FX2 是世界上第一款集成 USB2.0 的微处理器,它集成了 USB2.0 收发器、SIE (串行接口引擎)、增强的 8051 微控制器和可编程的外围接口。FX2 这种独创性结构可使数据传输率达到 56Mbytes/s,即 USB2.0 允许的最大带宽。
2、在 FX2 中,智能 SIE 可以硬件处理许多 USB1.1 和 USB2.0 协议,从而减少了开发时间和确保了 USB 的兼容性。 GPIF(General Programmable Interface)和主/ 从端点 FIFO(8 位或16 位数据总线)为 ATA、UTOPIA、EPP、PCMCIA 和 DSP 等提供了简单和无缝连接接口。1 2 结构CY7C68013 结构图如图 1 所示。它有三种封装形式:56SSOP,100TQFP 和128TQFP。1 3 特征 内嵌 480MBit/s 的收发器,锁相环 PLL,串行接口引擎 SIE集成了整个 USB 2.0 协议的物理层。 为适
3、应 USB 2.0 的 480MBit/s 的速率,FIFO 端点可配置成 2,3,4 个缓冲区。 内嵌可工作在 48MHz 的增强型 8051,它具有以下特征:- 具有 256Byte 的寄存器空间,两个串口,三个定时器,两个数据指针。- 四个机器周期(工作在 48MHz 下时为 83.3ns)即组成一个指令周期。- 特殊功能寄存器(包括 I/O 口控制寄存器)可高速访问。- 应用 USB 向量中断,具有极短的 ISR 响应时间。- 只用作 USB 事务管理,控制,不参与数据传输,较好地解决了 USB 高速模式的带宽问题。 “软配置”USB 固件可由 USB 总线下载,片上不需集成 ROM。
4、 拥有四个 FIFO 接口,可工作在内部或外部时钟下。端点和 FIFO 接口的应用使外部逻辑和 USB 总线可高速连接。 内嵌通用可编程接口 GPIF,它是一个状态机,可充当主控制器,提供外部逻辑和USB 总线的 “无胶粘贴” 。 一种单片 USB 2.0 外设解决方案,不需要外部的协议物理层,FX2 把所有的功能集成在一个芯片上。二、Slave FIFO 传输2 1 概述当有一个与 FX2 芯片相连的外部逻辑只需要利用 FX2 做为一个 USB 2.0 接口而实现与主机的高速通讯,而它本身又能够提供满足 Slave FIFO 要求的传输时序,可以做为 Slave FIFO 主控制器时,即可考
5、虑用此传输方式。Slave FIFO 传输的示意图如下:主机 收发器和 SIEFIFO 端点缓冲区8051 固件外部逻 辑SlaveFIFO从控制器在这种方式下,FX2 内嵌的 8051 固件的功能只是配置 Slave FIFO 相关的寄存器以及控制 FX2 何时工作在 Slave FIFO 模式下。一旦 8051 固件将相关的寄存器配置完毕,且使自身工作在 Slave FIFO 模式下后,外部逻辑(如 FPGA)即可按照 Slave FIFO 的传输时序,高速与主机进行通讯,而在通讯过程中不需要 8051 固件的参与。2 2 硬件连接 (标准)在 Slave FIFO 方式下,外部逻辑与 F
6、X2 的连接信号图如下:IFCLK:FX2 输出的时钟,可做为通讯的同步时钟;FLAGA,FLAGB ,FLAGC , FLAGD:FX2 输出的 FIFO 状态信息,如满,空等;SLCS:FIFO 的片选信号,外部逻辑控制,当 SLCS 输出高时,不可进行数据传输;SLOE:FIFO 输出使能,外部逻辑控制,当 SLOE 无效时,数据线不输出有效数据;SLRD:FIFO 读信号,外部逻辑控制,同步读时,FIFO 指针在 SLRD 有效时的每个IFCLK 的上升沿递增,异步读时,FIFO 读指针在 SLRD 的每个有效无效的跳变沿时递增;SLWR:FIFO 写信号,外部逻辑控制,同步写时,在
7、SLWR 有效时的每个 IFCLK 的上升沿时数据被写入,FIFO 指针递增,异步写时,在 SLWR 的每个有效无效的跳变沿时数据被写入,FIFO 写指针递增;PKTEND:包结束信号,外部逻辑控制,在正常情况下,外部逻辑向 FX2 的 FIFO 中写数,当写入 FIFO 端点的字节数等于 FX2 固件设定的包大小时,数据将自动被打成一包进行传输,但有时外部逻辑可能需要传输一个字节数小于 FX2 固件设定的包大小的包,这时,它只需在写入一定数目的字节后,声明此信号,此时 FX2 硬件不管外部逻辑写入了多少字节,都自动将之打成一包进行传输;FD15:0:数据线;FIFOADR1:0:选择四个 F
8、IFO 端点的地址线,外部逻辑控制。2 3 Slave FIFO 的几种传输方式231 同步 Slave FIFO 写同步 Slave FIFO 写的标准连接图如下:同步 Slave FIFO 写的标准时序如下:IDLE:当写事件发生时,进状态 1;状态 1:使 FIFOADR1:0指向 IN FIFO,进状态 2;状态 2:如 FIFO 满,在本状态等待,否则进状态 3;状态 3:驱动数据到数据线上,使 SLWR 有效,持续一个 IFCLK 周期,进状态 4;状态 4:如需传输更多的数,进状态 2,否则进状态 IDLE。状态跳转示意图如下:几种情况的时序图示意如下(FULL,EMPTY,SL
9、WR ,PKTEND 均假定低有效):图示 FIFO 中本来没有数据,外部逻辑写入第一个数据时的情况。图示假定 FX2 设定包大小为 512 字节,外部逻辑向 FIFO 端点中写入的数据达 512 字节时的情况。此时 FX2 硬件自动将已写入的 512 字节打成一包准备进行传输,这个动作就和在普通传输中,FX2 固件向 FIFO 端点中写入 512 字节后,把 512 这个数写入 EPxBC 中一样,只不过这个过程是由硬件自动完成的。在这里可以看出“FX2 固件不参与数据传输过程”的含义了。外部逻辑只须按上面的时序图所示的时序向 FIFO 端点中一个一个字节(或字)地写数,写到一定数量,FX2
10、 硬件自动将数据打包传输,这一切均不需固件的参与,由此实现高速数据传输。图示的是 FIFO 端点被写满时的情况。232 同步 Slave FIFO 读:同步 Slave FIFO 读的标准连接图如下:同步 Slave FIFO 读的标准时序如下:IDLE:当读事件发生时,进状态 1;状态 1:使 FIFOADR1:0指向 OUT FIFO,进状态 2;状态 2:使 SLOE 有效,如 FIFO 空,在本状态等待,否则进状态 3;状态 3:从数据线上读数,使 SLRD 有效,持续一个 IFCLK 周期,以递增 FIFO 读指针,进状态 4;状态 4:如需传输更多的数,进状态 2,否则进状态 ID
11、LE。状态跳转示意图如下:几种情况的时序图示意如下(FULL,EMPTY,SLRD,SLOE 均假定低有效):图示正常情况时的时序。图示 FIFO 被读空时的情况。几种情况的时序图示意如下(FULL,EMPTY,SLWR ,PKTEND 均假定低有效):图示 FIFO 中本来没有数据,外部逻辑写入第一个数据时的情况。三、测试 USB 接口:对于 USB 接口的测试,本次实验控制开发板上面的 USB 接口实现与 PC 机的通信。用 usb2.0 线连接 pc 与开发板 usb 接口,先下载 s3_dram.bit 程序,在没有掉电的情况下,打开相应的 EZ-USB 软件(ez-usb 为 usb2.0 接口 PC 端驱动,安装文件在 “CY7C68013 开发相关工具” 目录下)。在使用前,接上 USB2.0 接口到 PC 端,PC 端设备管理器可以识别到 USB 设备,如果没有识别到 USB 设备,需要手动安装驱动,驱动文件为 ezusbw2k.inf(测试目录下)的文件,手动选择 inf 所在目录。