当前位置:首页 > 电源 > 数字电源
[导读]详细讲述数据采集卡的硬件部分设计,并简要介绍固件程序、驱动程序和应用软件的设计。

摘要:讨论基于USB接口高速数据采集卡的设计与实现。详细讲述数据采集卡的硬件部分设计,并简要介绍固件程序、驱动程序和应用软件的设计。

    关键词:USB2.0 FPFO FPGA 固件程序 主从系统

引言

数据采集在现代工业生产及科学研究中的重要地位日益突出,并且实时高速数据采集的要求也不断提高。在信号测量、图像处理、音频信号处理等一些高速、高精度的测量中,都需要进行高速数据采集。现在通用的高速数据采集卡一般多是PCI卡或ISA卡,这些采集卡存在很多缺点,比如安装麻烦,价格昂贵,尤其是受计算机插槽数量、地址、中断资源的限制,可扩展性差。

通用串行总线USB是用来连接外围设备与计算机之间的新式标准接口总线。它是一种快速、双向、同步传输、廉价的并可以实现热拔插的串行接口。USB技术是为实现计算机和通信集成而提出的一种用于扩充PC体系结构的工业标准。基于USB接口的高速数据采集卡,充分利用了USB总线的优点,它也必将被越来越多的用户所接受。

1 USB数据采集卡原理

1.1 USB简介

USB是英文Universal Serial Bus的缩写,中文含义是“通用串行总线”。它支持在主机与各式各样即插即用的外设之间进行数据传输。它由主机预定传输数据的标准协议,在总线上的各种设备分享USB总线带宽。当总线上的外设和主机在运行时,允许自由添加、设置、使用以及拆除一个或多个外设。USB总线技术的提出就是想利用单一的总线技术,来满足多种应用领域的需要。USB1.1协议支持两种传输速度,即低速1.5Mbps和高速12Mbps。为了在高速接口之争中占有一席之地,2000年发布了USB2.0协议,它向下兼容USB1.1协议,数据的最高传输速率提高到480Mbps,这就使USB对打印机和其它需要快速传递大容量数据的外设更具吸引力。

为了满足实际数据采集USB传输速度较高的需要,选择了Cypress公司的内置USB接口微控制器芯片EZUSB FX2系列,开发了具有USB接口的高速数据采集卡。

1.2 系统框图

USB系统是一个主从系统,而非对等(peer-to-peer)系统。在主从系统中,命令是由主设备发出,而从设备只能接收命令,只有在主设备读取数据时,从设备才能提交数据。如图1所示,在USB控制器与外围电路之间需要一个FIFO,来充当数据的缓存区。那么,在USB从设备向主设备发送数据时存在一个问题:FIFO多大才能满足要求。为了满足数据采集中高速实时流数据垢应用,避免FIFO溢出,在我们的系统中,通过FPGA及SDRAM构造一个容量的FIFO(图1虚线框内所示),可以提供一个低成本并能满足高速实时流数据传输的解决方案。

图2

2 USB数据采集卡硬件

2.1 EZ-USB FX2(CY7C68013)芯片

Cypress公司的EZ-USB FX2系列芯片是最早符合USB2.0协议的微控制器之一,它集成了符合USB2.0协议的收发器(transceiver),串行接口引擎(SIE),增强型的8051内核以及可编程的外围接口。FX2系列芯片独特的结构使得数据传输速度最高可达56Mbps,最大限度地满足了USB2.0的带宽。

EZ-USB FX2的微处理器是一个增强型的8051内核,性能可达标准8051的5~10倍,并与标准8051的指令完全兼容。增强型的8051内核使用RAM世馘 作程序指令和数据存储器,从而使得EZ-USB FX2具有“软”特性,也就是说,可以通过自行编写程序指令来实现所需的功能。EZ-USB FZ2使用增强型SIE/USB接口(称为USB核),通过执行USB部本身的协议来简化8051代码编写的工作。这样采用硬件完成USB塄,简化了固件代码的编制。对于固件代码的使用,主机通过软件下载的方法实现。这种方法充分利用FZ2内部的8KB RAM来装载8051代码和数据。由于EZ-USB FZ2具有重新枚举的能力,所以在初始化枚举时,用户并不需要断天设备就可以装载新的描述符。设备描述符和8051程序代码都能通过主机中的磁盘文件下载,只有制造商号、产品号和设备号从启动时从一个16字节的EEPROM下载到硬件中的。通过这种方式,可以比较容易地从主机升级软件和修改USB总线设备的固件代码。

