《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 业界动态 > 基于USB的DSP高速数据传输系统

基于USB的DSP高速数据传输系统

2008-04-11
作者:张 鑫1, 苏东林1, 李保权

  摘 要:介绍了在TMS320C32系列DSP上,利用EZ-USB FX2微控制器扩展USB接口的技术,实现了DSP与计算机之间的高速数据传输。
  关键词:USB DSP FX2 USB驱动 固件


  数字信号处理器DSP以其运算速度快的特点已被广泛应用。但目前绝大部分DSP处理器仅提供了串口通讯方式,该方式仅适合少量数据的传送,不能满足通讯、图像处理等需要高速数据交换场合的应用。由于DSP运算过程中产生的大量数据不能实时向计算机传输,从而成为拓展DSP应用领域的一个瓶颈。而近几年发展起来的通用串行总线USB技术,能够满足设备间的高速数据传输。如果将USB技术应用到DSP处理器上,就可以彻底地解决DSP设备与计算机间大数据量的交换问题,从而极大地扩展了DSP的应用领域。本文实现了在TMS320C32系列DSP上,利用EZ-USB FX2微控制器扩展USB接口的技术,实现了DSP与计算机之间的高速数据传输。
1 USB简介
  通用串行总线USB的概念自1995年被提出以来,至今已经历了规范1.0、1.1和2.0。现在的USB2.0规范在原有的低速模式(low speed)1.5Mbps、全速模式(full speed)12Mbps的基础上又支持高达480Mbps的高速模式(high speed),从而使USB总线真正成为能满足高速应用场合的标准连接总线。在USB2.0中,每毫秒可发送8~10微帧,这是USB1.1传输速率的40倍,同时对缓存的要求也大大降低了。USB2.0向下完全兼容,最高可以连接127个设备。另外,在端口扩充的同时,各种采用USB2.0的设备仍可以维持在480Mbps的最高传输速度[1]
2 系统构成
2.1 EZ-USB FX2性能特点
  Cypress Semiconductor公司的EZ-USB FX2(以下简称FX2)是世界上第一款集成USB2.0的微处理器,它集成了USB2.0收发器、SIE(串行接口引擎)、增强的8051微控制器和可编程的外围接口。FX2这种独创性结构可使数据传输率达到56MBps,即USB2.0允许的最大带宽。在FX2中,智能SIE可以硬件来处理许多USB1.1和USB2.0协议,从而减少了开发时间和确保了USB的兼容性。GPIF(General Programmable Interface)和主从端点FIFO(8位或16位数据总线)为ATA、UTOPIA、EPP、PCMCIA和DSP等提供了简单和无缝连接接口。FX2的原理框图如图1所示。


  为了实现USB2.0的高速带宽,把FX2的端点FIFO和从属FIFO(实现和外部逻辑器件或处理器接口的FIFO)集成在一起以减少内部数据传输时间。并且FX2的FIFO有独特的“量子”特性[2],根据USB分组大小,外部可以一次提交多达4 096个字节的数据,而不是每次一个字节。如果用经典的FIFO,当产生坏的CRC(循环校验码)时,所有的数据必然泛滥流出;如果CRC校验正确,则分组信息能从USB域交换到I/O" title="I/O">I/O域。端点缓冲器可通过固件" title="固件">固件设置为双、三或四缓冲器,与所需的数据量或灵活性有关。FX2的FIFO量子特性及可编程设置多缓冲为满足USB2.0所需带宽提供了保障。
2.2 TMS320C32性能特点
  数字信号处理器采用TI公司的TMS320C32,这是TI公司的第一代浮点DSP芯片。TMS320C32的性能特点:具有16M字的空间,每字32位。这16M字空间包括程序存储区、数据存储区和I/O空间;为32位处理器,具有32位内部存储器、32/40位内部寄存器、32位内部总线,还支持8位、16位数据操作,并且包含了两个512×32位的快速RAM块;C32通过24位的地址总线、32位的数据总线和三组选通信号IOSTRB、STRB0和STRB1访问外部存储器;TMS320C32是在TMS320C30和TMS320C31基础上进行了简化和改进。在结构上的改进包括可变宽度的存储器接口、更快速的指令周期时间、可设置优先级的双通道DMA处理器、灵活的引导程序装入方式、可重定位的中断向量表以及可选的边缘/电平触发中断方式等。特别是其增强的外部存储器接口,使得对外部数据的操作更加方便,存储器接口电路的设计也更加灵活,因此在许多实时数据采集和信号处理的系统中得到了广泛的应用[3~4]
