主页 > 写论文 > 计算机论文 >
写论文
医学论文 水电论文 土建论文 英语论文 法学论文 经济论文 管理论文 体育论文 艺术论文 哲学论文 教育论文 计算机论文
最新文章
推荐阅读

地址:江西吉安吉州区人民广场旁6楼

电话:13667964575

客服QQ:103361327

扫码关注我们

基于FPGA的USB2.0数据通信接口
2020-02-18 15:49
摘要
  计算机技术的日新月异的使得我们IT行业的人们更加认识到知识变更带来的机遇和挑战,无论是在日常的生活中还是在平时的科研过程中,如果可以更加贴切的反馈所使用或所检测的外物,那么对测试系统和传输系统的要求就会越来越严格。由于本文的论题所涉及的方面更多的是集中在传输方面的论述,所以为了更好的理解和满足日常生活和工作中的需求,需要迫切的对USB2.0技术进行深入研究,掌握其结构特点和运行规律,加大其推广应用的力度和范围。本篇论文的课题研究是从基于FPGA的USB2.0数据通信接口作为研究的切入点,论文的架构是这样的:首先,对USB系统进行整体的描述,包括主机和方向,随后对USB传输方式进行了归纳总结,包括批量传输、控制传输、终端传输、同步传输四种方式,接着对EZ-USB FX2的基本情况从三个主要的方面进行了简介。文章的第三大部分对固件框架及固件程序进行了描述,其中,固件框架是从固件总体讲解(以FX2系列的产品为例)和固件框架流程两个方面讲解的,固件程序是从FPGA控制器实现异步从属FIFO的写、FPGA典型进程、FPGA功能仿真异步FIFO写、FPGA控制器实现异步从属FIFO的读、FIGA经典进程、FPGA功能仿真异步FIFO写六个方面,USB驱动开发包括通用USB驱动和主机应用程序,各种控制类函数包括:CYIOCTL控制类函数、CYAPI控制函数类、块传输端点控制类CCYBULKENDPOINT、设备控制类CCYUSBDEVICE、端点控制类CCYUSBENDPOINT五个方面。
  本通信论文研究的数据采集系统是基于FPGA的USB2.0数据通信接口课题,课题中通过实际案例的分析,对电路设计和程序设计均进行了实例分析,经过论证和研究,最后设备的可操作性和应用的适用性都得到了大幅提升。
关键词:USB2.0,数据采集,固件程序
第一章 绪论
 USB是通用串行总线(Universal Serial Bus)的缩写。最早是由Compaq、Intel、Microsoft等多家公司于1994年11月共同提出的,其目的是用USB来取代PC现有各种复杂的外围接口,使外围设备的连接具有单一化、即插即用、热插拔、低成本等特点。
在高速的数据采集或传输中,目前使用较多的都是采用USB2.0接口控制器和FPGA或DSP实现的,本设计在USB2.0接口芯片CY7C68013的Slave FIFO模式下,利用FPGA作为外部主控制器实现对FX2USB内部的FIFO进行控制,以实现数据的高速传输。该模块可普遍适用于基于USB2.0接口的高速数据传输或采集中。
 USB2.0支持三种信道速率:低速的1.5Mb/s,全速的12 Mb/s以及高速的480Mb/s。通常USB传输速率指的是信号或信道支持的位速率,每个USB设备的实际数据传输速率会比理想值低,除了数据之外,信道还需要传输状态控制和错误检查的信号,由于多个USB设备可能分享同一个信道,所以在实际应用中,对于单一传输最大速率,高速模式下为53Mb/s,全速模式下为1.2Mb/s,低速模式下则为800b/s。
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA的技术是随着科学技术的发展而发展的,其基础的应用范围也越来越广泛,主要包括以下几个方面:接口逻辑控制器提供前所未有的灵活性。ISA,PCI,PCI Express,PS/2,USB等接口控制器,SDRAM,DDR,SDRAM,QDR,SRAM,NAND,Flash,NOR,Flash等接口控制器,电平转换,LVDS,TTL,COMS,SSTL等。高速数字信号处理(DSP)提供前所未有的计算能力。无线通信领域,如软件无线电(SDR)、视频图像处理领域,如高清数字电视(HDTV)、军事和航空航天领域,如雷达声纳。其他应用领域包括:汽车, 如 网关控制器/车用PC ,远程信息处理系统、军事,如安全通信,雷达和声纳,电子战、测试和测量,如通信测试和监测,半导体自动测试设备,通用仪表、消费产品,如显示器/投影仪,数字电视和机顶盒,家庭网络、医疗,如软件无线电,电疗,生命科学、通信设备,如蜂窝基础设施,宽带无线通信,软件无线电(SDR)。
第二章 USB系统描述
2.1 USB的总体介绍
2.1.1USB主机
  任何USB系统中,只有一个主机,主机是USB唯一的主控者,这是USB最基本的概念。USB设备将会等待主机的请求而加以响应。我们通常所用的USB主机设计即PC上位机。
