打印

<原创>基于fifo模式的USB2.0和FPGA通讯接口设计(申请加精)

[复制链接]
15850|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
w4wind315|  楼主 | 2010-1-14 15:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 w4wind315 于 2010-1-21 09:16 编辑

基于FIFO模式的FPGA USB2.0通讯接口设计

作者:上海茂晶杨文达samy@gfei.com.hk
0 引 言
  USB(通用串行总线)是英特尔、微软、IBM、康柏等公司1994年联合制定的一种通用串行总线规范,它具有数据传输速度快,成本低,可靠性高,支持即插即用和热插拔等优点,迅速得到广泛应用。
  在高速的数据采集或传输中,目前使用较多的都是采用USB 2.0接口控制器和FPGADSP实现的,本设计在USB 2.0接口芯片FT2232H的同步 FIFO模式下,利用FPGA作为外部主控制器实现和FT2232H 内部的FIFO进行控制,以实现数据的高速传输。该模块可普遍适用于基于USB 2.0接口的高速数据传输或采集中。
  l 系统硬件模块设计
  1.1 系统硬件框图
1中展示了 FIFO方式下FT2232H FPGA的典型连接。其中,ADBUS[7..O]8位双向数据总线OE#用于使能数据总线ADBUS的输出; RD#WR#可分别作为FIFO的读写选通信号;CLK为同步时钟输出;RXF#FIFO接受数据标志位为当为low时候可以读取数据;TXE# FIFO发送数据标志位当为low时可以写入操作。
 

usb文章.pdf

558.74 KB

相关帖子