EZ-USB FX2的通用可编程接口GPIF以及Master/Slave端点FIFO所对应的8/16位数据总线,可以很容易地实现FX2与当前一些主流通过接口(如ATA、UTOPIA、EPP、PCMCIA和大部分DSP处理器)的互连。它共有7个端点,端点0,端点1和IN和OUT,还有端点2、4、6和8。其中,前3个端点的大小是固定的64字节,后4个端点默认大小是2级512字节的FIFO,端点2和端点4默认是OUT端点,端点6和端点8默认是IN端点,而端点2和6分别可以定义为2级、3级或4级的存储器,每级的大小也可以是512字节或1024字节。从EZ-USB FX2方向来看,一个端点相当于通过总线收发数据的缓冲区,EZ-USB FX2从OUT缓冲区中读取端点数据,将通过USB传的端点数据写入IN缓冲区。它求全责备速(12 Mbps)和高速(480 Mbps)传输速率,并具有USB协议所规定的4种传输方式,即控制方式(control mode)、中断传输方式(interrupt mode)、批量传输方式(bulk mode)和等时传输方式(isochronous mode)。

    EZ-USB FX2系列是基于RAM的“软”结构,在开发过程中允许无限制设置和升级;它支持全速USB总线吞吐量的传输,使用EZ-USB FX2进行设计,可以不受端点数、缓冲区大小和传输速度的限制;此外,其内核中做了大量的辅助指令,简化了编码,同时也加快了对USB特性的了解。基于以上EZ-USB FX2系列芯片的特性,在开发的过程中,采用了EZ-USB FX2系列中的CY7C68013芯片(128引脚),其简化结构如图2所示。

FX2可配置成三种不同的接口模式Ports、GPIF Master和Slave FIFO,本项目采用Slave FIFO模式。在该模式下,外部逻辑或外部处理器直接连接到FX2的端点FIFO,GPIF没有被激活,因为外部逻辑可以直接控制FIFO,所以FIFO的基本控制信号(标志、片选、使能)由FX2的引脚引出。外部控制可以是同步或异步,可以使用内部时钟,也可以向FX2的接口提供外部时钟。

2.2 FPGA芯片EP1C6-Q240

在本设计中,所用的FPGA采用Altera公司最新的CYCLONE芯片EP1C6-Q240。它是一款高速价比的FPCA芯片,工作电压为1.5V,采用0.13μm工艺技术,全铜SRAM工艺,其存储器密度可达5980个逻辑单元,包含20个128×36位的RAM块,总的RAM空间达到92160位,内嵌了2个锁相环电路和一个用于连接SDRAM的特定双数据率(deficated data rate)接口。此外,该芯片还支持多种不同的I/O标准(包括PCI接口,可连接ASSP和ASIC设备的接口以及串行设备接口等)。

这里FPGA的作用除了与SDRAM构成一个大容量的FIFO以外,还需要完成一些控制功能。对于本文的应用,需要完成HDB3码到NRZ码的转换及数据的串并转换等。具体问题要具体分析,用户可根据自己的需求对FPGA进行编程。

2.3 A/D转换芯片MAX1180

MAX1180是Maxim公司的双通道105Msps、3.3V工作电压、低功耗的高速A/D芯片,采样数据10位电平量化。它是采用差分输入,带有宽带跟踪/保持(track-and-hold)的双通道9级流水线型结构的ADCs,如图3所示。实际的芯片包括两个图示的电路,作为输入的两路通道,互不干扰。各路采样信号每半个时钟周期通过一个STAGE,完成连续转换到数据输出共需5个时钟周期。每个流水线首先通过一个1.5位的快闪ADC对输入电码量化,然后再由DAC产生一个对应于量化结果的电压并与输入电压作差,输出电压放大2倍后送到下一级流水线处理。A/D-D/A两次变化以及差分处理的目的在于进行差错校正,以保证在流水线上的各个阶段,ADC的偏移量得到补偿并且无代码丢失。

2.4 硬件连接

根据系统对数据传输的速度和实时性的要求,配置CY7C68013工作的接口模式为Slave FIFO模式。当进行数据采集时,硬件连接方式如图4所示。

