[err:数据源标签PE.DataSource id="cone" datasource="文章_内容页" itemid="4474" xslt="true" /返回数据错,原因:分析 EntityName 时出错。 行 5,位置 183。,源码:447414基于FT245BM的快速USB接口设计基于FT245BM的快速USB接口设计
<DIV>
<P><STRONG> <FONT color=#0000ff><a class="insidelink" href="http://home.cepark.com/space.php?do=mtag&tagid=108" target="_blank">USB</a>(通用串行总线)是一种新的数据通信接口方式,它使得外围没备到计算机的连接更加高效、便利。</FONT></STRONG></P>
<P> <a class="insidelink" href="http://home.cepark.com/space.php?do=mtag&tagid=108" target="_blank">USB</a>接口不仅具有快速、即插即用、支持热插拔的特点,而且能同时连接多达127个外部设备,可以有效地解决PC机外围接口不足的问题。目前USB这一接口形式在微电子控制系统的设计中得到了广泛应用。</P>
<P><STRONG> </STRONG>在近期参与开发的数控系统中,应客户要求需要将USB接口引入到数控系统中。由于该USB数据通信接口设计仅是系统设计的一个很小的部分,如果仍采用传统的设计方法实现,那么将耗费较多的时间和精力,而且最终也未必能获得理想的效果。为了摆脱常规USB数据接口设计的难度,加快系统开发进程,我们引入了基于FT245BM的快速USB接口设计,使系统开发节奏加快,保证整套系统设计周期的缩短。</P>
<P><STRONG> 1 FT245BM芯片简介</STRONG></P>
<P><STRONG> </STRONG>FT245BM是FTDI(Future Technology Devices IntlLtd)公司的多种快速USB通信接口解决方案之一。它无需编写片内固件程序,上层PC机则使用FTDI公司提供的官方驱动程序。</P>
<P><STRONG> </STRONG>FT245BM芯片的主要功能是在内部硬件逻辑的作用下实现USB串行数据格式与并行数据格式的双向转换。PC机通过USB接口与FT245BM进行数据交换,FT245BM则通过并行方式与下位微控制器通信。FT25BM芯片引脚见图1。</P>
<TABLE width=675>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG height=242 alt="" src="/UploadFiles/Article/2008/7/200807102301216535.jpg" width=210 border=0></DIV></TD></TR></TBODY></TABLE>
<P><STRONG> 该芯片有如下特点:</STRONG></P>
<P><STRONG> </STRONG>单芯片实现USB与并行FIFO缓冲区的双向数据传输;FTDI公司提供VCP(虚拟串行口)和D2XX两种驱动程序,使用D2XX驱动程序能获得更好的数据传输性能,传输速率最大可达1 MB/s;通过简单的四线握手信号与MCU、CPLD、FPGA等逻辑器件接口;完整的片内USB协议解决方案,无需底层固件的编程;完全兼容USB1.1,USB2.0协议;)附加的EEPROM接口可定制USB接口设备。</P>
<P><STRONG> 2 USB接口的硬件设计</STRONG></P>
<P><STRONG> </STRONG>由USB设计规范可知,USB设备有总线供电和自供电两种方式。考虑到开发的数控系统并不属于移动应用,无需通过总线供电方式来供给芯片工作所需电源,因此采用自供电方式进行设计。采用自供电方式的基于FT245BM的USB接口电路原理如图2所示。</P>
<TABLE width=675>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG height=282 alt="" src="/UploadFiles/Article/2008/7/200807102301212326.jpg" width=360 border=0></DIV></TD></TR></TBODY></TABLE>
<P><STRONG> </STRONG>FT245BM通过8位并行数据口D[0..7]和4位读写状态/控制口 RXF#、TXE#、RD#、WR实现与微控制器交换数据,而PC机与FT245BM问通过UISB总线传输数据。可选的外部EEPROM用于存储USB设备的特定信息,呵以通过EECS、EESK、EEDATA来完成数据写入和读出。由于设计采用自供电的方式,为防止USB主机或USB HUB(集线器)控制器在断电情况下USB接口设备将电流灌入USB总线(USB主机或USB HUB控制器将突然上电而可能导致损坏),在USBDP的上拉电路中加入检测USB总线电流的NPN型晶体管2N3904。当总线有电时,2N3904饱和导通,USBDP通过1.5 kΩ电阻上拉至RSTOUT#3.3 V,USB数据通信正常进行;当USB总线失电时,2N3904因基极无电流而截止,阻止电流由RSTOUT#进入USB总线,可有效防止USB主机的突然上电。</P>
<P><STRONG> 3 USB接口的软件设计</STRONG></P>
<P><STRONG> </STRONG>USB接口软件是配合接口硬件实现USB数据的高效快速传输,包括微控制器端和PC端两部分。</P>
<P><STRONG> 3.1 微控制器端软件的设计</STRONG></P>
<P><STRONG> </STRONG>微控制器通过FT245BM提供的数据和控制接口实现数据的交换。</P>
<P><STRONG> </STRONG>读操作时序见图3。当RxF#为低,表示当前FIFO接收缓冲区内有数据,可以执行读操作读取接收缓冲区数据。在RD#电平由高变低,FIFO控制器将接收缓冲区中的数据输出到8位数据端口上,微控制器此时只需读取I/O口就可以将数据取到内部数据总线上来,再将RD#信号拉高完成1个字节数据的读取。当将FIFO接收缓冲区中的数据全部取出后,RXF#被拉高表示数据为空。在RXF#为高时,禁止从FIFO接收缓冲区读取数据。</P>
<TABLE width=675>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG height=139 alt="" src="/UploadFiles/Article/2008/7/200807102301215040.jpg" width=260 border=0></DIV></TD></TR></TBODY></TABLE>
<P><STRONG> </STRONG>写操作时序见图4。当TXE#为低,表示当前FIFO发送缓冲区空,可以向发送缓冲区写人数据。在WR为高电平时,微控制器将8位数据D[0..7]送到并行I/O口上,在WR信号电平由高变低时数据被写入发送缓冲区中。当TXE#为高时,表示当前FIFO发送缓冲区已满或者正在写入上一个字节,此时禁止向发送缓冲区中写入任何数据。微控制器向FT245BM写人数据时应确保TXE#为低。</P>
<TABLE width=675>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG height=160 alt="" src="/UploadFiles/Article/2008/7/200807102301213482.jpg" width=300 border=0></DIV></TD></TR></TBODY></TABLE>
<P><STRONG> 3.2 PC机端软件的设计</STRONG></P>
<P><STRONG> </STRONG>USB设备插入PC机时操作系统会请求安装设备驱动程序,FTDI公司为基于FT245BM的USB接口设备提供了VCP、D2XX(动态链接库)两种驱动程序。选择不同的驱动程序,PC机端软件设计方法也不同。</P>
<P><STRONG> 3.2.1 基于VCP的PC机端软件设计</STRONG></P>
<P><STRONG> </STRONG>选择安装VCP驱动程序时,操作系统将基于FT245BM的USB接口设备虚拟成为串行通信口,对这一虚拟的串行口的操作就等同于对该USB接口设备的操作,因此在应用程序中可以利用串行通信控件来简化PC机端软件的设计。目前比较成熟的串行通信控件有MSCOMM、SPCOMM、PCCOMM等,本文采用Delphi和SPCOMM来完成基于VCP的PC端软件的设计。利用SPCOMM编写针对串行口操作的程序比较容易,它有丰富的与串口通信密切相关的属性及事件,提供了对串口的各种操作。根据SPCOMM提供的属性、方法、事件可以完成对虚拟成串行口的FT245BM的读写,避开了对USB接口本身的操作。</P>
<P><STRONG> </STRONG>基于VCP的软件设计介绍如下。首先设置好需要打开的VCP的各个属性,调用StartComm方法打开VCP,然后通过WriteCommData将数据写人到发送缓冲区,由计算机硬件实现物理层的数据发送。数据到达PC机将会触发控件的OnReceiveData事件,在该事件下接收数据并转存以供后续的处理。接收数据出错时将触发OnReceiveError事件,在该事件中可进行出错处理。数据传输完毕后调用StopComm关闭VCP,结束一次通信过程。</P>
<P><STRONG> 3.2.2 基于D2XX的PC机端软件设计</STRONG></P>
<P><STRONG> </STRONG>选择D2XX作为USB接口的设备驱动程序,应用程序通过FTD2XX.DLL、FTD2XX.SYS、Windows USBDriver Stack来实现对FT245BM。的读写。因此,在程序编写时只需调用FTD2XX.DLL中的函数,便可完成对USB接口设备的读写操作。</P>
<P><STRONG> </STRONG>FTD2XX.DLL提供了丰富的接口函数来访问FT245BM,主要函数简介如下:</P>
<P><STRONG> </STRONG>FT_ListDevice:获取当前PC机上连接的所有的FTDI USB接口设备的信息;</P>
<P><STRONG> </STRONG>FT_Open,FT_OpenEx:打开FTDI USB接口;</P>
<P><STRONG> </STRONG>FT_Read:从FTDI USB接口读取数据;</P>
<P><STRONG> </STRONG>FT_Write:向FTDI USB接口写入数据;</P>
<P><STRONG> </STRONG>FT_Close:关闭FTDI USB接口。</P>
<P><STRONG> </STRONG>使用DLL(动态链接库)函数首先要在接口单元处重新声明程序中需要使用到的函数。FTD2XX中DLL函数声明示例如下:</P>
<TABLE width=675>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG height=71 alt="" src="/UploadFiles/Article/2008/7/200807102301217106.jpg" width=400 border=0></DIV></TD></TR></TBODY></TABLE>
<P><STRONG> </STRONG>采用Delphi 7编写的数据发送示例程序PcData_To_UsbDevice如下:</P>
<TABLE width=675>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG height=369 alt="" src="/UploadFiles/Article/2008/7/200807102301217106.jpg" width=380 border=0></DIV></TD></TR></TBODY></TABLE>
<TABLE width=675>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG height=359 alt="" src="/UploadFiles/Article/2008/7/200807102301219272.jpg" width=380 border=0></DIV></TD></TR></TBODY></TABLE>
<P><STRONG> 4 结束语</STRONG></P>
<P><STRONG> </STRONG>通过上述的软硬件设计,可以快速实现USB接口的设计,满足数控系统所要求的高速数据传输任务。采用这种USB设计方案在实际应用中表现良好,达到了预期目的,为数控系统如期交货创造了条件。<BR></P></DIV>
<h5>本文来源:电子工程师 作者:无锡职业技术学院自动控制与电子工程系 徐 锋</h5>
2008年07月10日
color:
font-weight:normal ;font-style:normal;
oncontextmenu='return false' ondragstart='return false' onselectstart ='return false' onselect='document.selection.empty()' oncopy='document.selection.empty()' onbeforecopy='return false'
<script language="JavaScript" type="text/JavaScript" src="/Common/GetHits.aspx?id=4474"></script>
111]
电子园-电子工程师自己的网络社区家园!
迷你博客,轻松完成日志发布,管理相册;展示个性自我
兴趣小组,热点话题,加入您感兴趣的话题讨论小组,一起交流吧
最新资讯,热门话题与好友一起分享信息,他评论感兴趣的话题