沙发
w4wind315|  楼主 | 2010-1-14 15:04 | 只看该作者
1.2 USB 2.0接口芯片FT2232H
1.2.1 FT2232H的结构特点
FT2232H内部结构图如图1所示。FT2232H有2个独立的UART/FIFO控制器,用于控制异步数据、245 FIFO数据、光电隔离(高速串口)或在安装程序命令时控制Bit-Bang模式;USB协议引擎控制和管理UTMI PHY与FIFO之间的接口,负责电源管理和USB协议规范;双端口FIFO TX缓冲区(4KB)存储来自主机PC的数据,并通过多用途的UART,FIFO控制器使用数据;双端口FIFO RX缓冲区(4KB)存储来自多用途UART/FOFO控制器的数据,然后再将数据送至主机;复位发生器模块上电时为设备内部电路提供可靠的供电复位。 RESETn输入引脚允许外部设备重置FT2232H。如果不使用RESETn,应将其连接到VCCIO(+3.3 V);独立波特率发生器提供×16或×10的时钟信号给UART,通过1个14位比例因子和4个寄存位提供最佳的波特率调谐,决定UART可编程设置的波特率;+1.8 VLDO稳压器为系统核心,为USB收发器模块提供+1.8 V电压,其输入(VREGIN)必须接+3.3 v外接电源。VREGIN还需外接一只滤波电容器:通用收发器宏单元接口(UTMI)物理层为USBTX/RX数据提供全速/高速SERDES (serialise-deserialise劝能,还可提供时钟;当不使用外部E2PROM时,FT2232H默认为一个USB到双串口设备,添加一个外部93C46(93C56或93C66)E2PROM使每个器件的通道独立配置为一个串行UART(RS232)模式,并行FIFO(245)模式或高速串口(光电隔离)。外部E2PROM也可用于存储FT223-2H的USB VID,PID,设备驱动号和设备说明文字。
 
  
1.2.2 FT2232H的工作模式
  FT2232H有Ports模式、245FIFO、bit-bang和MPSSE等接口方式。
Ports模式是一种最基本的数据传输方式,其数据传输主要由固件程序完成,需要CPU的参与,因此数据传输速率比较低,适用于传输速率要求不高的场合。
245FIFO模式可以分为异步和同步2种方式,可以通过如FPGA等象普通FIFO一样对FT2232H缓冲FIFO进行读写,FT2232H内部FIFO FIFO提供所需的时序信号、握手信号(满、空等)和输出使能等。这里就是在同步FIFO模式下实现USB 2.O接口和FPGA的数据通信。
可编程接口bit-bang是主机方式,bit-bang作为内部主机控制端点,可以软件编程读写控制波形,几乎可以对任何8/16 b接口的控制器、存储器和总线进行数据的主动读写,非常灵活。
MPSSE模式是FTDI公司的最大亮点之一。FT2232H内部MPSSE单元可以模拟多种串行协议,从而方便实现USB转换为其他协议,包括SPI,JTAG,I2C等接口,广泛应用于各种领域。

使用特权

评论回复
板凳
w4wind315|  楼主 | 2010-1-14 15:05 | 只看该作者
2 系统软件模块设计
  2.1 USB固件程序设计
应用中采用同步FIFO方式,使用内部输出60 MHz时钟,固件程序采用FTDI公司提供的固件程序D2XX框架,在其初始化函数中添加了用户配置代码。该设计中同步自动FIFO数据传输的初始化代码如下:#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#pragma comment(lib, "FTD2XX.lib")
#include "FTD2XX.h"
int main()
{
//FT_Open,FT_Close
FT_HANDLE ftHandle;
FT_STATUS ftStatus;
//FT_EE_Read
FT_PROGRAM_DATA ftData;
char ManufacturerBuf[32];
char ManufacturerIdBuf[16];
char DescriptionBuf[64];
char SerialNumberBuf[16];
//FT_SetBitMode
UCHAR Mask = 0xFF; //UCHAR ModeAsync= 0x01;
UCHAR ModeSync = 0x40;//FT_Write
DWORD BytesWritten;
unsigned char TxBuffer[65536];//FT_GetStatus
DWORD TxBytes;
DWORD EventDWord;//FT_Read
unsigned char RxBuffer[262144];
unsigned char RxBuffer1[1];
unsigned char RxBuffer2[2];
unsigned char flag[32];
unsigned char flag1;
unsigned char flag2;
DWORD RxCount = 0;
DWORD RxBytes = 10;
DWORD BytesReceived;
int i,j,m,n;
FILE *fp;
RxBuffer2[0]=0;
RxBuffer2[1]=1;
flag1=85;
flag2=170;
flag[0]=flag1;
flag[1]=flag1;
for(i=2;i<32;i=i+2)
  flag[i]=flag1;
for(i=3;i<32;i=i+2)
  flag[i]=flag2;
ftStatus = FT_Open(0, &ftHandle);
if(ftStatus != FT_OK) {
  printf("FT_Open failed\n");
  return 0;
  }
ftStatus = FT_ResetDevice(ftHandle);
if(ftStatus == FT_OK) {
  printf("FT_ResetDevice OK\n");
  }//FT_EE_Read
ftData.Signature1 = 0x00000000;
ftData.Signature2 = 0xffffffff;
ftData.Version = 0x00000003;
ftData.Manufacturer = ManufacturerBuf;
ftData.ManufacturerId = ManufacturerIdBuf;
ftData.Description = DescriptionBuf;
ftData.SerialNumber = SerialNumberBuf;
ftStatus = FT_EE_Read(ftHandle,&ftData);
if (ftStatus == FT_OK){
  printf("FT_EE_Read OK!~\n");
  printf("Manufacturer=%s,ManufacturerId=%s\n",ftData.Manufacturer,ftData.ManufacturerId);
  printf("Description=%s,SerialNumber=%s\n",ftData.Description,ftData.SerialNumber);
  printf("IFAIsFifo7=%d\n",ftData.IFAIsFifo7);
  }
else {
  printf("FT_EE_Read FAILED!\n");
  }
//FT_EE_Program//ftData.VendorId = 0x0403;//ftData.ProductId = 0x6010;//ftData.Manufacturer = "FTDI";
//ftData.ManufacturerId = "FT";
//ftData.SerialNumber = "FTS58JQC";
//ftData.Description = "FT2232H_Mini_Module";
ftData.IFAIsFifo7 = 1;
ftStatus = FT_EE_Program(ftHandle, &ftData);
if (ftStatus == FT_OK) {
  printf("FT_EE_Program OK!~\n");
  }
else {
  printf("FT_EE_Program FAILED!\n");
  }//FT_SetBitMode
ftStatus = FT_SetBitMode(ftHandle,Mask,ModeSync);
if (ftStatus == FT_OK) {
  printf("SetBitMode ModeSync OK!~\n");
  }
else{
  printf("FT_SetBitMode FAILED!\n");
  }
j = 0;m = 0;n = 0;
}
FT_Close(ftHandle);
printf("FT_Close!\n");
return 0; */
}

