基于FT245BM芯片实现USB双向转换的快速接口设计

引 言
usb(通用串行总线)是一种新的数据通信接口方式,它使得外围没备到计算机的连接更加高效、便利。usb接口不仅具有快速、即插即用、支持热插拔的特点,而且能同时连接多达127个外部设备,可以有效地解决pc机外围接口不足的问题。目前usb这一接口形式在微电子控制系统的设计中得到了广泛应用。
在近期参与开发的数控系统中,应客户要求需要将usb接口引入到数控系统中。由于该usb数据通信接口设计仅是系统设计的一个很小的部分,如果仍采用传统的设计方法实现,那么将耗费较多的时间和精力,而且最终也未必能获得理想的效果。为了摆脱常规usb数据接口设计的难度,加快系统开发进程,我们引入了基于ft245bm的快速usb接口设计,使系统开发节奏加快,保证整套系统设计周期的缩短。
1、 ft245bm芯片简介
ft245bm是ftdi(future technology devices intlltd)公司的多种快速usb通信接口解决方案之一。它无需编写片内固件程序,上层pc机则使用ftdi公司提供的官方驱动程序。ft245bm芯片的主要功能是在内部硬件逻辑的作用下实现usb串行数据格式与并行数据格式的双向转换。pc机通过usb接口与ft245bm进行数据交换,ft245bm则通过并行方式与下位微控制器通信。ft25bm芯片引脚见图1。
该芯片有如下特点:
单芯片实现usb与并行fifo缓冲区的双向数据传输;ftdi公司提供vcp(虚拟串行口)和d2xx两种驱动程序,使用d2xx驱动程序能获得更好的数据传输性能,传输速率最大可达1 mb/s;通过简单的四线握手信号与mcu、cpld、fpga等逻辑器件接口;完整的片内usb协议解决方案,无需底层固件的编程;完全兼容usb1.1,usb2.0协议;)附加的eeprom接口可定制usb接口设备。
2、 usb接口的硬件设计
由usb设计规范可知,usb设备有总线供电和自供电两种方式。考虑到开发的数控系统并不属于移动应用,无需通过总线供电方式来供给芯片工作所需电源,因此采用自供电方式进行设计。采用自供电方式的基于ft245bm的usb接口电路原理如图2所示。
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主机的突然上电。
3 、usb接口的软件设计
usb接口软件是配合接口硬件实现usb数据的高效快速传输,包括微控制器端和pc端两部分。
3.1 微控制器端软件的设计
微控制器通过ft245bm提供的数据和控制接口实现数据的交换。
读操作时序见图3。当rxf#为低,表示当前fifo接收缓冲区内有数据,可以执行读操作读取接收缓冲区数据。在rd#电平由高变低,fifo控制器将接收缓冲区中的数据输出到8位数据端口上,微控制器此时只需读取i/o口就可以将数据取到内部数据总线上来,再将rd#信号拉高完成1个字节数据的读取。当将fifo接收缓冲区中的数据全部取出后,rxf#被拉高表示数据为空。在rxf#为高时,禁止从fifo接收缓冲区读取数据。
写操作时序见图4。当txe#为低,表示当前fifo发送缓冲区空,可以向发送缓冲区写人数据。在wr为高电平时,微控制器将8位数据d[0..7]送到并行i/o口上,在wr信号电平由高变低时数据被写入发送缓冲区中。当txe#为高时,表示当前fifo发送缓冲区已满或者正在写入上一个字节,此时禁止向发送缓冲区中写入任何数据。微控制器向ft245bm写人数据时应确保txe#为低。
3.2 pc机端软件的设计
usb设备插入pc机时操作系统会请求安装设备驱动程序,ftdi公司为基于ft245bm的usb接口设备提供了vcp、d2xx(动态链接库)两种驱动程序。选择不同的驱动程序,pc机端软件设计方法也不同。
3.2.1 基于vcp的pc机端软件设计
选择安装vcp驱动程序时,操作系统将基于ft245bm的usb接口设备虚拟成为串行通信口,对这一虚拟的串行口的操作就等同于对该usb接口设备的操作,因此在应用程序中可以利用串行通信控件来简化pc机端软件的设计。目前比较成熟的串行通信控件有mscomm、spcomm、pccomm等,本文采用delphi和spcomm来完成基于vcp的pc端软件的设计。利用spcomm编写针对串行口操作的程序比较容易,它有丰富的与串口通信密切相关的属性及事件,提供了对串口的各种操作。根据spcomm提供的属性、方法、事件可以完成对虚拟成串行口的ft245bm的读写,避开了对usb接口本身的操作。
基于vcp的软件设计介绍如下。首先设置好需要打开的vcp的各个属性,调用startcomm方法打开vcp,然后通过writecommdata将数据写人到发送缓冲区,由计算机硬件实现物理层的数据发送。数据到达pc机将会触发控件的onreceivedata事件,在该事件下接收数据并转存以供后续的处理。接收数据出错时将触发onreceiveerror事件,在该事件中可进行出错处理。数据传输完毕后调用stopcomm关闭vcp,结束一次通信过程。3.2.2 基于d2xx的pc机端软件设计
选择d2xx作为usb接口的设备驱动程序,应用程序通过ftd2xx.dll、ftd2xx.sys、windows usbdriver stack来实现对ft245bm。的读写。因此,在程序编写时只需调用ftd2xx.dll中的函数,便可完成对usb接口设备的读写操作。
ftd2xx.dll提供了丰富的接口函数来访问ft245bm,主要函数简介如下:
ft_listdevice:获取当前pc机上连接的所有的ftdi usb接口设备的信息;
ft_open,ft_openex:打开ftdi usb接口;
ft_read:从ftdi usb接口读取数据;
ft_write:向ftdi usb接口写入数据;
ft_close:关闭ftdi usb接口。
使用dll(动态链接库)函数首先要在接口单元处重新声明程序中需要使用到的函数。ftd2xx中dll函数声明示例如下:
4 、结束语
通过上述的软硬件设计,可以快速实现usb接口的设计,满足数控系统所要求的高速数据传输任务。采用这种usb设计方案在实际应用中表现良好,达到了预期目的,为数控系统如期交货创造了条件。


PCB生产之DFM是怎么回事
八款产品全新亮相 坎德拉科技机器人2.0时代开启
有毒气体检测仪的选购小技巧
语音模块可以应用到陶瓷产品中
CHERRY推出新款入门级Viola轴体机械键盘
基于FT245BM芯片实现USB双向转换的快速接口设计
罗森伯格推出新品,为5G网络应用而设计
ios15有哪些功能 ios15有哪些功能让人值得期待?
三星将于4月宣布新的物联网操作系统
矽典微自主研发毫米波传感器SoC 可覆盖感应类轻小应用到阵列类复杂体系应用
新工具上线!sdkmgr命令行助力流水线构建
索尼PS VR独辟蹊径,抢占未来市场成为趋势?
激活函数中sigmoid、ReLU等函数的一些性质
Coloro 与WGSN联合发布2023年度色:数字薰衣草色
介绍一个C语言实现的http下载器
缩减50%调试成本 小匠物联推可远程的串口调试助手
应变片传感器的工作原理
MAX32570非接触式PCD应用笔记
CdS核—金等离子体卫星纳米结构增强光催化析氢反应
动力电池多并状态下电芯通过电流不一致性问题研究