A/D转换器的采样时钟同时作为CY7C68013的Slave FIFO模式的读写控制时钟,即CY7C68013的接口时钟连接到IFCLK引脚。SCWR/SLRD是CY7C68013 Slave FIFO的写使能/读允许信号。FPGA向C7C68013 Slave FIFO提供Slave FIFO输出允许信号SLOE,仅在数据输出时有效。FD[15:0]为16位双向数据总线。FIFOADR1:0》为端点FIFO选择信号。在数据输入时固定为00,选择的是端点2;在数据输出时固定为10,选择的是端点6。

3 USB数据采集卡软件

软件设计是一个USB设备开发的必备环节。USB应用系统软件设计分为三部分:初始化软件、主机操作系统上的客户驱动程序以及主机应用程序。初始化软件是下载到控制器中的固件代码,它响应各种来自系统的USB标准请求(包括USB设备的枚举、驱动程序的选择加载等),完成连接设备和主机的任务。主机应用软件通过客户驱动程序与系统USBI(USB Device Interface)进行通信,其主要任务是将采集进来的数据流,根据所需处理功能的要求来完成各种基于Windows程序的处理。

3.1 EZ-USB FX2的初始化

通过固件程序的调度,主机才能得到设备的描述符以及完成端点数据的传输。对于固件程序的编程,其基本结构如下:

①初始化,包括处理器和外围电路的初始化;

②主函数,包括完成符合设备特定要求的代码;

③中断处理,包括处理各种中断的程序代码。

总的来说,固件程序的编写有两种方式。其一,对于熟悉8051汇编语言的用户来说,可以直接利用汇编语言编写结构紧凑、高效率的固件代码;其二,EZ-USB以利用现成的固件程序框架函数,根据设备的需求添加相庆的用户,来完成特定的目的。

为了加快USB接口的开发过程,利用EZ-USB FX2提供的一些框架函数来简化用户代码,使用相应端口(端口2输入,端口6输出)利用EZ-USB FX2的Slave FIFO结构采用此处理传输,基本的固件程序框架函数如下:

void TD_Init(void) //该函数用来完成EZ-USB FX2的初始化

{ CPUCS=0x10; //工作频率48MHz

IFCONFIG=0xC3; //决定FX2的工作模式(slave FIFO)及相关设置

IN07VAL=bmEP2;

OUT07VAL=bmEP6;//使能端点2输入和端点6输出

EP2FIFOCFG=0x6D;//AUTOOUT=0,AUTOIN=1,WORDWIDE=1

SYNCODELAY;

EP6FIFOCFG=0x75;//AUTOOUT=1,AUTOIN=0,WORDWIDE=1

SYNCDELAY; //对端点2和端点6的配置,WORDWIDE=1配置的是使用16位数据线。

EP2CFG=0xEA; //端点2:输入、批量传输、最大包字节为1024,双缓冲

SYNCDELAY;

EP6CFG=0xAA; //端点6:输出、批量传输、最大包字节为1024、双缓冲

SYNCDELAY;

}

void TD_Poll(void) //此函数在设备运行时反复被调用,它包括完成用户任务的函数

{

}

BOOL TD_Suspend(void) //该函数在设备进行挂起状态前调用

{

return(TRUE);

}

BOOL TD_Resume(void)//设备重启后调用

{

return(TRUE);

}

在整个固件程序中,EZ-USB FX2设备上电或复位后,首先对所有的内部状态变量初始化,随后调用TD_Init()函数,并开中断,此时固件程序不断检测控制端口0是否收到SETUP包。一旦收到,固件程序就开始调用用户函数TD_Poll(),其中用户需要完成的功能代码就在TD_Poll()函数一。调用完成后,重复检测端口0是否收到SETUP包,若有,继续执行设备请求,调用TD_Poll()函数;否则,检测USB核是否有USB挂起事件,若有,调用TD_Suspend()函数,其返为真时,检测USB核是否有重新开始事件,没有时,设备进入挂起状态,反之,调用TD_Resume(),进行下一次循环;当TD_Suspend()函数返回为假时,直接转入下次循环。

此外,固件程序框架中还定义了许多中断处理函数,当用到时可以在相应的九加入自己编写的代码,这样既清晰又便于理解,用户就可以在不用改变整个程序的前提下,仅仅通过改变相应的模块,来实现自己的功能。

3.2 主机软件部分

