usb2 0 高速实时数据采集系统的设计与实现

  • 格式:doc
  • 大小:34.50 KB
  • 文档页数:11

usb2 0 高速实时数据采集系统的设计与实现

usb2 0 高速实时数据采集系统的设计与实现 文章编号:

1009-8119(2004)04-0000-00 USB2.0高速实时数据采集系统的设计与实现 任敬辉 吴嗣亮 (北京理工大学 电子工程系,北京,100081) 摘 要 介绍了一种基于USB2.0的高速实时数据采集系统的硬件及固件程序设计方案,及在不同的DSP、单片机之间移植固件程序的方法和调试过程中可能出现的问题及解决办法。

关键词 USB2.0,DSP,ISP1581,数据采集 Design and

Implementation of the High-Speed Real-time Data Collection

System Based on USB2.0 Ren JingHui Wu Siliang

(Department of Electronics Engineering, Beijing Institute of

Technology, Beijing, 100081, China) Abstract To introduce the

hardware design for the high-speed real-time data collection

system based on USB2.0. To introduce the design of firmware

and how to migrate it to various DSP and microprocessor.

Keywords USB2.0, DSP, ISP1581, Data Collection 高速数据采集中,数据采集速率通常会达到几兆甚至几十兆字节每秒。

在这些大批量的数据面前,通常的存储设备是无能为力的。

在众多的解决方案中,将数据实时的传输到PC机上存储成为方案中的首选。

目前应用于PC的接口中,标准的串口速率只能达到230Kbps,虽然标准的并行口是串口速率的8倍,可仍不能满足实际的需求,因此需要有更快、更稳定的接口来解决这个问题。

微软、Intel等公司联合制订的通用串行总线(USB)具有速率高、方便易用、价格低廉、易于扩展等特点。

目前的USB2.0标准支持速率达到480Mbps,能很好的满足大部分的接口需求。

本文以Philips公司的ISP1581为例介绍了基于USB2.0接口的高速数据采集与实时存储系统的软硬件设计方法。

1 ISP1581简介 ISP1581是Philips公司2002年推出的一款符合USB2.0协议的设备控制器,它除了具有一般USB设备控制器具有的特点外,还拥有诸如软连接、低频晶体振荡器、多种不同结构的DMA模块等自身特性。

除了内部通用的DMA接口外,ISP1581还可通过一个高速的并行接口和不同的DSP、ASIC、单片机等微控制器相连接以实现高速的数据通信,这些特点使其可以理想地应用于打印机、扫描仪、CD、DVD、数码相机等外部设备上。

ISP1581可直接与ATA/ATAPI外设相连接。 内部集成了3.3V的电压调整器,因此可用5V或3.3V供电。

频率为12MHz,内部集成了40倍PLL时钟乘法器来产生USB收发器的480MHz时钟信号。

ISP1581是一款工业级芯片,工作温度范围从-40℃~85℃,适合应用于对温度要求较高的产品设计中。

2 硬件设计 ISP1581的硬件设计相对比较简单。

因其内部没有集成标准的8051,所以必须通过外接微控制器来完成初始化、枚举甚至传输等工作,这也使得它的固件设计和使用的微处理器有着很大的关系,在后续内容中将找到如何在不同的微处理器之间移植固件。

ISP1581有两种总线结构配置,上电时通过BUS_CONF输入管脚进行选择。

·通用处理器工作模式(BUS_CONF=1) 在这种模式下,芯片有独立的8位地址线、16位数据线可以方便的和各种DSP与单片机相连接,此外还有读写、片选等控制信号。

这种工作模式的极限速度是25MB/s。

电路连接如图1所示。

·分开总线模式(BUS_CONF=0) 在这种模式下,芯片有8位地址/数据复用的微处理器总线和16位DMA数据总线以及一些控制信号,通常工作与不同类型的DMA方式下,如GDMA、UDMA等。 这种工作模式的极限速度是25MB/s-30MB/s。

电路连接如图2所示。

DSP/ ASIC/ 单片机 (R/W)/RD 读信号 写信号 DS/WR

ISP1581 地址/数据 8 AD[7:0] ALE/A0 地址锁 存使能 中

断 INT D M A 16 DATA DREQ DACK DIOR DIOW 图2 片

选 CS DSP/ ASIC/ 单片机 等各种 MCU ISP1581 AD[7:0]

地址线 数据线 DATA[15:0] 读信号 写信号 中 断

(R/W)/RD DS/WR INT 图1 16 8 可以看出,ISP1581的电路设计非常简单,ISP1581完全可以作为通用外设来处理。

它与MCU数据的交换是通过寄存器来进行的,例如写了端点索引后,就可以通过数据端口寄存器(地址0x20)来往端点中填充或者从端点里读出数据。

3 固件程序设计 ISP1581的固件程序可分为主程序、中断服务程序和请求处理程序三部分。

其中主程序的主体部分是个无限循环,用来循环查询一些标志,如请求处理、需要填充数据等标志,一旦标志有效就进入相应的子程序进行处理。

中断服务程序来处理ISP1581产生的硬件中断,同时根据中断的不同来将不同的标志置位或清除。

请求处理程序负责完成枚举阶段收到的标准请求以及在正常工作阶段收到的厂商请求等。

3.1主程序设计 主程序里需要完成的工作有: 初始化MCU,初始化和配置ISP1581,循环查询标志等工作,总体流程如图3。

对于不同的MCU和硬件设计,固件程序的主要差别在ISP1581的寄存器地址映射及访问方法、中断的产生及处理方法以及不同MCU的自身初始化部分。

以ISP1581与TMS320F206接口为例,如把ISP1581的寄存器地址映射到数据空间,范围为0x7F00 ~ 0x7FFF,则对于通用处理器模式,初始化ISP1581的C代码如下:

*((unsigned short *)0x7F0C) = 0x08; //设置模式寄存器,使能全局中断 *((unsigned short *)0x7F00) = 0x80; //使能缺省的地址0 *((unsigned short *)0x7F10) = 0x60; //设置中断配置寄存器 *((unsigned short *)0x7F14) = 0x3d21; //设置中断屏蔽寄存器 *((unsigned short *)0x7F0C) = 0x09; //设置模式寄存器,使能软连接 当使能软连接后,ISP1581就会收到主机的复位信号,从而进入复位中断。

如果把寄存器地址映射到I/O空间,那么寄存器的读写则要改为I/O读写方式。

ISP1581的中断触发方式可设置为电平或边沿,且极性可设置,这使得它可以方便的和不同MCU的中断触发方式相匹配。

中断处理方式可以是硬件中断或者查询中断,经验证,只要中断能及时的得到处理,两种方式均可正常工作。 读写端点与读写寄存器相同,只需先写索引寄存器选中端点,然后对数据端口寄存器读写即可,一次可以读写8位或16位,依据数据总线的位数确定。

图4 中断服务程序 读中断寄存器 否 总线复位中断?

是 否 Setup中断? 是 否 EP0中断? 是 否 其它端点中断? 是 置连接速度标志 重新初始化1581 读取setup数据

置主机请求标志 进入中断服务程序并作相应处理 设置有数据in 或out传输标志 中断结束 主程序 MCU自身初始化

初始化配置ISP1581 否 有主机请求? 有数据传输? 是

是 否 进入请求 处理程序 循环 进行数据读写操作 图3

在进行高速实时数据传输时,往端点写或从端点读出数据的程序段可放在主程序的循环中,并通过空满标志来判断。

这种处理的优点是可以随时响应硬件中断,不会因USB读写数据时间过长而影响其它需要及时处理的中断。

当然,如果数据是非实时的,那完全可以放在中断处理程序中完成,只要把USB中断的优先级设置低一些,允许中断嵌套即可。

对于实时传输,除了固件要做时间估算外,驱动程序也要作相应的处理才能达到数据完整性的要求。

在实际应用中,将ISP1581与输入时钟12Mhz(内部5倍频)的DSP TMS320VC33接口,采用通用处理器模式,使用批量传输方式,实现了数据率为30Mbps ~ 40Mbps的无误传输。

当与输入时钟30MHz(内部5倍频)的TMS320F2812接口时,传输速率达到70 Mbps~ 80Mbps。

如果提高MCU的时钟频率或改用DMA方式,速度将会有进一步的提高。

3.2 中断服务程序 USB设备控制器是全中断驱动的,所有的信息交互都通过中断来进行,并且除远程唤醒外的所有传输都要由主机启动,设备只负责对主机的请求做出响应,因此,USB设备的主要功能部件需在主机端实现,使USB设备端的制造成本大大降低,这也是USB接口获得如此广泛应用的一个重要原因。

中断服务程序实现对各种中断事件的处理,总体流程如图4所示。

进入中断服务程序后,首先要读取ISP1581的中断寄存器,判断产生中断的原因,然后调用相应的子程序来处理。

中断原因主要有:

Setup中断、挂起、唤醒、SOF、高速状态检测、端点0中断以及其它端点中断。

其中流程图中提到的中断是必须处理的,而其它的中断则根据情况的不同而做相应的增减。

当收到Setup中断时,首先要读出8字节Setup包的内容,然后设置标志位,当主程序查询到该标志后,执行请求处理程序。

当收到端点0中断时,除读写数据外,还要根据情况给主机发送握手信号,当收到其它端点中断时,设置有数据的标志,当主程序查询到该标志后会根据情况从端点读出数据,或者把数据填充到端点中。

3.3 标准或厂商请求处理程序 请求处理程序负责处理枚举阶段主机发给设备的标准请求以及正常工作时主机发送的厂商请求,标准请求包括获得设备描述符、设置地址、获得配置描述符等。

此部分程序可以在中断处理程序中完成,也可以在主程序中完成,对于前者,该程序位于Setup中断处理子程序之后。

对于后者,一般是在Setup中断中设置标志位,然后在主程序的循环中查询这个标志位,一旦标志位有效则执行请求处理程序,在程序中根据请求的类型再调用相应的子程序处理。

3.4 调试中可能遇到的问题及相应解决方法 在USB固件程序调试中,枚举部分,也就是标准请求处理部分是个难点,下面根据可能出现的现象来分析原因并给出解决办法。