基于FT245BM和FPGA的USB接口设计

发布者:GoldenDream最新更新时间:2014-09-11 来源: eefocus关键字:通用串行总线  USB  FT245BM  FPGA  状态机 手机看文章 扫描二维码
随时随地手机看文章
一、引言

        USB总线因其传输速度快、占用资源少以及真正的即插即用等诸多优点,受到了广大开发者的青睐,已经成为很多计算机设备的一种基本配置。目前被广泛采用的USB设备开发方案主要有以下两种(1)利用USB设备端接口芯片加微控制器结构。如国内用的比较多的Philips公司的PDIUSBD12/ISP1581等。(2)采用USB单片机。采用这两种方案要求开发者彻底理解USB协议的细节,并编写出固件程序。固件的运行要占用微控制器的时间和空间资源,实际通信效率不会很高。也有人用FPGA实现固件的功能,但这种方案开发和调试的难度很大。本人在实际工作中用FPGA外部直接连接一片USB协议芯片FT245BM,实现了FPGA与PC机的USB通信,该方法不用微控制器,减少了元器件的个数,并且占用FPGA资源很少,FPGA仍然可以实现其他逻辑功能,系统设计的灵活性很大。

二、FT245BM简介

        FT245BM由FTDI (Future Technology Devices Int. Ltd.)公司推出,该芯片的主要功能是进行USB和并行I/O口之间的协议转换。芯片一方面可从主机通过USB串行总线接收数据,并将其转换为并行I/O口的数据流格式发送给外设;另一方面外设可通过并行I/O口将数据转换为USB串行数据格式传回主机。中间的转换工作全部由芯片自动完成,开发者无须考虑固件的设计。该芯片提供了通用的并行I/O口方便与微控制器、FPGA或其他外设接口。在PC机端安装了FTDI公司提供的驱动程序,只需熟悉简单的VB、VC编程,就可很容易地进行上位机软件开发。

        关于FT245BM的内部结构及详细地引脚介绍读者可以参考其他相关资料,在此仅对与本设计相关的内容作一个介绍。FT245BM内含两个FIFO数据缓冲区,一个是128字节的接收缓冲区,另一个是384字节的发送缓冲区。它们用作USB数据与并行I/O口数据的交换缓冲区。FIFO实现与外界(微控制器、FPGA或其它器件)的接口,主要通过8根数据线D0~D7、读写控制线RD#和WR#以及FIFO发送缓冲区空标志TXE#和FIFO接收缓冲区非空标志RXF#来完成数据交互。TXE#为低表示当前FIFO发送缓冲区为空,为高表示当前FIFO发送缓冲区满或者正在存储前一个字节,禁止向缓冲区中写数据。RXF#为低表示当前FIFO的接收缓冲区非空。RD#信号由低变高将从FIFO缓冲区中读取数据。当RD#变低时将数据送到数据总线。RXF#为高不能从FIFO读数据。读写时序见图1和图2。

三、 FT245BM与FPGA的接口设计

3.1 硬件电路设计

        图3是FT245BM的USB与FPGA的接口电路,FPGA选用ALTERA EPF1K50TC-144,其中D0~D7是FT245BM与FPGA交换数据的数据总线,USB_RD#、USB_WR、USB_TXE#、USB_RXF#是相关的控制总线。

图3  FT245BM与FPGA的接口电路

3.2 FPGA收发状态机设计

        下面是用Verilog HDL 描述的FPGA收发状态机,为便于读者理解FPGA对FT245BM的读写过程,本文将接收和发送状态机分开给出。当然在实际应用中也可以将接收和发送操作合成一个状态机来实现。

3.2.1 接收状态机

        接收状态机主要功能是查询USB_RXF引脚的状态,当检测到USB_RXF变低,即可获知上位机已经将数据写入到FT245BM的缓冲区,然后产生读控制时序,将FT245BM接收缓冲区中的数据读入到FPGA的缓冲区。重复以上步骤直到将一帧数据读完,然后执行相应的帧处理操作。下面是用Verilog HDL描述的接收状态机。 [page]