主机软件部分包括USB客户驱动程序主和机应用程序。USB客户驱程序是支持即插即用功能的标准WDM驱动程序,它为实现控制传输、中断传输和批传输提供了标准接口函数。而主机应用程序的作用在于与操作系统相互作用,当操作系统认为有新设备接入时,就会自动调用相应的设备驱支以。加之该软件需要一个图形用户界面来控制所用的函数,这里采用VC++来编制应用程序,利用CreateFile得到USB句柄,用DeviceIoControl来向设备驱动程序发送请求,完成在EZ-USB FX2中的数据批传输的读取与写入。程序实例如下:

HANDLE DeviceHandle;

DeviceHandle=CreateFile(.ezusb0,GENERIC_WRITE,

FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);

//得到设备ezusb0的句柄

DeviceIoControl (DeviceHandle,

IOCTL_EZUSB_BULK_WRITE,

LPVOID lpInBuffer,//;输入数据存储地址指针

Sizeof(BULK_TRANSFER_CONTROL),

LPVOID lpOutBuffer,//输出数据存储地址指针

DWORD nOutBufferSize,//输出缓存大小

LPDWORD lpBytesReturned,//接收输出数据字节计数器变量的指针

NULL);

//写数据到EZ-USB FX2设备

DeviceIoControl(DeviceHandle,IOCTL_EZUSB_BULK_READ,

LPVOID lpInBuffer,//输入数据存储地址地

Sizeof(BULK_TRANSFER_CONTROL),

LPVOID lpOutBuffer,//输出数据存储地址批晚霞

DWORD nOutBufferSize,//输出缓存大小

LPDWORD lpBytesReturned,//接收输出数据字节计数器变量的指针

NULL);

//从EZ-USBFX2设备中读数据

ColseHandle(DeviceHandle); //关闭USB句柄

结语

本项目的目的是将信号处理电路中输出的信号(I、Q两路),通过模数转换,在满足10Mbps传输速率的基础上,通过USB接口完成数据写入硬盘的工作。事实证明,基于USB2.0接口的高速数据采集卡完全满足设计要求。可以预见,基于USB2.0接口高速数据采集卡一定会有广阔的应用空间。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

随着科技的飞速发展,电子产品在我们日常生活中扮演着越来越重要的角色。而在这些电子产品中,接口作为连接设备与外部设备的桥梁,其重要性不言而喻。其中,Type-C接口作为一种新型的接口标准,因其独特的优势,逐渐成为了众多电子...

关键字: 电子产品 Type-C 接口

随着电动汽车的普及,充电桩作为电动汽车的重要基础设施,越来越受到人们的关注。然而,对于许多电动汽车用户来说,直流充电桩和交流充电桩的接口和区别仍然是一个令人困惑的问题。本文将从接口和区别两个方面,详细探讨直流充电桩和交流...

关键字: 电动汽车 接口 充电桩

武汉2023年9月19日 /美通社/ -- 目前,在国家政策和市场需求双重驱动下,国内数据库行业呈现出百花齐放的态势。充分竞争的市场环境下,达梦数据连续数年保持中国数据库管理系统市场占有率前列地位,成为当之无愧的国产数据...

关键字: DM DSC 国家电网 接口

深圳2023年9月15日 /美通社/ -- 9月14-15日,2023全球AI芯片峰会(GACS 2023)在深圳正式举行。峰会以【AI 大时代 逐鹿芯世界】为主题,共探AI芯片的产学研用,邀请了清华大学教授、中国半导体...

关键字: 接口 芯科 内存 AC

Type-C接口已经成为当今市场上备受青睐的接口之一。它以其小巧轻便、高速传输、支持多种协议等特点,吸引了越来越多的关注。

关键字: Type-C 接口 USB

USB-C和Type-C是两种不同的USB接口类型,它们在外观、结构和功能上有一些区别。下面将详细介绍这两种接口类型的区别和特点,帮助大家更好地了解和认识它们。

关键字: usb-c type-c 接口

USB接口是现代电子设备中常用的接口之一,它具有通用性强、传输速度快、易于使用等特点。USB接口的应用范围非常广泛,从智能手机、笔记本电脑到电脑外设、智能家居等都可以看到它的身影。在USB接口的发展历程中,出现了多种不同...

关键字: USB 接口

USB接口是一种常见的串行接口,它的全称是Universal Serial Bus,由USB Implementers Forum制定。USB接口具有通用性强、传输速度快、支持多种设备同时连接等优点,因此在现代电子设备中...

关键字: USB 接口 串行接口

总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。

关键字: 总线 计算机 接口

在这篇文章中,小编将为大家带来Java接口的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: java 接口 Interface
关闭
关闭