2.1.2USB方向
  由于主机是USB主控者,这样很容易理解USB方向:OUT是指从主机到设备,而IN是从设备的到主机。例如,端点6发送数据到主机,则定义为IN端点。
2.2 USB传输方式
2.2.1批量传输
  批量传输是一种突发的传输模式。此种传输方式中,在全速方式时,以8、16、32、64字节信息包传输;高速方式时,以512字节信息包传输。由于其具有自动的错误数据校验机制(CRC),所以批量传输能确保其正确性。使用于大批量数据的连续传输。
2.2.2控制传输
  控制传输用于配置设备,给设备发送命令。当USB设备初次安装时,USB系统软件采用控制数据对设备进行设置。
2.2.3中断传输
  中断传输数据是少量的,且其数据延迟时间也是有范围的。这种数据可由设备在任何时刻发送。
2.2.4同步传输
  同步数据的建立、传输和使用是连续且实时的,并以稳定的速率发送和接收实时的信息。适用于语音传输等实时性要求高的USB设备。
2.3 EZ-USB FX2简介
  下面要介绍的这个型号的设备是比较新的一代USB系列产品之一,可以通过其自有的2.0传输数据,它的芯片是以EZ-USB FX芯片为平台基础而开发研制的。
  集成的USB收发器连接到USB总线中的D+和D-;串行接口引擎SIE进行译码、编码、错误纠正和位填充,变换USB所需要的信号电平;最终,从USB接口,SIE发送和接收数据。EZ-USB FX2的CPU采用增强8051,提高了运行速度,增强了功能。同时芯片还采用了内部RAM用于程序和数据存取。
2.3.1 EZ-USB FX2 接口模式
 FX2共有三种接口工作模式,端口模式、从属FIFO(Slave FIFO)模式和通用可编程接口模式(GPIF)。下面,我们就简单的介绍一下这三种模式:
  第一,端口模式:FX2的CPU(增强型8051)使用特殊功能寄存器来控制I/O管脚的输出,读取或写入等功能。
  第二,通用可编程接口模式(GPIF):GPIF作为内部的主控制器与FIFO直接相连,并产生用户可编程的控制信号与外部接口进行通信。
  第三,从属FIFO模式:在Slave FIFO模式下,外部逻辑或外部处理器直接与FX2端点FIFO相连。在这种模式下,GPIF不被激活,因为外部逻辑可直接控制FIFO。
2.3.2 EZ-USB FX2端点缓冲区
 FX2包含了3个64字节的端点缓冲区,加上可定义为不同端点方式的4KB缓冲区空间。 3个64字节缓冲区是共有的,并且被设计成EP0、EP1IN和EP1OUT。其中,EP0是默认的控制端点0,是一个用于IN和OUT数据的单64字节缓冲区双向端点。端点1支持批量传输、中断传输和同步传输,且端点0和端点1只能由FX2的CPU进行访问。4KB可配置的缓冲区用于端点2、4、6、8(EP2、EP4、EP6、EP8)。