@always (posedge clk ) /*clk为FPGA工作时钟。

if(rst && USB_RXF==0)

begin

case(Rstate)

Rstate0:

begin

USB_RD<=0; /*产生读信号的下降沿

Rstate<=Rstate1;

end

Rstate1:

begin

RframeBuf[Rpointer]<=USB_DATA; /*读FT245BM芯片FIFO的当前字节

Rstate<=Rstate2;

end

Rstate2:

begin

if(Rpointer== FrameLen-1) /*如果已经接收到完整的一帧,则转Rstate3,

begin

Rstate<=Rstate3;

Rpointer<=0;

end

else /*一帧未接收完,转Rstate0继续接收

begin

Rstate<=Rstate0;

Rpointer<=Rpointer+1;

end

USB_RD<=1;

end

Rstate3: /*处理收到的帧

begin

Rstate<=Rstate0;

/*在此添加处理帧的代码,本文略*/

end

end

else

begin

Rstate<=Rstate0;

USB_RD<=1;

End

3.2.2 发送状态机

        发送状态机完成的主要功能是将外设产生的数据通过FT245BM和USB总线传送到PC机。外设将数据准备好后,将发送允许信号(SendEN)置为有效,当状态机检测到SendEN=1时,即启动发送操作。首先状态机从外设的缓冲区按字节将待发送的数据读到FPGA的缓冲区,并产生写FT245BM发送缓冲区的时序,将数据写到FT245BM发送缓冲区。直到将一帧数据发送完毕。下面是FPGA向FT245BM发送数据的状态机。

@always (posedge clk ) /*clk为FPGA工作时钟。

if(rst && USB_TXE==0&& SendEN==1) /*rst为异步复位信号, SendEN为发送允许信号,由给Pc机发送数据的逻辑电路置位,数据发送完成由发送状态机将其清除。

begin

case(Sstate)

Sstate0:

begin

USB_WR<=1; /*产生写信号的上升沿

Sstate<=Sstate1;

end

Sstate1:

begin

USB_DATA <=SframeBuf[Spointer]; /*写一个字节到FIFO,SframeBuf为发送缓冲区

Sstate<=Sstate2;

end

Sstate2:

begin

if(Spointer == FrameLen-1) /*如果已经发送完一帧,则转Sstate3,

begin

Sstate<=Sstate3;

Spointer <=0;

end

else /*未完,转Sstate0继续发送

begin

Sstate<=Sstate0;

Spointer <= Spointer +1;

end

USB_WR<=0; /*产生写usb FIFO信号的下降沿

end

Sstate3:

begin

Sstate<=Sstate0;

/*在此添加处理帧发送完毕的代码和清除SendEN 信号的代码,本文略*/

end

end

else

begin

Sstate<=Sstate0;

USB_WR<=0;

End

        限于篇幅,以上状态机只给出了帧收发的基本操作,因为在不同的应用场合,帧处理的方法也不相同,所以本文没有给出帧处理代码。另外,在实际应用时需要注意以下内容:由于FPGA读写FT245BM共用一组数据总线,状态机不能同时对FT245BM进行读写操作,当所以当两个状态机分开编写时,为避免冲突需分出读写的优先级,此时只需对以上状态机稍加修改即可。比如当若令读的优先级高,则在写的状态机中将if(rst && USB_TXE==0&& SendEN==1)语句的条件改为if(rst && USB_TXE==0&& SendEN==1&& USB_RXF==1)即可。写优先级高的情况可以仿照此方法修改。

四、PC机软件设计

         PC机软件的设计有两种方法:一种是在PC机上安装一个由FTDI公司免费提供的虚拟串行口VCP(Virtual COM Port)驱动程序,将USB口虚拟成一个串口,像一个标准的串口那样进行进行外设和PC机的通信。可本质上所有针对虚拟串口的数据通信都是通过USB总线完成的。另外一种方法是利用FTDI公司提供的D2XX驱动程序,通过调用驱动程序的动态链接库直接访问USB。由于人们对串口的操作比较熟悉,通常用前一种方法访问USB。比如,在PC端,应用VB对VCP(通常设置为COM3)进行编程。可以直接应用MSComm控件,将MSComm.CommPort置为3,MSComm.Setings置为“9600,n,8,1”(该速率为默认设置,实际上VCP驱动程序总是使数据以最快速率传输);通过MSComm.PortOpen设置COM3的开关状态;通过MSComm.Input和MSComm.Output读入或输出数据。在读取数据时,设置MSComm.Rthreshold的值为1。只要有数据传到PC机,就立即触发MSComm.CommEvent事件,自动读取COM3的数据;而发送数据则可自动或手动发送,由用户自己设置。以上操作与操纵标准的串行口完全一致。

