DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1227|回复: 0
打印 上一主题 下一主题

[待整理] USB数据采集系统中DMA数据传输的实现

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-26 18:09:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
引言
USB通用串行总线(Universal Serial Bus)是被PC机广泛采用的一种总线,目前已经在计算机主板上大量集成,成为一种标准配置接口。它的即插即用、真正的热插拔、可总线供电、高性能和系统造价低等一系列的优点,使得USB接口得到了广泛的应用。特别是随着USB2.0高速传输协议的出现,其数据传输速度达到了480Mb/s,使得USB接口方式的虚拟仪器系统成为今天低成本虚拟仪器系统的主流。本文设计了基于USB2.0高速传输的数据采集系统,整个数据传输过程完全采用DMA方式,达到了较高的数据传输速度。
1、系统介绍
系统总体结构如图1所示。采用Philips公司的微控制器LPC2888作为系统核心控制器。前端数据采集模块由一片CPLD实现对数据采集和触发控制的功能。当系统和计算机成功连接进入工作状态后,LPC2888从USB接口接收来自应用程序的控制命令,然后通过控制CPLD对数据采集模块采样通道、采样速率和触发模式进行配置后启动数据采集。CPLD控制模数转换器获取采样数据,同时配合LPC2888通用DMA控制器的接口时序将采样数据以DMA方式传输到LPC2888内部缓存。最后由USB高速设备接口将采样数据从LPC2888内部缓存传输到计算机,在计算机中实现数据记录、数据处理和波形显示等功能。

  
图1 系统总体结构图
1.1 LPC2888微控制器
LPC2888是一款基于ARM7TDMI内核的微控制器,带有8kB高速缓存,最高工作时钟频率60MHz。在结构上增加了多通道通用DMA控制器(GPDMA)。它支持存储器到存储器,存储器到外设,外设到存储器和外设到外设的DMA传输。本系统采用GPDMA控制器实现数据从前端数据采集模块到内部缓存的DMA传输。同时,LPC2888集成有USB高速设备控制器。它完全兼容USB2.0协议,支持USB高速传输,理论最高传输速度480Mb/s,其内部结构如图2所示。USB设备控制器直接挂接在LPC2888系统内部核心总线AHB上,可以方便地与ARM控制器内核及外部存储器交换数据。其内部包含一个DMA引擎,当USB接口运行在DMA模式时,DMA引擎作为AHB总线上的主机,在ARM内部缓存和USB设备控制器缓存之间传递数据,传输过程不需要控制器内核程序的参与,所以能够达到较高的数据传输速度。

  
图2 USB高速设备控制器内部结构图
1.2 数据采集模块
数据采集模块主要由信号调理电路、模数转换电路、触发控制电路和CPLD构成。模数转换器采用美国模拟器件公司(ADI)推出的快速12位双通道模数转换器AD9238。单双通道选择和采样频率控制通过CPLD控制逻辑来实现。
2、数据传输过程DMA方式的设计与实现
系统中数据传输过程包含两个环节,一个是从CPLD到LPC2888内部缓存,另一个是从LPC2888内部缓存通过USB接口到计算机。两个环节都采用DMA方式传输数据,两个环节之间的协调通过GPDMA控制器产生的半满、全满中断来实现。整个数据传输过程完全采用DMA的传输方式,从而可以消除因微控制器固件程序执行较慢而造成的对数据传输速度的影响。
2.1 从CPLD到LPC2888内部缓存的DMA传输
CPLD从AD9238获得两个12位的转换结果,经过位数变换后送到32位的数据信号线。数据信号线直接连接到LPC2888的P0口(32位)。由于CPLD内部没有数据缓存过程,所以为了保证不丢失采样点,从CPLD到LPC2888内部缓存的DMA传输必须保证连续性和实时性。为此,系统采取了如下解决方案:
1) 在LPC2888内部RAM中开辟两块相同大小的缓存空间:buffer1和buffer2。将通用DMA控制器的通道3和通道5分别配置为从P0口到buffer1和buffer2的DMA通道。
2) 配置DMA通道3和通道5为外部信号控制模式,由CPLD作为DMA数据传输过程的主机。
3) DMA通道3和通道5采用交替工作的方式,由CPLD控制逻辑实现。
CPLD与LPC2888之间的硬件连接如图3所示。其中DMAEn是DMA通道的外部使能控制信号,其上升沿启动一次DMA操作。DMAReq是DMA数据同步信号,该信号控制数据节拍,每次DMA操作传输4096个数据。IO口P2.0和P2.1分别为启动停止和采样模式选择控制信号线,实现LPC2888对CPLD的控制。系统采用Verilog HDL语言描述CPLD控制逻辑,从CPLD到LPC2888内部缓存的DMA传输时序如图4所示。

  
图3 CPLD与ARM接口

  
图4 GPDMA传输时序图
2.2 USB高速设备接口的DMA传输
USB高速设备控制器支持16个物理端点,其中4个端点支持DMA方式。本设计中选用三个端点:EP0、EP2和EP3。控制端点EP0工作在控制传输模式,用于接收USB主机的SETUP令牌包、响应主机的标准设备请求、完成USB设备的枚举过程。EP2配置为OUT(输出)模式,用于接收来自应用程序的控制命令。EP3配置为IN(输入)模式,采用批量传输工作方式,负责将采样结果传输到PC机。从LPC2888内部缓存到计算机的DMA传输由USB高速设备控制器内部的DMA引擎和EP3批量传输配合完成。为了达到较高的数据传输速度,EP3批量传输采用自动传输模式。DMA引擎将LPC2888内部缓存数据传输到USB设备控制器内部FIFO缓存中,当FIFO获得的数据达到设定的大小时将自动封包由EP3传输到PC机。同时,当FIFO中数据为空时,控制器将自动启动DMA引擎继续传输数据。该环节的DMA传输过程完全由USB高速设备控制器硬件实现,程序中只需更改DMA源地址寄存器并设置使能控制寄存器即可启动一次DMA传输。
2.3 两个DMA传输环节的协调

