基于USB2.0接口传输的FPGA控制与实现

时间:2011-08-23

 

  USB是英文Universal Serial Bus的缩写,中文含义是“通用串行总线”。它是一种应用在计算机领域的新型接口技术。早在1995年,就已经有个人电脑带有USB接口了,但由于缺乏软件及硬件设备的支持,这些个人电脑的USB接口都闲置未用。1998年后,随着微软在Windows 98中内置了对USB接口的支持模块,加上USB设备的日渐增多,USB接口才逐步走进了实用阶段这几年,随着大量支持USB的个人电脑的普及,USB逐步成为个人电脑的标准接口已经是大势所趋。在主机端,推出的个人电脑几乎100%支持USB;而在外设端,使用USB接口的设备也与日俱增,例如数码相机、扫描仪、游戏杆、磁带和软驱、图像设备、打印机、键盘、鼠标等等。

  1 CY7C68013简介

  EZ-USB FX2芯片包括1个8051处理器、1个串行接口引擎(SIE)、1个USB收发器、8.5KB片上RAM、4KB FIFO存储器以及1个通用可编程接口(GPIF)。FX2是一个全面集成的解决方案,它占用更少的电路板空间,并缩短开发时间。EZ-USB FX2提供了一种独持架构,使USB接口和应用环境直接共享FIFO,而微控制器可不参与数据传输但允许以FIFO或RAM的方式访问这些共享FIFO。这种被称之为“量子FIFO”(Quantum FIFO)的处理架构,较好地解决了USB高速模式的带宽问题。

    Cypress公司的EZ-USBFX2系列芯片中的CY7C68013,这是一种带USB接口的单片机芯片,虽然采用低价的8051单片机,但仍然能获得很高的速度。它包括一个8051处理器、一个串行接口引擎(SIE),一个USB收发器、一个8.5kB片上RAM、一个4 kB FIFO存储器及一个通用可编程接口(GPIF)。FX2可提供全面集成的解决方案。它有56SSOP、100TQFP、128TQFP三种封装.支持usb1.1和usb2.0协议。CY7C68013主要具有如下特性:

  (1)芯片内有480 Mb/s的收发器(PLL和智能SIE),包含全部USB2.O物理层(PHY);

  (2)2、3、4倍增缓冲端点FIFO,以适应480 Mb/s的USB2.O传输速率;

  (3)内部嵌入可运行在48 MHz频率的增强型8051内核;

  (4)4个接口FIFO:它们都可以由外部和内部来提供时钟,端点FIFO与接口FIFO两者相结合可以实现缩短USB和外部逻辑电路数据传输的时间;

  (5)通用可编程接口(CPIF)作为一种编码状态设备,可实现时序管理,使得CY7C68013 FIFO达到无缝连接。CY7C68013集成了很多功能,设计时无需考虑外部物理层(PHY),从而大大降低了成本,并减少了芯片间高速信号布线的困难。

  2 系统的设计实现

  系统结构如图l所示,本设计中,应用程序是用户界面;USB驱动用于连接用户和底层硬件;USB2.O控制器68013用于FPGA和PC间的数据交互。

 

 


  2.1 硬件结构

  本系统硬件连接主要是由FPGA和USB2.0控制器,如图2所示。同时也可以根据实际系统的需要,用FPGA实现预定功能,硬件接口模式有Slave FIFO和GPIF两种接口模式。本方案采用Slave FIFO模式,当EZ-USB FX2工作于Slave FIFO时,外围电路可像普通FIFO一样对FX2中的端点2、端点4、端点6、端点8的数据缓冲区进行读写。图2展示了这种模式下FX2和外围电路的典型连接,其中,IFCLK为接口时钟,可由芯片CY7C68013产生(30 MHz/40 MHz),也可由外部输入(5MHz/48 MHz);FLAGA-FLAGD为FIFO标志管脚,用于映射FIFO的当前状态;SLCS#为从属FIFO的片选信号,低电平有效;FD[15∶O]为16位双向数据总线;FIFOADDR[1∶O]用于选择和FD连接的端点缓冲区;SLOE用于使能数据总线FD的输出;SLRD和SLRWR可分别作为FIFO的读写选通信号;外围电路可通过使能PKTEND管脚向USB发送一个IN数据包,而不用考虑该包的长度。


  2.2 系统软件

  系统软件设计主要包括3部分:VHDI代码、USB固件程序(Firmware)以及应用程序。

  2.2.1 VHDL程序设计

  VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。

  FPGA是通过Slave FIFO的方式和USB控制器CY7C68013相连的。FPGA读取数据,通过查询CY7C68013中FIFO的状态来判断是否可以进行读数据,主要是查询状态标志位FLAGC。读数据程序状态转移图如图3所示。


  状态1:在空闲时,接到命令,发起传输,使地址指向用于下传数据的FIFO。进入状态2;

  状态2:查询读状态的FIFO标志FLAGC,如果为FIFO为空,则继续等待,如果有数据则进入状态3;

  状态3:使读数据信号线有效,接收数据,接收完数据后进入状态4;

  状态4:如果FIFO中还有数据需要接收,则进如状态2,否则进入空闲状态。

  FPGA在上传数据时,原理基本相同,方向相反,采用不同的FIFO和查询状态标志位。

  2.2.2 固件编程

  固件编程就是对USB设备的各类寄存器进行配置的过程。固件程序是指运行在设备CPU中的程序,只有在固件程序运行时,外设才称之为具有给定功能的外部设备。固件要完成以下主要工作:

  (1)初始化工作;

  (2)对设备进行重新列举(ReNumeration);

  (3)响应中断,并对中断作相应的处理;

  (4)数据的接收与发送;

  (5)外围电路的控制。

  为了简化固件编程,CYPRESS提供了开发固件库和固件编程框架,只需在此基础上添加少量代码就可以完成固件编程。USB建立固件编程框架的文件见表1,在实际编程过程中,根据自定义,只需要修改Periph.c和Dscr.a51两个文件。固件代码固化到一片EEPROM中,设备加电后由FX2通过I2C总线自动加载到片内RAM后自动执行。设备功能、工作方式等均可以通过改写固件程序,重新配置。

  2.2.3 应用程序

  应用程序是系统与用户的接口,设备驱动程序提供应用程序访问底层硬件的接口。驱动程序采用了CyPress公司的通用驱动程序ezusb.-sys,完够满足本系统设计的要求。在驱动程序被系统加载后,它的许多进程处于Idle状态,需要应用程序去调用激活。应用程序利用Win32 API直接调用驱动程序,实现应用程序和驱动程序的信息交互。

  应用程序实现了数据和数据上传两个功能,在Windows操作系统中,只需要通过调用几条简单的文件操作API函数,就可以实现与驱动程序中USB设备通信。 Win32应用程序调用WDM驱动程序的Win32 API函数有5个:CreateFile(创建设备)函数;CloseFile(关闭设备)函数;ReadFile(从设备读取数据)函数;WriteFile(对设备写入数据)函数;DeviceContronl(设备控制)函数。对于DeviceloControl()函数的调用,驱动程序根据I/O控制命令来决定该如何获取应用程序的缓冲区地址。

  本设计就采用DeviceloControl函数来进行应用程序和WDM设备驱动程序间的通信。以下是DevicelIoControl的声明:

  DeviceIoControl(

  HANDLE hDevice;设备返回的句柄

  DWORD dwIoControlCode;驱动程序的控制命令

  LPVOID lpInBuffer;应用程序发给驱动程序的缓冲区地址

  DWORD nInBufferSize;应用程序发给驱动程序的缓冲区大小

  LPVOID lpOutBuffer;驱动发给应用程序的缓冲区地址

  DWORD lpOutBuffer;驱动发给应用程序的缓冲区大小

  LPDWORD lpBytesReturned;存放驱动程序实际返回字节数

  LPOVERLAPPED lpOverlapped;同步时置为NULL)

  3 测试结果

  3.1 PC下传数据

  FPGA采用系统时钟为50 M,为便于计算传输效率和传输可靠性,在应用程序中加载计时函数,下传数据每次发送100M,发送数据为位宽8 b的循环递增数列,结果显示下传数据速率为42.1 MB/s,在FPGA中用嵌入式逻辑分析仪查看接收的数据,如图4所示。每个u_slrd读脉冲,FPGA读取一个16 b数据,由于发送时是按照8 b发送,接收数据是16 b,所以每次接收到的16位数据,是2个8位数的组合。从图4中可以看出FPGA接收数据准确,无丢失数据的情况。


  3.2 PC接收数据

  在接收数据时,同理,应用程序每次接收100 M,将读取的数据以文件bin的形式存储在应用程序工程目录下,结果显示bin文件中数据准确。测得传输结果为 38.4MB/s,利用FPGA嵌入式逻辑分析仪分析结果如图5所示,每个u_slwr读脉冲,FPGA发送一个16 b数据。


  4 结束语

  本系统通过FPGA控制USB2.O控制器CY7C68013达到高速数据传输的目的,具有硬件结构简单、软件扩展性强、传输数据准确性高等特点,目前下传和上传速度分别为42.1MB/s和38.4 MB/s,完全可以应用于高速数据采集、高速数据通信、数字摄像设备及存储设备等。

 


  

参考文献:

[1]. 100M datasheet https://www.dzsc.com/datasheet/100M_2509927.html.


上一篇:一种IT服务管理解决方案
下一篇:智能网优 “优”然自得——网优整体解决方案

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料