使用特权

评论回复
地板
w4wind315|  楼主 | 2010-1-14 15:05 | 只看该作者
2.2 FPGA控制程序设计
FT2232H提供的端口FIFO的读写操作,与普通FIFO读写操作方式一样。FT2232H为每个端口提供了“空”标志、“满”标志和“ 可编程级”标志。FPGA检测这些信号,用于控制读写的过程。FPGA在完成这些端口FIFO的操作时,采用Verilog HDL硬件描述语言实现了FIFO的读写时序,并在ALTERA公司提供的QuartusⅡ8.O开发工具中综合编译并映射到FPGA中运行。
  2.2.1 FIFO同步“读”操作
  实现同步FIFO“读”的状态机如下图所示。其状态转移进程如下:

  IDLE:当“写”事件发生时,转到状态1。
  状态1:激活OE#,如果FIFO空标志为“假”(FIFO不空),则转向状态2;否则停留在状态1。
  状态2:激活SLOE,SLRD,传送总线采样数据;撤销激活RD(指针加1)和OE,转向状态3。
  状态3:如果有更多的数据要求,则转向状态2;否则转向IDLE。
  实现以上状态机的仿真波形如下图所示。

 

 2.2.2 FIFO同步“写”操作
  实现同步FIFO“写”的状态机如图5所示。其状态转移进程如下:


  IDLE:当写事件发生时,转到状态1。
  状态1:指向 FIFO,如果FIFO满标志为“假”(FIFO不满),则转向状态3;否则停留在状态2。
  状态2:传送总线驱动数据。为一个激活WR#,转向状态3。
  状态3:如果有更多的数据要写,则转向状态1;否则转向IDLE。
  用QuartusⅡ进行仿真验证,其仿真波形如下图所示,经分析可知,本状态机实现的FIFO写控制信号完全正确。

  3 实验结果
  对传输的数据进行验证,可通过FPGA编程生成O~255的数据传送至FT2232H的pc端,连续传送两次,然后通过D2xx所提供API函数编写软件测试所接收到的数据,测试结果如下图所示,可以看出,数据传输准确无误。

  4 结 语
  USB 2.0控制器FT2232H已经被广泛应用到许多数据传输领域,由于USB具有灵活的接口和可编程特性,大大简化了外部硬件的设计,提高了系统可靠性。该设计可扩展性好,已经被应用于数据传输与采集的板卡上,经实际测试,没有出现数据的误码等错误,数据传送正确,传输速率可达30 MHz/s以上,满足设计要求。

使用特权

评论回复
评论
改不了的变6 2019-4-26 19:22 回复TA
想问下上位机的测试软件可以提供吗?就是用D2XX所提供的函数所编写的软件 
5
w4wind315|  楼主 | 2010-1-14 15:07 | 只看该作者
欢迎大家和我交流 由于无法上传图片,我这边上传pdf档;

使用特权

评论回复
6
w4wind315|  楼主 | 2010-1-21 09:13 | 只看该作者
自己顶

使用特权

评论回复
7
Kelan| | 2010-1-22 17:32 | 只看该作者
好芯片啊! 可以跟 Cy7c68013 PK 一场! 但不知道价格如何啊?

使用特权

评论回复
8
wegoinrain| | 2010-1-30 02:11 | 只看该作者
应该和7C68013差一大截吧

使用特权

评论回复
9
CBS96| | 2010-2-10 11:16 | 只看该作者
应该和7C68013差一大截吧

使用特权

评论回复
10
w4wind315|  楼主 | 2010-2-10 17:49 | 只看该作者
性能上超越7C68013;
FTDI用的怎么样 大家可以问问用过的人的口碑;
和7C68013对比起来,有些地方不同,我们的内部没有8051;
但灵活性上超越7C68013;
在总线接口方式上我们可以直接转JTAG,I2C,SPI等多种接口;
而却独创性的MPSSE多协议同步串行接口,
所以大家有机会可以直接看看datasheet,www.ftdichip.com

使用特权

