完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1.引言
USB(Universal Serial Bus,通用串行总线)以其无需配置、即插即用等特性获得了广泛的应用。2004年提出的USB2.0标准,传输速度最大能够达到480Mbps。但在 USB3.0标准中,它的最大传输速度几乎是传统USB2.0传输速度的10倍,达到了5.0Gbps,被定义为“超高速USB接口”。本文基于CYPRESS的FX3系列USB3.0芯片,对USB3.0总线进行研究开发。 2.USB3.0接口芯片概述 赛普拉斯的EZ-USB FX3是新一代的USB3.0外设控制器,具有高度集成的灵活特性,允许系统设计者将USB3.0添加至任何系统。本文采用的是FX3系列USB3.0芯片CYUSB3014 FX3是完全兼容USB3.0 V1.0和USB2.0规范的,集成的USB2.0 OTG控制器允许芯片作为主从设备使用。另外,它还支持一些常用的外设接口,如SPI,I2C,UART和I2S可以与外部设备进行通信。 FX3具有一个可进行完全配置的并行通用可编程接口GPIF II,它可以与任何处理器、ASIC或是FPGA连接。它可以轻松无缝地连接至多种常用接口,比如异步SRAM、异步和同步地址数据复用式接口、并行 ATA等等。EZ-USB FX3集成了USB3.0和USB2.0物理层(PHY)以及32位ARM926EJ-S微处理器,具有强大的数据处理能力,并可用于构建定制应用。 3.系统整体设计 本系统设计主要由软件部分和硬件部分组成。软件部分主要包括三大部分:PC机应用程序、FX3固件程序FPGA程序。硬件部分主要由FPGA、USB3.0芯片和DDR2组成,硬件的系统框图如图2所示。本文主要完成了硬件、PC机应用程序和FPGA程序的设计。 FX3固件程序使用的是Cypress的SDK开发包的固件程序。 3.1 DDR模块设计 与FPGA相比,USB3.0接口是一个高速的接收单元。在不同工作速度的系统之间,数据缓存是不可或缺的部分,一般来说,使用FIFO基本可以使各系统工作在自己的时钟频率下,而不需要反复的互相握手信号就能进行数据的交流。本文设计的数据是保存在计算机上,由于各计算机的硬件配置可能会不一样, 我们设计了DDR2虚拟FIFO模块来进行数据缓存,为批量传输时能够提供足够的缓存,不用担心为缓存不够电脑来不及存取数据造成数据丢失。 本系统选用两片MT47H64M16HR,两片DDR并联控制总线和地址总线,总存储容量达到2Gbit,读写宽度都为16bit,它具有丰富的资源,足够满足本系统的需要。 3.2 USB3.0接口设计 与USB2.0不同的是,USB3.0在与计算机通讯时,它有自己专用的数据通路,专用的数据发送线路和独立的数据接收线路,即图3中四线差分信号 SSRX+/-和SSTX+/-,从而可以真正的实现全双工。同时,USB3.0还兼容了USB2.0的D+/-信号接口,从而可以与USB2.0无缝连接。使用从器件FIFO接口与FPGA链接,传输速度能达到可达到320MBps。图3为USB芯片与FPGA和PC机的电路连接。 3.3 FPGA逻辑设计 FPGA是整个系统的核心,它需要产生测试数据并将数据存储到DDR2中,以及将DDR2中读出的数据转移到CYUSB3014大的内部FIFO中,因此它主要由如图2内部所示模块构成。 3.3.1 USB接口模块 USB接口模块主要处理读写命令。读写命令需要计算机通过USB控制传输,传递到CYUSB3014中,再由CYUSB3014将具体的命令转化为电平信号送到FPGA的IO口。USB接口模块根据UART_RX上的电平信号,判断出是读命令还是写命令,最终产生CYUSB3014的片选CS、使能 OE、读/写控制等有效信号。 当为写命令时,CYUSB3014需要将从DDR2中读取的数据发送出去;当为读命令,读取CYUSB3014传递过来的数据,流程图如图4所示。 图5为同步写入和读出数据的时序图。由于读写最大包为1024字节,所以实际每一包传输需要256个周期。图中的输入/出DQ数据为测试数据模块和PC机产生的测试数据,RX即UART_RX信号。 3.3.2 测试数据模块 当计算机向FPGA发出读命令时,FPGA产生测试数据。32位数据,高16位为0,低16位循环计数,发送一个周期后,自动清零。 批量(bulk)传输时的最大包大小为1024字节,因此测试数据在0~255之间循环变化。 产生测试数据后,数据传输流程为DATA-》DDR2-》FIFO-》CYUSB3014-》PC机,实现了将测试数据上传到PC机的功能。 3.3.3 DDR2接口模块 该部分直接负责外围DDR2接口,利用FPGA的DDRII SDRAM IP核实现,按照DDR2芯片MT47H64M16HR来设定控制器的时序参数,控制器根据这些参数值生成满足MT47H64M16HR时序的接口,再由DDR2模块进行读写控制。 3.4 应用程序的设计 应用程序由VC++编写,利用与设备驱动关联的API与设备联系。CYPRESS公司提供了完整的API库,配合使用其提供的通用驱动程序,可以便利地调用控制USB设备。应用程序的主要功能是发送命令,并将USB输入数据保存下来,程序主要界面如图6所示。 4.测试结果及分析 4.1 写入数据测试 当应用程序向USB发出写命令时,FPGA产生测试数据并传给FX3以便上传给PC机。 采集1000MB的数据进行记录,以便在MATLAB中进行分析。 CYPRESS官方开发包中自带了streamer软件进行速度测试。在Endpoint选项中选择Bulk in endpoint端点(Bulk Out对应的是PC机向FPGA写数据)。由于批量传输时的最大包为1024字节,因此需要将Packets perXfer设置为256或以下,Xfers to Queue置为4。不同的USB3.0控制器,速度的测试结果会有所不同。如图7所示是在64位WIN7系统下的测试及分析结果。如图7(a)中所示,经过一段时间的速度测试,23704个成功包,0失败,往P C中写入数据的速度能够达到178800KB/S,即1.43Gbps。为了验证数据的正确性,在MATLAB中对采集的8.0Gb数据进行分析。由于测试数据是0~255之间循环变化,因此可以根据每一包数据的数据差是否为1来判断数据的正确性,当不为1时报错。如图7(b)所示,读取的数据是正确的,没有发生丢数或错数的情况。 4.2 读出数据测试 类似的,当应用程序向USB发出读命令时,同时会产生一组有规律的测试数据,并传送给CYUSB3014,FPGA直接读取数据。如下图8(a)所示是读入速度测试结果,18252个成功包,0失败,往USB中写入数据的速度能够达到179000KB/S,即1.432Gbps。在FPGA中记录下随机采集的32k数据并进行分析,同样的可以根据数据间的差来判断数据的正确性,如图8(b)所示,写入的数据时正确的,没有发生丢数错数的情况。 5.结束语 本文在FPGA和CYUSB3014的基础上,对USB3.0进行了开发应用。鉴于本文的系统架构,虽然测试数据都是FPGA内部产生,但是对于实际使用高采样率AD的数据采集系统具有很大的借鉴意义。 |
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2568 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2363 浏览 5 评论
3208 浏览 3 评论
2836 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2787 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
664浏览 1评论
903浏览 0评论
1023浏览 0评论
667浏览 0评论
497浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 23:48 , Processed in 1.059464 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号