系统中利用GPDMA控制器产生的半满和全满中断信号协调两个DMA对同一个缓存空间的操作,实现了LPC2888对整个数据传输过程的协调控制。当DMA通道3工作时,采样数据从CPLD传输到buffer1,同时USB高速设备控制器对buffer2中的数据进行DMA操作;当DMA通道5工作时,采样数据传输到buffer2,USB高速设备控制器对buffer1中的数据进行操作。如图5中LPC2888程序流程所示。

  
图5 LPC2888程序流程

3、上位机软件设计
系统上位机软件包括两个部分:设备驱动程序和系统应用程序。开发USB设备的一个关键问题在于设备驱动程序的编写。传统的开发工具是微软公司提供的设备驱动开发工具包:Windows DDK(Device Driver Kits),以及由第三方公司基于DDK开发的驱动程序开发工具包:WinDriver或DriverWorks。DDK基于汇编语言的编程方式和内核模式的调用,对于没有深厚的操作系统原理和编程水平的人员来说,任务相当艰巨。本文使用美国国家仪器NI (National Instruments)公司开发的NI-VISA(Virtual Instrument Software Architecture)控制USB设备,直接配置VISA生成设备驱动程序,避开了以往开发USB设备驱动程序的复杂性,同时直接使用虚拟仪器软件设计平台LabWindows CVI开发系统应用程序,缩短了开发周期。
3.1 使用NI-VISA开发USB设备驱动程序
NI-VISA是NI公司开发的一种用来与各种仪器总线进行通信的高级应用编程接口。VISA总线I/O软件是一个综合软件包,它不受平台、总线和环境的限制,可用来对USB、GPIB、串口、PCI、VXI、PXI和以太网系统进行配置、编程和调试。使用VISA可以很容易地实现计算机应用程序和USB设备之间的连接,降低了设备驱动的开发难度。
VISA提供了两类函数供应用软件调用,USB INSTR设备与USB RAW设备。USB INSTR设备是符合USBTMC(USB测试测量类)协议的USB设备,可以通过使用USB INSTR类函数控制,通信时无需配置NI-VISA;而USB RAW设备是指除了明确符合USBTMC规格的仪器之外的任何USB设备,通信时要配置NI-VISA。经过配置后,VISA自动创建好设备驱动文件:inf文件和PNF文件。当相应的USB设备连接到计算机时,操作系统将自动安装该设备驱动并识别该设备。
3.2 系统应用程序设计
使用NI-VISA开发的USB设备可以在LabVIEW和LabWindows CVI中直接调用,其中有相应的VI子节点和库函数对设备进行操作。本系统采用LabWindows CVI开发数据采集系统应用程序。对设备的操作遵循下面的原则:首先打开设备,然后可以对设备进行读写、设置设备属性等操作,最后要关闭设备。目前应用程序设置有两种工作模式:示波器模式和连续采集存储模式。示波器模式每隔一定的时间间隔启动一次采集,采用模拟电平触发,采样长度固定,采样结果波形实时显示。连续采集存储模式启动采集后,系统将采样结果实时地存储到数据文件中。停止采集后,应用程序打开数据文件对采样结果进行波形显示、数据处理等操作。系统应用程序界面如图6所示。
4、系统测试结果
本文对该系统主要从以下四个方面进行了测试。
1)将CPLD内部逻辑设定为传输固定数据,如0xAA55。系统在连续采集存储模式下工作,获得数据文件。采用二进制文件编辑软件UltraEdit查看数据文件,其中所有采样点结果均为0xAA55。验证了数据传输过程的正确性。
2)将CPLD内部逻辑设定为传输每次增1的数据,获得采样数据文件进行查看。得到采样点结果为递增的数据,每次增量为1。验证了数据传输过程没有丢失采样点,保证了数据传输过程的可靠性。
3)将CPLD内部逻辑设定为传输AD采样结果。系统工作在示波器模式下,实时查看采样结果波形。调整输入模拟信号幅值、频率和波形,分别得到相应的采样结果波形。验证了AD转换环节的正确性。图6所显示被采样信号为250Hz正弦信号,峰峰值5V,采样速率1MS/s。

  
图6 系统应用程序界面
4)USB接口数据传输速度测试。这里采用总线分析测试软件Bus Hound测试系统的数据传输速度。该软件可以观察USB设备的工作情况,读取当前USB设备输入输出数据量的大小、数据传输速度和设备属性等信息,并且在运行过程中不会对设备的工作产生影响。测试时首先运行Bus Hound软件,启动系统工作在连续采集存储模式,然后可以在Bus Hound中得到系统的数据传输速度。经测试,系统最高数据传输速度为16MB/s(128Mb/s)。图7所示为Bus Hound软件界面和数据传输速度测试结果。

  
图7 软件Bus Hound的界面与速度测试结果
5、结论
本文使用嵌入式微控制器LPC2888和CPLD成功地完成了基于USB高速传输的数据采集系统。系统利用CPLD配合GPDMA控制器实现了从数据采集模块到LPC2888内部缓存的DMA数据传输,利用USB设备控制器DMA引擎配合端点批量传输实现了从缓存到计算机的DMA传输,并通过中断对两个环节进行协调实现了整个数据传输过程的DMA传输。经测试,系统有效数据传输速度达128Mb/s。
在USB设备驱动应用程序的开发上,本文尝试了一种新方法。配置NI-VISA生成驱动程序,在LabWindows CVI中进行应用程序设计,通过VISA控制USB设备。实践证明:使用该方法开发的系统稳定可靠,不需要开发者了解驱动程序内核,开发难度低,是一种简单、快速开发USB接口应用系统的好方法。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-29 00:31 , 耗时 0.115828 秒, 22 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表