2.3 系统设计
  FX2有三种工作模式:端口、GPIF和从FIFO(Slave FIFO)模式。在本系统中,FX2工作于从FIFO模式下,TMS320C32作为主控(Master),直接控制FIFO数据的读写。4KB的FIFO空间全部分配给了EP2端点,使其形成四重1 024字节的缓冲。当C32向其中一个FIFO写“满”时,FX2自动将该FIFO转换到外部接口端,排队等候PC机读取;并将EP2中下一个为“空”的FIFO转移上来,供C32继续写数据。
  USB的数据传输有四种模式:块传输(Bulk Transfers)、中断传输(Interrupt Transfers)、同步传输(Isochronous Transfers)、控制传输(Control Transfers)。当需要快速传输大批量的准确数据时,一般采用块传输模式;而当传输实时性较强的数据时,则应采用中断传输模式。在该系统中采用了块传输模式。
  TMS320C32与FX2的连接如图2所示。其中,I/O和WR#分别是C32的一个通用I/O信号和读写使能信号,PKTEND用于强制FX2发送FIFO内部数据。例如,将EP2设置为自动传送模式,当C32向EP2中写满1 024个字节后,EP2自动将数据转移至USB端口,供上位机读取;当C32发送的数据不是1 024的整数倍时,最后一个数据包因为比1 024小所以不会被EP2发送。这时有两种方法:一是用无效数据将EP2补充满;二是使用PKTEND信号在PKTEND的上跳沿处,FX2将EP2内的剩余数据转移至USB[5]


3 软件设计
3.1 固件设计

  在该系统中,FX2的固件完成如下工作:
  (1)配置如下描述符。
  ;; Endpoint Descriptor
  db  DSCR_ENDPNT_LEN      ;; 描述符长度
  db  DSCR_ENDPNT        ;; 描述符类型
  db  82H            ;; 端点号是2,输出OUT
  db  ET_BULK          ;; 端点类型
  db  00H            ;; 包的大小,低字节(LSB)
  db  04H            ;; 包的大小,高字节(MSB)
  db   00H            ;; 检测间隔
  (2)初始化一些寄存器的值,使之满足系统设计。下面是采用keil C51编写的C语言固件程序的主要代码:
  void TD_Init(void)
  {
  CPUCS = 0x10; //CLKSPD[1:0]=10, 48MHz
  IFCONFIG = 0xCB; //异步从FIFO模式
  REVCTL = 0x03;
  EP2CFG=0xE8; //方向OUT,块传输,四缓冲,1024字节
  PORTACFG = 0x40; //将PA7管脚设置为SLCS,从FIFO的片选信号
  FIFORESET = 0x80;
  FIFORESET = 0x02;
  FIFORESET = 0x00;
  EP2FIFOCFG = 0x0D; //配置EP2为自动方式,16位总线
  EP2AUTOINLENH=0x04;//数据包大小为1024字节
  EP2AUTOINLENL=0x00;
  }
  可以看出,一旦FX2芯片上电后、CPU完成以上寄存器的初始化时,就不再干预FIFO的工作了,C32直接通过FIFO就建立起了与PC机之间的USB通道。
