新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于EZ-USB的数据传输接口设计

基于EZ-USB的数据传输接口设计

作者:时间:2011-12-29来源:网络收藏

  0 引言

  USB控制器采用通用连接技术以实现与外设的简单快速连接,具有连接灵活、使用方便、速度快、扩展能力强等优点,使得其一些高速、高精度的信号采集领域中, 具有极大的应用价值[1]。 EZ-USB序列芯片AN2131Q是Cypress公司的内嵌微控制器的80pin的USB接口控制芯片,它采用了一种基于内部RAM的解决方案,允许客户随时不断地设置和升级,不受端口数、缓冲大小、传输速度及传输方式的限制[2]。片内嵌有一个增强型8051微控制器,与标准的8051相比,其速度快3倍。本文将USB控制器EZ-USB2131Q用于基于TMS320C5409的水声信号采集及混沌特性研究系统中,实现了数据的高速传输。

  1 USB控制器与DSP的连接

  1.1  AN2131Q和TMS320C5409的硬件连接

  在TMS320C5409和USB控制器AN2131Q硬件连接中,采用FIFO(first in first out SRAM)连接方法,除了能确保DSP和主机间的数据传输速度只受USB协议限制外,还能使USB控制器和DSP之间的最大数据交换速度超过USB总线的速度。

  由于USB控制器AN2131Q内嵌有加强型的8051处理器,可使用两片FIFO(FIFO选用IDT72V02,它具有1K×9位的内存)可以实现USB控制器和DSP之间的双向通信。从USB控制器AN2131Q或者DSP传输的数据首先保存在FIFO中,然后再由DSP或者AN2131Q读走,从而使得数据的传输不会出现堵塞情况,其硬件连接框图如图1所示。

  图1   AN2131Q和TMS320C5409的连接图

  1.2        AN2131Q和IDT72V02的连接

  IDT72V02状态信号有空(EF)、半满(HF)和满(FF),它们都在FIFO为低电平时有效。其与AN2131Q的连接如图2所示。

  图2   AN2131Q和IDT72V02的连接图

  1.3  AN2131Q和TMS320C5409的软件连接

  USB控制器AN2131Q和DSP之间的软件部分包括4个部分,分别是USB控制器AN213lQ对FIF01的写、USB控制器AN2131Q对FIF02的读、TMS320C5409对FIF01的读、TMS320C5409对FIFO2的写。为了描述的方便,将FIF01的3个状态信号分别称为 、 和 ,对应FIF02的为 、 、 。

  (1)USB控制器AN2131Q写FIFO1

  当USB总线上有数据要传送至TMS320C5409时, AN2131Q查询 ,若 无效, AN2131Q一次向FIFO1写入一个数据包(数据包要小于或等于FIFO1容量的一半),而且AN2131Q一次向FIFO1写入每一个字节时不需再查询 。

  (2) TMS320C5409读FIFO1

  TMS320C5409每次从FIFO1中读入一个数据包,每读一个字节前,DSP需要查询 ,只有当 无效(FIFO1不为空)时,DSP才能进行读操作。

  (3) TMS320C5409写FIFO2

  当TMS320C5409有数据要传送至主机时,TMS320C5409把数据打包,每次向FIFO2中写入一包数据,方法与USB控制器AN2131Q写FIFO1相同,惟一不同的是TMS320C5409查询的信号是 。写完一包数据后,TMS320C5409通过操作控制字向USB控制AN2131Q发一个中断信号,TMS320C5409在写下一包数据时必须等到AN2131Q应答。AN2131Q应答的方法是利用TMS320C5409的外部中断INT1中断DSP。

  (4)USB控制器AN2131Q读FIFO2

  USB控制器AN2131Q收到TMS320C5409发出的中断信号,应答DSP后,从FIFO2中读入一包数据,不用再查询 。

  2 USB接口软件设计

  USB接口软件主要分为三部分:固件程序、驱动程序、主机应用程序。主机应用程序通过驱动程序与系统USBDI( USB Device Interface)进行通信,由系统产生USB数据的传送动作,固件程序则响应来自系统的USB标准请求,完成各种数据的交换的时间处理。

  2.1 EZ-USB固件程序开发

  固件代码存储在AN2131Q内部的8KBR AM中,它是用来初始化USB总线设备的。固件代码包括了设备的信息,它以描述符形式指定了制造商号、产品号和其他USB总线协议中所需要的信息,其主要功能是实现设备枚举过程[3]。

  为了简化和加速用户对EZ-USB芯片的开发过程,Cypress公司提供了Keil C51 环境下编写固件程序的框架。该框架集成了开发USB总线设备所需的基本函数,用户可以在此基础上加入自己的代码实现特定的要求。固件程序框架如图3所示。

  图3  EZ一USB固件程序框架

  EZ一USB固件程序框架首先初始化所有的内部状态变量,然后调用用户初始化函数TD_Init(),然后初始化USB总线设备接口为非配置状态,并同时打开中断。当完成上面的任务后,EZ一USB 固件程序就开始重新枚举设备直到端点0收到SETUP包为止。一旦EZ-USB收到SETUP包,固件程序就开始进行任务分配[4]。任务分配就是依次重复地执行下面的过程:

  (1) 调用用户函数TD_Poll()。

  (2) 检测是否有标准的设备请求,如果有,则执行指令并做出相应的操作。

  (3) 检测USB核是否有USB挂起事件。如果有USB挂起事件,则调用用户程序TD_Suspend()。当TD_Suspend()返回为真时,USB核检测是否有重新开始事件。当检测到有重新开始的事件,USB调用用户程序TD_Resume(),并继续执行步骤3.

  固件代码在Keil Vision2环境中编译后,最终生成ezusb.hex文件。用USB线把DSP开发板接到PC机上,启动“EZ-USB Control Panel”,就可以把ezusb.hex文件下载到ANZ13lQ内部的8K RAM 中。

  2.2 EZ-USB驱动程序开发

  驱动程序(USBD)是USB总线系统中负责管理USB的工作. USB总线客户软件包含了用来控制不同USB总线外设的功能程序,它通过一个Windows定义的软件接口与根集线器驱动程序进行通信;而USB总线根集线器驱动程序则通过包含在USBD中的USBDI(USB驱动程序接口。)实现USBD的通信;然后,USBD 会选择两种主控制器之一同下方的主控制器进行通信;最后,主控制器驱动程序会通过PCI枚举器软件直接实现对USB物理总线的访问。

  USB总线设备驱动程序必须遵循Win32驱动程序模型(WDM),其扩展名为.Sys。驱动程序主要实现的功能包括:设备初始化;即插即用设备的创建和删除;处理Win32打开和关闭文件句柄请求;类功能定义IO CTL(I/O Control)、功能实现;IRP(I/O Request Packet)的调用处理;访问硬件。

  为帮助设备和软件的开发者测试USB总线设备请求和数据传输的能力,Cypress公司提供了EZ_ USB通用驱动程序GPD(General Purpose Driver)。GPD是用来和基于EZ_ USB外设接口的通用设备驱动程序,提供公共USB总线设备请求和数据传输的用户态接口。使用GPD作为起始点,可以创建用户特有的驱动程序。

  (1) 建立EZ_USB GPD

  建立GDP需要微软的WDM DDK和微软的Visual C++6.0。EZ-USB的GPD ezusb.sys是一个不用修改就可用的驱动程序,在自行开发外部设备的时,可以采用这个驱动程序作为USB驱动。

  (2) 用户态和GPD的接口

  对于用户态的应用,可以使用VC++编译工具CreateFile()和DeviceIoControl()。所有的用户态通过I/O控制调用来访问EZ_USB GPD的。一个用户态程序首先通过调用一个Win32函数CreateFile( )来获得设备驱动程序的句柄。然后用Win32函数DeviceIoControl()通过CreateFile( )函数返回的句柄,来提交I/O控制代码和相关的输入输出缓冲区到驱动程序。

  2.3 PC机用户程序开发

  后台PC机用户程序采用Visual C++6.0 编写,主要功能是利用开发的USB驱动程序完成数据的发送和接收,并将数据保存为自己定义的格式。下面将详细介绍利用USB驱动程序中定义的控制通道和块传输通道进行数据接收和保存的过程,并给出部分关键代码。

  (1)打开USB设备

  BOOL usbMark; ∥当前选定的USB 设备是否打开标志。

  usbMark=OpenUSB();∥OpenUSB函数的功能是调用设备对应的驱动程序,并获得设备的描述,其返回值为 BOOL型,可以依此判断设备是否正确工作。

  (2)定义命令请求和数据结构。

  char buffer[64];∥定义数据缓冲区;

  ULONG venderlong=0;

  REQUEST_DATA usbRequest;∥定义USB 数据传输的请求结构。

  所有的 USB 设备是通过缺省控制通道对主机的请求发出响应,这些请求是由驱动程序控制传送而完成的,请求以及请求的参数通过包的形式发向设备,这里定义的usbRequest就是请求的数据包,

  (3)填写数据传输的请求并发送数据传输请求。

  USBSendReq(&usbRequest,&buffer[0],vender-long);∥函数将请求交给USB 驱动程序,由驱动程序完成向USB设备的发送,USB设备接到请求后根据固件中的程序将数据发送回后台PC机。

  (4)进行数据的接收,本文采用的是块传输模式。

  BULK_DATA usbBulkdata;∥定义块传输结构;

  bulkControl.pipeNum=1;∥选择传输管道;

  buffer=&receivedat[0];∥定义接收缓存区;

  ULONG length=64;∥预接收的数据长度;

  BulkdataSend(&usbBulkdata,buffer,length);

  ∥BulkdataSend为数据接收函数, 函数调用后传回的数据保存在buffer中。

  经过上述步骤即可把数据从DSP保存到后台PC机内存中。

  3 结语

  本文使用USB控制器AN2131Q芯片实现了对高速信号的数据传输, 安装简单, 支持即插即用; 无需外接电源;并将其应用到基于TMS320C5409的水声信号采集及混沌特性研究系统通信中,充分验证了此接口电路的可行性和具体设计的正确性。

  本文作者创新点: 通用串行总线USB是近年来一种新兴的计算机外围设备串行通信接口,它具有传输可靠、易于扩展、低价并可热插拨等特性。本文将EZ-USB 序列芯片AN2131Q用于水声信号采集及混沌特性研究系统中,实现DSP与PC机间的通信,并在AN2131Q与DSP间加入两片IDT72V02,使得数据的传输不会出现堵塞情况,提高了传输的速度。



评论


相关推荐

技术专区

关闭