评论回复
11
mr.king| | 2010-2-12 22:11 | 只看该作者
“传输速率可达30 MHz/s以上”,希望楼主详细说下,串行传输没有这样指标的你说的是30Mb/s(注意是小写),那笔68013差一大截,如果是30MB/s还有一比,不过要拿数据来证明

使用特权

评论回复
12
午夜粪车| | 2010-2-12 22:23 | 只看该作者
可以加精了

使用特权

评论回复
13
虎虎生威| | 2010-2-13 11:43 | 只看该作者
和7C68013差一大截

使用特权

评论回复
14
w4wind315|  楼主 | 2010-3-4 17:13 | 只看该作者
你们有7c68013实测数据没?
我实际测试过和fpga通讯,基本的程序达到24M/s,当然程序上面修改我想还有的提高;

使用特权

评论回复
15
Kelan| | 2010-3-5 18:06 | 只看该作者
当然是M Byte/s, 官方描述资料如下:

USB to parallel FIFO transfer data rate up to 10Mbyte/sec.
Single channel synchronous FIFO mode for transfers > 25 Mbytes/sec.

速度确实快! 关键是好用,开发方便! 但就不知道价格如何?

w4wind315 应该知道价格吧,透露一下 :)

使用特权

评论回复
16
zifeiyuuuu| | 2010-3-5 20:48 | 只看该作者
强啊。  呵呵,  菜鸟学习了,  同时 感谢楼主的分享 ,呵呵、、、  以后有机会希望能多多向您请教 呵呵、、、

使用特权

评论回复
17
w4wind315|  楼主 | 2010-3-12 10:16 | 只看该作者
价格我就不太好报了,大家可以参考著名网站;
http://search.digikey.com/script ... 56341&k=ft2232h

使用特权

评论回复
18
jqjszxd0| | 2010-4-15 17:06 | 只看该作者
学习了,谢谢楼主

使用特权

评论回复
19
w4wind315|  楼主 | 2010-7-19 09:53 | 只看该作者
专业提供FTDI芯片,欢迎催询。

使用特权

评论回复
20
w4wind315|  楼主 | 2010-9-8 16:54 | 只看该作者
英国FTDI 最新推出双USB HOST 16Bit MCU

16BIT 哈佛架构

2个USB2.0 USB HOST/Slave 接口,可自由选择。

256K On-chip Flash,16K sram

2个SPI Slave ,1 SPI master

UART可达3Mbaud

3类6种封装可以选择:32QFN/LQFP 48QFN/LQFP 64QFN/LQFP

完全免费的基于C的IDE。

现成的USB 存储类,打印类,HID类驱动,FAT文件系统。



另外:

FTDI其他产品



FT232B/FT232R   USB转RS232、 可以实现USB到串行UART接口的转换,也可转换到同步、异步Bit-Bang接口模式。4个GPIO可以独立控制.
其I/O口可以有3.3V,和5V两种选择.

FTDI提供的Windows XP,2000,Vista,Windows 7,Mac OS,Linux ,WindowsCE ,Labview等PC和嵌入式操作系统下的驱动。
驱动稳定性和兼容性好:

封装可以有QFN和SSOP两种选择.
封装采用SSOP-28,便于测试与生产。
FT232R更是芯片内集成EEPROM,及12Mhz时钟的,无需外挂12M晶振。     

FT2232D可以配成MPSSE模式,实现USB转I2C、JTAG及SPI。默认配置是一个USB转2个RS232.


其高速版本是FT2232H,FT4232H 更是可以扩展成4个RS232接口,功能更强.

FT245B/FT245R  USB 转FIFO,

实现USB到FIFO接口及Bit-Bang  IO借口。

1、 整合电平转换电路,使IO电平支持5V和3。3V

2、 通过简单易用的IO控制管脚实现数据流量控制;

3、 通过外挂的EEPROM,用于IO配置及储存USB VID和PID;

4、 提供各种操作系统下的驱动程序,如Windows OS,Mac OS,WindowsCE,Linux;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名://上海茂晶电子科技有限公司//、 //专业提供USB转接口,以太网等芯片// 提供FTDI系列USB转串口芯片 021 64401373-106 杨先生 samy@gfei.com.hk

3

主题

16

帖子

1

粉丝