3.2 驱动程序
  USB设备驱动程序" title="设备驱动程序">设备驱动程序采用一种新的驱动模型——WDM(Windows Driver Model)。WDM通过提供一种灵活的方式来简化驱动程序的开发,在实现对新硬件支持的基础上减少并降低所必须开发的驱动程序的数量和复杂性。整个驱动程序体系的流程可以这样来描述:应用程序" title="应用程序">应用程序通过WIN 32提供的API向WIN 32子系统发出命令。WIN 32子系统通过标准的系统调用与内核层的I/O管理器" title="管理器">管理器通讯,将用户程序的API 调用转换成IRP(I/O Request Package) 包,I/O管理器将IRP 包传递给指定的设备驱动程序;USB设备驱动程序接收到这个IRP包后,根据IRP中包含的具体操作代码构造相应USB请求块(URB),并把此URB放到一个新的IRP中,然后把它传递给USB总线驱动程序;USB总线驱动程序根据IRP中所含的URB执行相应的操作(与USB主机控制器进行数据交换),并把操作的结果返回给USB设备驱动程序;USB设备驱动程序接收到此返回的IRP后,将操作结果通过IRP返还给I/O管理器,最后I/O管理器将此IRP操作结果传回给应用程序。至此应用程序对设备的一次I/O操作完成[6]。WDM型的USB驱动程序体系结构如图3所示。


  该系统采用Cypress公司提供的GPD(General Purpose Driver)模板。该模板提供了一个上层的程序代码来实现底层的驱动程序的编写,能够完成USB设备的标准请求及Cypress公司的电路所特定的请求和数据的传输。GPD所提供的接口函数具有通用性,包括打开、关闭设备及USB的I/O操作等[7]。本应用在没有改变所提供的EZUSB.SYS的驱动程序的情况下,实现主机和外设的数据通信。
3.3 应用程序设计
  应用程序是用户操作计算机的界面,界于用户与底层驱动之间。应用程序通过调用WIN32的API函数实现和驱动程序之间的通讯,完成对USB外设的读取和发送。首先,打开设备(程序打开设备“DeviceName”的方式为通用读写方式,文件共享读写):
  HANDLE hDevice=CreateFile (
  DeviceName,                //指向文件名的指针
  GENERIC_WRITEIGENERIC_READ,       //访问模式(写/读)
  FILE_SHARE_WRITE—FILE_SHARE_READ,   //共享模式
  NULL,                  //指向安全属性的指针
  OPEN_EXISTING,             //如何创建
  0,                   //文件属性
  NULL                  //用于复制文件句柄
  );
  然后进行数据传输,其代码为:
  BOOL bResult = DeviceloControl (
  hDevice,
  direction,
  &Control,
  sizeof (xxxx_TRANSFER_CONTROL),
  buffer,
  length,
  (unsigned long*)&nBytes,
  NULL
   ),
  其中,hDevice为设备句柄;direction为数据传输的方向;Control为四种USB数据传输的方式选择;size(xxxx_TRANSFER_CONTROL)为数据格式所需存储空间的大小;buffer为所传输数据的缓冲区地址指针;nBytes为传输完成后实际传输的数据个数。数据传输格式为USB设备的统一规范,可参照Windows DDK中的相应文件。
  本系统用于CCD成像检测系统中,设备成像后的图像经USB向计算机传输。如果使用传统的串口传输,即使在115 200bps的速率下,传送完一幅图像也需要7分钟。而采用本文所述的方法,DSP向计算机传送同样大小的图像仅用18秒,速度提高了23倍,并且可靠性和误码率也达到了理想效果。本文所述的方法具有一定的普遍性,可用于多种微处理扩展USB接口的方案中,有助于提高系统数据传输速率。
参考文献
1 许永和. EZ-USB FX系列单片机USB外围设备设计与应用.北京:北京航空航天大学出版社, 2002
2 宋吉超, 易克初,陆维佳. 基于EZ-USB FX2的USB 2.0系统软件开发. 现代电子技术,2005:(2)58~65
3 迟 男, 陆 俊,刘 杰. TMS320C32浮点DSP存储器接口设 计.电子技术应用,2000;(11):70~72
4 张雄伟,陈 亮,徐光辉.DSP芯片的原理与开发应用(第3版). 北京:电子工业出版社, 2004
5 邓鹏飞, 李小波,张剑云. USB2.0在DSP与计算机通信中的应用. 计算机与数字工程, 2005;(6):123~126
6 盖素丽,常 青. USB接口的驱动程序开发. 河北省科学院学报,2005;(6):17~20
7 赵 闯,张剑云.基于CY7C646xx的通用串行总线接口.电子元器件应用,2004;(5):27~29

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。