端点2、4、6和8是大端点,用于高带宽的数据传输。他们能够配置成各种不同的方式,从而适应带宽的要求。
第三章 固件程序
3.1固件程序
  本系统的固件程序设计,由于采用SlaveFIF0模式进行数据高速传输,因此,配置数据接收和发送端点为SlaveFIFO模式,CPU不再参与数据的传输。数据采集系统中,端点FIFO在接收到FPGA输入的信号后,等待PC读取,USB芯片只作为一个数据传输通道。由于FX2的EP2、EP4、EP6、EP8这四个端点共享4KFIFO缓冲区,故在该系统中,将EP6配置成Bulk块传输,大小为512B,2倍缓存,16位工作模式,并设置为AUTOIN模式,而用EP0作为控制参数传递。相反,数据下传系统中,打开EP2端点,同样设置成Bulk块传输,大小为512B,2倍缓存,16位工作模式,并设置为AUTOOUT模式,这样,固件程序就能完成主机和设备的双向数据传输。
void TD_Init(void)
{CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1);     //设置 CPU时钟为48MHz
  IFCONFIG |=  0x4B;//异步,从属FIFO模式,选择外部时钟为30MHz
  FIFOPINPOLAR = 0x00; // 设置SlaveFIFO接口引脚为低电平有效
  SYNCDELAY;//同步时延
 //reset the fifos
 FIFORESET = 0x80;     //将0x80写入该寄存器不应答所有从主机来的传输,然后写
 SYNCDELAY; // 0x02、0x04、0x06或0x08,复位FIFO
 FIFORESET = 0x02;                SYNCDELAY;
 FIFORESET = 0x04; SYNCDELAY;
 FIFORESET = 0x06;                SYNCDELAY;
 FIFORESET = 0x08; SYNCDELAY;
 FIFORESET = 0x00; SYNCDELAY;
 PINFLAGSAB = 0xE0; //设置FLAGB为EP6的FULL全满标志位
 SYNCDELAY;
 PINFLAGSCD = 0x08; //设置FLAGC为EP2的EMPTY空标志位
 SYNCDELAY;
// config the endpoints direction
 EP1OUTCFG = 0xA0;
 EP1INCFG = 0xA0; SYNCDELAY;     //激活端点1  BULK
 EP2CFG = 0xA2; SYNCDELAY;        //激活端点2 OUT BULK  512字节  2倍缓存
 EP6CFG = 0xE2; SYNCDELAY;        //激活端点6 IN  BULK  512字节 2倍缓存
//config the endpoint6
 EP6FIFOCFG = 0x0D;    //EP6  AUTOIN =1 ZEROLEN=1 WORDIDE=1
 SYNCDELAY;                 // 配置EP6自动方式   16位模式 
      //FX2根据包的长度值自动打包并分派IN包,该长度在EP6AUTOINLEN寄存器中
  INPKTEND = 0x06; SYNCDELAY;
 INPKTEND = 0x06; SYNCDELAY;                      //强制IN包结束
  EP6AUTOINLENH = 0x02;      SYNCDELAY;        
 EP6AUTOINLENL = 0x00;     SYNCDELAY;      //set the packet size 512字节
 //config the endpoint2
 EP2FIFOCFG = 0X11;
 SYNCDELAY;                              //EP2  AUTOOUT=1 ZEROLEN=0  WORDIDE=1  
 OUTPKTEND= 0x82;  SYNCDELAY;
 OUTPKTEND= 0x82;  SYNCDELAY;//强制OUT包结束
 EP2BCL = 0x80;                // 通过写字节计数器来控制EP2OUT
 SYNCDELAY;                    
 EP2BCL = 0x80;      SYNCDELAY;                    
}
void TD_Poll(void)              // Called repeatedly while the device is idle
{     }
3.2USB驱动开发
3.2.1通用USB驱动
 Cypress为EZ-USB系列USB接口芯片提供了一个完整的开发包,该开发包里包括了通用的USB驱动程序,可以使用最常用的Visual Studio 6.0访问。Cypress的通用驱动程序包括两个,一个为Cyload.sys,用于固件程序的下载;另一个为CyUSB.sys,用于主机和固件程序的通信 。每个驱动程序使用一个INF文件(设备信息文件)进行引导安装。两个驱动程序的INF文件都可以进行如下自定义的修改:
1.修改设备的VID/PID;
2.修改字符串(包括设备名称、制造商的字符串信息);
3.修改GUID(主机程序获取接口);
4.修改驱动名称。
3.2.2主机应用程序
主机应用程序是用于与用户进行接口的。主机应用程序通过USB设备驱动程序和外部USB硬件进行通信,USB固件程序执行所用的硬件操作。本系统以Visual C++为平台开发上位机程序,读写USB设备。在Cypress公司提供的CY3684开发包中,可以使用CYIOCTL控制函数类和CyAPI控制函数类来实现对USB设备的读写。
3.3各种控制类函数
3.3.1CYIOCTL控制类函数
  在使用Cypress提供的驱动程序基础上,只需上位机程序加入头文件cyioctl.h,然后便可以调用相应的控制函数。Cyioctl接口控制函数只提供了基本的USB控制及传输操作,一般用于USB设备的连接。如果要进行更加详细的控制操作,则需要使用CyAPI控制函数类。
3.3.2CYAPI控制函数类
  在上位机程序中加入头文件CyAPI.h和库文件CyAPI.lib即可调用相应的控制函数。
CyAPI控制函数类主要包括8个控制类:
 1.块传输端点控制类CCyBulkEndPoint;
 2.控制传输端点类CCyControlEndPoint;
 3.中断传输端点控制类CCyInterruptEndPoint;
 4.同步传输端点控制类CCyIsocEndPoint;
 5.设备控制类CCyUSBDevice;
 6.配置信息类CCyUSBConfig;
 7.端点控制类CCyUSBEndPoint;
 8.接口控制类CCyUSBInterface。
3.3.3块传输端点控制类CCYBULKENDPOINT
  块传输端点控制类CCyBulkEndPoint主要用于块传输端点。在该类中最常用的函数是BeginDataXfer,其函数原型如下:PUCHAR CCyBulkEndPoint :: BeginDataXfer(PCHAR buf, LONG len, OVERLAPPED *ov)BeginDataXfer函数是一个非常好用的异步I/O传输方法。这个函数建立一个数据传输通道,初始化传输,并立刻返回,不用等待传输完毕。
3.3.4设备控制类CCYUSBDEVICE
  设备控制类CCyUSBDevice是一个原始的库入口类指针,其中定义了很多USB设备的各种操作,使用前必须首先获得USB设备的句柄,下面介绍常用的成员函数:BulkInEndPt:指向第一个块传输输入端点数据的指针;BulkOutEndPt:指向第一个块传输输出端点数据的指针;DeviceCount:返回连接到USB总线上的USB设备个数;EndPointOf:返回端点指针;EndPoints:端点列表;Open:打开USB设备;
ProductID和VenderID:表示设备描述符idproduct和idvender的值。
3.3.5端点控制类CCYUSBENDPOINT
  端点控制类CCyUSBEndPoint包含了对USB端点的各种描述符及其操作函数。常用的函数介绍如下:
Abort:中止I/O传输端点;Address:表示设备返回的端点描述符bEndpointAddress的值;BeginDataXfer:用于通过端点进行异步数据传输;WaitForXfer:用于等待异步信号结束;FinishDataXfer:用于异步数据传输中将数据保存;bIn:表示该端点是否为IN端点;TimeOut:表示传输等待的时间。
第四章  结束语
 经过对USB的专业学习,基本实现了USB数据采集和下传系统,但仍然存在以下不足需加以改进:
 1、传输数据包长度固定。不论是数据上行还是下行数据包长度都只能是512字节,不够灵活。
 2、IN传输时,当数据传到末尾时,对于短包目前只是采用了简单的补0操作,没有考虑短包的传输,即PKTEND没有考虑。
 3、目前数据采集和下传是分成两个系统实现的需要改进的是将两个分开的系统合二为一。
  将信号处理电路中输出的信号(I、Q两路),通过模数转换,在满足10Mbps传输速率的基础上,通过USB接口完成数据写入硬盘的工作。事实证明,基于USB2.0接口的高速数据采集卡完全满足设计要求。可以预见,基于USB2.0接口的高速数据采集卡一定会有广阔的应用空间。
参考文献
【1】宋万杰,罗丰,吴顺君,CPLD技术及其应用.西安:西安电子科技大学出版社.2001.
【2】王成儒,李英伟.USB2.0原理与工程开发.北京:国防工业出版社.2004.
【3】周立功等,USB2.0与OTG规范及开发指南.北京:北京航空航天大学出版社.2004.
【4】许永和等.EZ—USB FX系列单片机USB外国设备设计与应用(第一舨).北京:北京
航空航天大学出版社.2002.
【5】陈逸等.USB大全.中国电力知识探讨:www.yylwzd.com.2013.12.10.
【6】甘历.VHDL应用与开发实践.北京:科学出版社.2003.
【7】廖济林.USB2.0应用系统开发实例精讲.北京:电子工业出版社.2006.
【8】周立功.PDIUSBDl2 USB固件编程与驱动开发.北京:北京航空航天大学出版社.2003
【9】曾繁泰,陈美金.VHDL程序设计.北京:清华大学出版社.2001.
【10】王小军。乔长阁.VHDL简明教程.北京;清华大学出版社.1998.
【11】潘松.王国栋.VEDL实用教程.成都:电子科技大学出版社.2001.
【12】廖裕评,陆瑞强.CPLD数字电路设计一使用MAX+PlusII.北京:清华大学出版社.200l.
【13】褚振勇,翁木云.FPGA设计及应用.西安电子科技大学出版社.2003.
【14】武安河,邰铭,于洪涛.Windows 2000/XP WDM设备驱动程序开发.北京:电子工业出版社.2004.
【15】张弘.USB接口设计.西安:西安电子科技大学出版社.2002.
【16】谭浩强.C程序设计.清华大学出版社.1999.
【17】Michael J.Young.Visual c++4从入门到精通.北京:电子工业出版社.1997.
【18】杨乐平,李海涛,赵勇.LabView高级程序设计.北京:.清华大学出版社.2003.
【19】Angela B.$hiflet,Paul A.Nagin,John S.Hinkel,c++程序设计(夏兆彦,孙岩译).北京:清华大学出版社.2004
【20】戴红梅,胡仁杰.带USB(通用串行总线)接rl的单片机Ez—USB。电铡与仪表.2000.(12):18~20.
【21】张民,徐讯.用LabVIEW和数据采集卡实现信号检测.北方交通大学学报.2000.24(5):78-81.
【22】林正盛.虚拟仪器技术及其应用.微型机与应用.1997.(8):2~5.
【23】侯利军,王殊,左炜,汪安民.USB2.0接口和DSP构成的高速数据采集系统,单片机与嵌入式系统应用.2004.(IO):03~66.
【24】魏品莨.用稳态平板法测定不良导体导热系数的实验研究.苏州丝绸.工学院学报.1998.(6):57~59.
【25】马伟,邵贝贝.On-The-Go开辟USB应用的新篇章.电子产品世界.2002.6B~39.
【26】National Instruments Corporation. Virtual instrumentation ineducation,1997.
【27】National Instruments Co,LabVIEW  Programmer  Reference  Manual[Z],1998.