收稿日期:2009-06-16
作者简介:张君(1985 ),男,福建漳州人,硕士研究生,主要研
究方向为机械电子。
基于CV I 多线程技术的USB 高速数据传输系统设计
张 君,李声晋,卢 刚,肖文超
(西北工业大学机电学院,陕西西安 710072)
摘要:设计了一套基于USB 高速传输的数据传输系统。系统利用CY7C68013和FPGA 实现了从属FI FO
的数据传输,而USB 主机侧的应用程序则采用了Lab W indo w s /C V I 的多线程技术,通过调用W i n 32的API 函数实现了主机与USB 设备的高速通信。经测试,该系统工作稳定可靠,采样结果正确,有效数据的传输速度可达27MB /s 。关键词:USB ;从属FI FO;多线程;安全队列
中图分类号:TP24 文献标识码:A 文章编号:1000-8829(2010)04-0009-03
D esign of a H igh -Speed Data T ransfer Syste m w ith US B Interface
Based on CV IM ult-i Thread Technology
Z HANG Jun ,L I Sheng -jin ,LU G ang ,X IAO W en -chao
(Schoo l ofM echa tron i cs ,N orth w estern P olytechn i ca lU n i versity ,X i an 710072,China)
Abst ract :A set of data transfer syste m based on h i g h -speed USB is developed .The syste m usi n g CY7C68013and FPGA rea lizes the data trans m issi o n w ith slave -FI FO.The applicati o n procedure of theU SB s host si d e ap -p lies the Lab W i n dow s/C V Im u lt-i thread technology ,and the h i g h -speed co mm un ication bet w een host and the
USB dev ice is rea lized by usi n g the API functi o n o fW in32.Th is syste m is pr oved to be stab le an
d re liab le w ith the correct sa mp li n g resu l.t Trans m issi o n speed of effected data can reach 27MB /s .K ey w ords :USB ;slave FI FO ;mu lt-i thread ;safe queue USB 通用串行总线是一种广泛应用于个人计算机的标准外设接口,具有支持热插拔、即插即用、易于扩展、可总线供电和系统造价低等一系列优点,特别是USB2.0高速传输协议的数据传输速度可达到480M b /s ,这使得以高速USB 接口方式的虚拟仪器广泛应用于医疗、工业控制等领域。本系统以N I 公司的Lab -W i n do w s/CV I 软件为平台,采用Cypress 的CY7C68013和A ltera 的EP1C6Q240构建了一套基于U SB2.0高速传输的数据传输系统,达到了较高的数据传输速度,有效地监测了某永磁同步电机控制器的运行状态。
1 系统及接口芯片介绍
本系统总体结构如图1所示,系统采集的数据是一个基于TM S320F28335的永磁同步电机控制器的内部控制变量及各种相关数据,该控制器内部DSP 通过数据总线将控制器的数据传输至FPGA 缓冲区,FPGA
完成外部数据的逻辑处理并将缓冲区的数据传给CY7C68013,最后通过USB 高速端口发送至计算机完成数据的分析处理及波形的实时显示,从而实现对该控制器的实时监测。
图1 系统总体结构框图
接口芯片CY7C68013是Cypress 公司EZ -USB FX2系列中的一种。它集成了USB 2.0收发器、串行接口
引擎(SI E)和可编程的外围接口,支持480M b /s 的高速传输。C Y7C68013提供了一个串行接口引擎,负责完成大部分U SB 2.0协议的处理工作。CY7C68013的4KB 大数据FI FO (端点2、4、6和8)设计专用于传输高速片上和片外的USB 数据,而不用考虑任何带宽瓶颈,该设计具有如下特性:
利用CP U 外部数据通路直接与外部逻辑连接,而CPU 不干预FI FO 端点与外部接口之间的数据
9 基于C V I 多线程技术的USB 高速数据传输系统设计
传输;
在USB 和FI FO 之间,由 定量FI FO 的结构来保证瞬时传输数据包;
具有多种接口,能运行于从属FI FO 或GPI F 模
式下,容易与外部电路进行通信[1]
。
2 数据传输过程的从属FIF O 设计及实现
系统的数据传输包含3个环节,数据从DSP 到FPGA 的内部缓存,再从FPGA 到C Y7C68013输入端点
的缓存,最后由C Y7C68013的USB 引擎向主机发出的批量I N 请求提交数据。前2个环节都采用FI FO 方式,最后环节由CY7C68013的 定量FI FO 的结构实现。硬件接口如图2
所示。
图2 DSP 、FPGA 和CY7C68013的接口
本系统将CY7C68013设置在16位Slave FI FO 模
式下工作,进行如下配置:
将4KB 的FI FO 设置为2个端点,分别为:EP2:512B ,4倍缓冲,批量OUT ,用于接收上位机的指令;EP6:512B ,4倍缓冲,批量I N,用于接收FPGA 的发送的数据。
S lave FI FO 工作在同步方式,选择内部时钟。 引脚FLAGA 表示EP2空标志,FLAGC 表示EP6满标志。
完成Slave FI FO 的配置后,外部FPGA 即可对CY7C68013的多层缓冲FI FO 进行读写。DSP 通过D MA 方式将数据写入FPGA 缓冲区,而FPGA 在每个时钟上升沿判断C Y 7C68013的FL AGC 引脚,当端点6的FI FO 非满时,FPGA 将数据写入C Y7C68013,计算机应用程序对U SB 端口发出批量传输请求读取存放在CY7C68013的数据。
3 软件设计
USB 设备的软件设计主要包括用户应用程序、驱动程序以及固件程序的编写。本系统主要涉及固件程序和上位机的开发,而底层驱动程序则利用Cypress 公司提供的通用驱动程序,由DDK 编译后直接安装使用。软件的部分功能框如图3所示。3.1 固件程序
运行在CY7C68013上的固件程序,采用C 语言编
写并在K eil C 中编译,负责控制CY7C68013接收并处应用程序及U SB 驱动程序的请求、通过CY7C68013存放数据并实时上传至计算机等。
图3 软件部分功能框图
固件框架如图4所示,主要包含初始化、处理标准USB 设备请求以及U SB 挂起时的电源管理等。框架首先初始化内部变量,然后调用用户初始化函数TD _In it()。从该函数返回后,框架初始化USB 接口到未配置状态并使能中断,然后每隔1s 进行一次设备重枚举,直到端点0接收到一个SETUP 包,同时框架将按如下步骤开始执行交互的任务调度:
调用用户函数TD _Po ll (),以实现USB 外设的主要功能。
thread技术判断是否有标准设备请求等待处理。如果有,则分析该请求并响应。
判断USB 内核是否收到USB 挂起信号。如果收到,则调用用户函数TD_suspend()。从该函数成功返回后(返回值为TRUE ),再检测是否发生USB 唤醒事件。如果未检测到,则处理器进入挂起方式;如果检测到,则调用用户函数TD_Resum e(),程序继续运行。如
果从TD_Suspend 函数返回FALSE ,则程序继续运行[2]
。
图4 固件框架图
3.2 基于C V I 多线程技术的应用程序设计
10 测控技术 2010年第29卷第4期
应用程序采用了Lab W indo w s /C V I ,它是N I 公司开发的以标准C 为基础面向计算机测控领域的软件开发平台,它的交互式编程方式、丰富的功能面板和库函数大大增强了C 语言的功能,为数据采集、过程监控等系统提供了一个理想的开发环境。
由软件功能框图可知,应用程序不能直接访问USB 设备,它必须通过I/O 控制来访问USB 设备驱动程序。应用程序首先调用W in32函数C reateFile()来取得访问设备驱动程序的句柄,然后使用DeveceI o -Contro l()函数向USB 设备驱动程序提交I/O 控制码,从而实现读写数据的操作。对于U SB 的I N 批量传输,读写操作将阻塞调用进程,直到数据传送完成,这会直接影响上位机程序对数据的处理与显示,因此必须采用多线程技术。
多线程技术的优点在于将进程分解为多个线程,在主线程外产生一个或几个辅助线程,用于完成数据读取、显示等任务。采用多线程的关键问题在于线程间的数据保护,即防止多个线程同时操作同一变量,
导致逻辑错误。在CV I 中,系统提供了一种所谓线程安全队列机制来保护共享数据,实现线程间安全的数据传输。特点在于传输数据量大,且读取数据和写数据互不影响,数据传输基于事件模式,在队列数据达到指
定数量自动调用回调函数[3]
。对这种由辅助线程采集处理大量数据并传递给主线程进行显示的线程安全队列机制无疑是本系统的最佳选择。
本设计多线程架构主要通过线程安全队列开辟的缓存进行线程的同步与通信。在建立线程安全队列的同时设置回调函数,当有线程向线程安全队列添加数据或读取数据时,立即触发事件响应函数,这些函数存在于数据处理线程中,从而完成相应的数据处理功能。
按照软件实现的功能,把应用程序需要处理的任务分为用户界面控制、数据采集、数据的实时显示以及数据分析。在CV I 多线程程序中,使用主线程创建、显示并运行用户界面,在次线程中运行对时间要求较高的操作,如数据读取及分析。在所有的并发线程中,负责数据采集线程优先权仅次于用户界面线程。数据采集系统主要完成的任务有实时采集波形,对USB 传输的数据进行解包并通过动态绘图控件将波形进行直观地显示。
4 系统测试结果
数据采集系统应用程序的用户界面如图5所示。
首先查并打开设备,设置各种参数及信号,然后对设备进行读写等操作,最后关闭设备。应用程序设置有
2种工作模式:示波器模式和录波仪模式[4]
。示波器
模式对传输的数据进行实时处理并显示,录波仪模式
则是关闭曲线绘制及数据显示,应用程序不断地接收原始实验数据并保存在计算机硬盘中。
对系统进行了以下两方面的测试。
示波器模式。启动系统,将控制器运行时的相关实验数据传送至应用程序,经测试,数据传输系统能顺利地对DSP 的数据进行实时分析和显示。
图5 应用程序用户界面
录波仪模式。当应用程序运行在录波仪模式时,主要测试USB 数据传输的速度,这里采用测试软件BusH ound 来测试系统的数据传输速度。首先运行测试软件,应用程序运行在录波仪模式下,经测试,系统最高数据传输速度为27MB /s 。两种模式的比较:在示波器模式下,由于应用程序要对读回的数据进行分析、显示等处理,因此数据传输速比较低,大约为3MB /s ,但能实时监测电机控制器的运行状态;在录波仪模式下,由于应用程序只负责数据的读取与保存,所以速度较快,能传输较大的数据量,适合于对实验结果进行事后分析。
5 结束语
以上使用CY7C68013和FPGA 为主要芯片,完成了基于USB 的高速数据传输系统,DSP 利用FPGA 通过数据总线与CY7C68013实现了S lave FI FO 模式的数据传输。在主机侧的应用程序中,采用Lab W i n -do w s/CV I 的多线程技术实现了数据的采集、分析处理以及波形的实时显示,从而有效地监测了某同步永磁电机控制器的运行状态。参考文献:
[1] Cypress .CY 7C68013EZ -U SB FX 2TM m icrocontroll e r h i gh
speed U SB pe ri phera l contro ller[Z].2004.[2] 钱峰.EZ -U SB FX 2单片机原理、编程及应用[M ].北京:北京航空航天大学出版社,2006-03.[3] 张靓,黄海于,张翠芳.基于L ab W i ndow s/C V I 多线程数据
采集的研究与设计[J].中国仪器仪表,2005,(8):74.[4] 罗伟林,王立欣,毛远.U SB 数据采集系统中DMA 数据传
输的实现[J].电子测量技术,2008,31(6):121-124.
11 基于C V I 多线程技术的USB 高速数据传输系统设计
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论