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函数声明示例如下:
采用Delphi 7编写的数据发送示例程序PcData_To_U***Device如下: