基于USB2.0的数据采集系统设计

时间:2007-11-12
 1 USB2.0概述

  USB(通用串行总线)安装过程简单,不必考虑资源分配,不必关掉计算机电源,易扩展(可扩充至127个外部设备)。随着USB升级到2.0标准,USB2.0总线的传输速度理论上可高达480 Mbit/s,不仅使USB总线完满足需要大批量数据交换的外设的要求,而且使USB总线可应用于实时信号处理系统。

  USB总线有以下4种数据传输方式:

  a)控制传输:主要用于主机把命令传给没备及设备把状态返回给主机。任何一个USB设备都必须支持一个与控制传输类型相对应的端点0。
   b)中断传输:用来支持那些偶然需要少量数据通信、但服务时间受限制的设备。
   c)

批量传输:用来传输大量数据而没有周期和传输速率严格要求的设备上。
  d)同步传输:要求恒定速率,发送方和接收方都必须保证传输速率的匹配,不然会造成数据的丢失。

  本系统中需要传输的数据量较大,且传输时机受设备控制。因此采用中断传输+批量传输的设计方法,即PC主机起始使用中断传输端点,采用中断传输方式轮询设备,如果发现设备有数据需要传输,立即转到批量传输端点,在真正的数据传输过程中,采用批量传输方式传输数据。

       2 ISP1581简介

  
ISP1581是Philips公司推出的一种价格低、功能强大的USB设备接口芯片,完全符合USB2.0规范。ISP1581需外接微控制器或微处理器对它进行控制,它支持与大多数MCU和DSP的连接。ISP1581的外部接口有通用处理器模式和断开总线模式(由引脚BUS_CONF控制)。在断开总线模式下,处理器接口使用多路复用的8位地址/数据总线AD[7..0]和单独的DMA(直接存储器存取)总线DATA[15..0]。本系统采用断开总线模式、16位数据总线的MDMA(主机DMA)方式。

       3 硬件设计

  
其中USB接口芯片选用ISP1581,EPLD选用EPM7128S,MCU选用的是Cygnal的c8051f120单片机

  系统设计思路如下:ISP1581和MCU的连接采用断开总线模式,数据传输使用MDMA模式,ISP1581的16位DMA总线与FIFO的输出端相连,A/D模块的16位数据输出总线与FIFO的输入端相连。FIFO的写信号由定时芯片8254根据A/D采样频率产生,FIFO的读信号直接由ISP1581的DIOR给出(MDMA模式下),MDMA开始传输信号也由8254产生,连接到MCU的一个中断引脚,用于启动MDMA。ISP1581和8254的片选信号以及8254的地址、数据、控制等信号均在EPLD内产生。通过8254和EPLD的设置,可以保证FIFO读和MDMA写时序的配合。在本系统中,c8051f02x需要大量访问ISP1581的内部寄存器,因为c8051f系列采用数据空间和I/O空间统一寻址方式,必须采用full memory模式,即将ISP1581作为一个普通外设映射到c8051f02x外部存储空间的I/O空间。

       4 固件程序设计

   
本系统的固件程序包括单片机固件编程和EPLD方程设计两部分。单片机固件编程用于完成对ISP1581控制,处理主机发送来的一切请求,启动MD-MA开始传输命令等;EPLD方程设计用于产生各种外设的片选等,控制MDMA传输及FIFO、8254等外围芯片的时序配合。

4.1 单片机固件编程

  
单片机程序处理一切由主机发送来的USB请求(包括标准请求和自定义的厂商请求),并进行相应的数据接收和发送。本系统使用cygnal的e8051f系列单片机,所以相应使用该单片机配套的silieon Labora-tories IDE集成开发环境,采用C51语言编程,使用该系列单片机配套的U-EC3仿真器,可以设断点、在线编程、即时仿真、在线查看单片机内部寄存器的值。因为c8051f系列采用数据空间和I/O空间统一寻址方式,对ISP1581所有寄存器的访问均与单片机对普遍外设的访问方式相同。需要指出的是,C8051f12x系列单片机速度很快(快可以达到100 MHz),且指令较传统ISP8051系列有很大优化,大多数指令为单指令周期,这对提高DMA传输速度很有帮助,因为每次DMA传输有很多地方需要单片机的参与,具体参见下面"处理DMA请求"部分。下面重点论述使用MDMA部分的固件程序设计。

       1)

MDMA传输初始化

  
功能包括:
  a)设置DMA配置寄存器,指定DMA传输的数据总线位数(本系统用16位数据总线)。

  b)设置DMA硬件寄存器,指定DMA传输方式(MDMA还是GDMA)以及设置DACK、DIOW、DIOR、DREQ信号的极性。本系统使用MDMA方式,设置这些信号为低有效。

   c)设置DMA中断使能寄存器,激活指定中断源。我们设置可以产生DMA中断的源有内部EOT信号和DMA传输结束(即DMA传输计数器值变为0)。需要注意的是,此处DMA中断使能寄存器不同于ISP1581的中断寄存器,两者的设置方法不同。

  d)设置选通时间寄存器,指定MDAMA方式下DIOW或DIOR的周期。应在满足ISF1581读写周期的前提下,使该周期尽可能小,这可以显著提高DMA传输速度。经测试,应设置该寄存器的值为0x01。这部分代码可以放在程序的起始部分,需要注意的是,在初始化ISP1581的各寄存器时,应首先设置DMA命令寄存器为Ox11,使其处于上电复位状态。

       2)处理DMA请求

  
主机发送指定传输大小的DMA读的厂商请求后(传输大小应等于每个中断间隔内A/D采样数据大小,以保证所有采样数据不会丢失),单片机响应该请求,进入相应函数处理DMA请求。具体编程如下:

  a)设置DMA端点寄存器,指定DMA传输使用的端点。需要注意,为防止DMA端点寄存器与当前使用的端点索引寄存器相同,应首先指定端点索引寄存器为一个与DMA端点寄存器不同的端点值。

  b)设置DMA传输计数器寄存器,指定本次DMA传输的字节数。当然,这个数越大,DMA传输的速度越快,但笔者经过测试发现,该数不要大于65535,否则可能MDMA传输会失败。而且该数是512的整数倍,这可以保证没有短包传输。

   c)设置DMA命令寄存器为0x06(表示MDMA读),开始MDMA传输。

  d)程序应循环查询DMA中断寄存器的值,判断本次传输是否完成,如果完成,则清DMA中断寄存器,退出循环,完成本次DMA传输。
    3)中断程序设计

  
本系统中需要用到2个外部中断,分别对应2个中断程序。第1个中断函数用于读出并保存当前所有ISP1581发出的中断的拷贝。注意,我们不仅要保存中断寄存器的值,还要保存DMA中断寄存器的值。需要强调的是,因为ISP1581是全中断驱动的,所有的信息交互都通过中断完成,PC机对ISP1581的任何操作都会引起ISP1581相应的中断,进而单片机通过查询1581中断寄存器判断并处理中断。第2个中断函数是8254发给单片机的,当完成指定周期的A/D数据采样后,8254通过本中断程序通知单片机启动MD-MA开始传输标识,即转到上述"处理DMA请求"部分,读FIFO中的数据。本系统设计8254每隔5 ms左右产生中断,进行DMA传输。

  系统采用中断传输+批量传输的方法设计中断程序,即如果数据采集模块有数据需要传给主机,首先采用中断传输方式传输数据通知主机,方法是在本段函数的起始部分通过固定的中断传输端点发送8字节数据以与驱动程序部分吻合,然后使用批量传输端点实际传输数据;而主机端应用程序则不断轮询该中断传输端点,若接收到8个字节固定格式的数据,马上采用批量传输方式接收数据。该方法不但利用了中断传输方式的实时性(1 ms以内),而且充分利用了批量传输的高速率。若FIFO的读写和8254的时序设计得当,利用该方法,可以实现10 MB/s以上的数据录入。在实验中,我们已经做到了8 MB/s的录入速度。

  USB驱动程序
将另文详述。笔者认为,第1个中断程序的优先级应不低于第2个程序,这样可以保证ISP1581发出的所有中断可以立即得到执行。

       4.2 EPLD方程设计

  
EPLD的功能主要包括提供ISP1581的cs及DREQ信号,提供8254的片选、地址、数据、控制、时钟输入等信号,以及提供FIFO的FIFO_RESET、FIFO-WR、FIFO-RD等信号和A/D转换模块的CLK、START等信号。重点是如何使用MDMA传输的几个重要信号DREQ、DACK、DIOW、DIOR、EOT信号。查询芯片手册,在MDMA模式下,DREQ为输入信号,DACK、D1OW、DIOR、EOT为输出信号。也就是说,当设置DMA命令寄存器为0x06(主机DMA读)时,ISP1581开始不停地查询DMA请求信号DREQ是否为低,若DREQ为低,则传输开始;否则一直查询。因此,可在EPLD中设置DREQ接地,这样可以保证当设置DMA命令寄存器为0x06时,1581立即进行传输。D1OR为输出信号,由1581提供,可直接作为FIFO的读信号;FIFO的写信号由8254的一个输出引脚提供,8254应根据A/D采样频率初始化该定时器,输出该引脚。

       5 结束语

  
本文提出了一种使用USB2.0芯片。ISP1581实现数据采集系统的设计方案。MDMA的DIOR周期为120 ns左右,因此ISP1581在主机DMA模式下,理论上传输速度应为约16.6 MB/s(1000/120×16=132.8 Mbit/s=16.6 MB/s)。在实验中,我们使用的主机端配置为Windows2000+PⅣ3.0 GHz+512 MBDDR RAM,在批量模式下传输速度现已达到13 MB/s~15 MB/s(主机配置不同,传输速度也会相应有所改变),中断模式下传输速度达到1 MB/s~1.5 MB/s(约每隔0.5 ms进行中断传输,每次传输512字节),基本达到ISP1581 MDMA方式下速度上限,且传输模式、每次采样时间间隔、每次采样数据大小均可通过软件调节。该系统现已实际投产,应用于某雷达。



  

参考文献:

[1]. EPM7128S datasheet https://www.dzsc.com/datasheet/EPM7128S_301040.html.
[2]. c8051f120 datasheet https://www.dzsc.com/datasheet/c8051f120_209854.html.
[3]. c8051f02x datasheet https://www.dzsc.com/datasheet/c8051f02x_209834.html.


上一篇:面向PLC的精密信号处理与数据转换器件
下一篇:基于信号完整性理论的PCB仿真设计与分析研究

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料