五、结语

        以上状态机在MaxPlusII10.2下调试并下载到FPGA运行通过,软件在Windows 2000,VB6.0环境下调试通过。该电路成功应用到光纤陀螺多路测试系统中,实现了同时对4路陀螺信号的同时测试,简化了电路设计,提高了测试效率。

参考文献:

[1] FT245BM data sheet. Future Technology Devices Int. Ltd.

[2] 夏宇闻. Verilog 数字系统教程[M]. 北京:北京航空航天大学出版社,2004

[3] 张俊安. 用VB实现windows 9x环境下的串口通信[J]. 山东煤炭科技, 2000年增刊:73~74

关键字:通用串行总线  USB  FT245BM  FPGA  状态机 引用地址:基于FT245BM和FPGA的USB接口设计

上一篇:莱迪思新一代USB 3.1 Type-C接口供电解决方案加快下一代USB接口开发
下一篇:HDMI/DVI新技术与芯片及其应用

推荐阅读最新更新时间:2024-05-02 23:10

基于FPGA的数字频率合成器设计与实现
摘要:为了产生稳定激励信号的目的,采用Verilog硬件语言在FPGA上实现了数字频率合成器的设计,该设计包括累加器、波形存储器、AD转换、低通滤波器等;对累加器、波形存储器都进行了仿真,并下载到FPGA中,经A/D转换,滤波,获得了稳定的正弦激励信号。本设计只实现了正弦信号设计,通过对波形存储器数据改变,可以实现任意波形的输出。 关键词:FPGA;数字频率合成器;信号发生器;VerilogHDL 数字频率合成器(DDS,Direct Digital Synthesizer)是一种数字控制的锁相倍频器。其输出频率是基准频率的整数倍,通过频率选择开关改变分频比来控制压控振荡器的输出信号频率。与传统的频率合成器相比,DDS具有
[嵌入式]
基于<font color='red'>FPGA</font>的数字频率合成器设计与实现
S2C 成为Tensilica 中国地区最新SoC原型合作伙伴
Tensilica 处理器内核参考设计集成于S2C之FPGA ESL平台助力SoC快速开发 美国加州Santa Clara 2007年2月5日讯 – Tensilica 公司日前宣布结盟S2C 公司共建SoC原型合作伙伴关系。 S2C公司为提供创新的、基于FPGA的ESL(电子系统级)和SoC 原型解决方案的全球领先提供商,在中国市场属快速成长期。S2C已将Tensilica的Diamond Standard 108mini集成到TAI Logic Module基于FPGA的 ESL平台中,并正在开发针对Tensilica广受欢迎的Diamond Standard 330HiFi音频IP核的参考设计和演示平台。 S2C公司首
[焦点新闻]
低功耗、大容量Cyclone III FPGA
Altera 公司在 2008 年 3 月 27 号 宣布, 65-nm Cyclone ® III FPGA 系列推出新的 8x 8 mm 2 封装 (M164) , 为设计人员提供单位电路板上容量最大的 FPGA 。设计人员现在可以充分利用 Cyclone III 器件的低功耗和大容量领先优势,设计实现消费类、军事和工业市场上空间受限的大批量应用。 新的 8x 8 mm 2 164 引脚封装具有高达 16K 的逻辑单元 (LE) ,扩展了 Cyclone III FPGA 的大容量小封装产品,该系列包括 14x 14 mm 2 256 引脚 (U256) 和 17x 17 mm 2 48
[新品]
致远电子发布USB-PD快充测试方案
USB-PD(Power Delivery)是基于USB Type-C的供电标准,最大功率可达100W。虽然USB-PD快充越来越热,但行业内并没有针对快充的测试工具,ZLG致远电子正式发布USB-PD测试方案,并提供免费上门测试!下面就随测试测量聊吧一起来了解一下相关内容吧。下面就随测试测量小编一起来了解一下相关内容吧。 1、USB Type-C简介 Type-C是USB接口的一种形式,不分正反两面均可插入,支持USB标准的充电、数据传输、视频传输、音频传输、显示输出等功能。支持USB-PD后则可实现高达100W的电源供电。本文涉及的USB-PD就是通过Type-C的“配置通道引脚CC”(图1)进行通讯的。 图1 Ty
[测试测量]
致远电子发布<font color='red'>USB</font>-PD快充测试方案
收购Mobileye帮助不大,英特尔的人工智能已经输在起跑线?
英特尔 计划打造出由100辆试验车组成的自动驾驶车队; 英特尔在自动驾驶竞赛中只是个追随者; 英特尔今年能够提供的任何技术对于汽车制造商来说都不够成熟。 英特尔计划打造出由100辆试验车组成的自动驾驶车队 在完成对 Mobileye 的收购之后,英特尔宣布要打造出100辆等级为Level 4的自动驾驶汽车。不过,英特尔并没有明确表示能否在本年内完成这个计划,它只是声称“今年将部署首辆汽车。”   更重要的是,英特尔目前绝对没有足够的实力推出自动驾驶汽车,它的试验车仍然需要人类驾驶员,而且由于软件还不成熟,驾驶系统还需要频繁的人为干预。到今天为止,即便是拥有多年经验积累的谷歌Waymo,它也不具备可以完全放弃人类驾驶员的自动驾
[嵌入式]
USB Type-C连接器,不止是正反都能插这么简单
今年3月,苹果推出全新MacBook,首次在笔记本电脑上将电源接口、USB接口、DP接口、HDMI接口与VGA接口统一用一个USB C型(USB Type-C)接口来承载。   尽管之前不少人已经知道这种新型USB接口的存在,但第一次在笔记本产品上看到“真家伙”,还是挺让人耳目一新的。作为连接器领域的专家,TE Connectivity也推出了USB Type-C连接器,为新一代电子产品的工程设计提供更高的设计灵活性。   速度开挂,双向传输 说到新接口的好处,传输速度“快到开挂”无疑是最为显著的特点之一。TE提供的USB Type-C接口解决方案,其数据传输速率最快可达10 Gbps,而传统USB3.0的数
[嵌入式]
基于FPGA和单片机的多功能计数器设计
  一、系统方案   方案1:采用中小规模数字电路构成系统,由计数器构成主要的测量模块。用定时器组成主要的控制电路。此方案软件设计简单,但外围芯片过多,且频带窄,实现起来较复杂,功能不强,而且不能程控和扩展。   方案2:采用单片机实现。被测信号经调理后送入单片机,利用其内部的计数器完成计数,然后再进行数据处理和显示,但单片机在处理高速信号时略显吃力。   方案3:利用FPGA对调理后的被测信号实现高速计数,单片机软件执行高精度浮点数运算并显示。单片机完成系统的数据处理、逻辑控制和人机交互功能;大规模现场可编程器件(FPGA)实现外围计数功能。电路框图如图1所示。    图1 方案3系统框图   方案比较与选择:方
[单片机]
基于<font color='red'>FPGA</font>和单片机的多功能计数器设计
FPGA在高精度脉宽测量系统中的应用
  测量领域以及仪表仪器领域中,对数字信号的测量主要便是对其信号脉冲宽度进行测量。目前使用最多的方式便是脉冲计数的方式,即通过高频时钟脉冲在待测信号的低电平处或者高电平处进行计数,然后依照脉冲数量,通过计算的方式得到信号宽度,待测信号独立于计数时钟,其信号的上升以及下降沿无法同时钟边沿准确的吻合,所以,该方式得到的误差最大值可以达到一个时钟周期。例如,若是高频时钟为80MHz,那么其最大的误差量可以达到12.5ns。   脉冲计数法的精度也可以通过有效的方式予以提高,其思路如下:首先可以将计数时钟的频率予以提高,其次则是通过时幅转换技术对误差予以降低。测量误差会随着时钟频率的的提高而减小,但是频率提高,相对便会对芯片的要求有所提高。
[测试测量]
<font color='red'>FPGA</font>在高精度脉宽测量系统中的应用
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved