傻瓜式教程--基于FPGA的CYUSB3014双向通信

news2024/11/19 19:35:57

一、概述

      CYUSB3014是赛普拉斯在近几年推出的新一代USB3.0的外设控制器,可以解决USB2.0带宽限制,或者单独开发USB协议和驱动的难题。赛普拉斯将CYUSB3014简称为EZ-USB FX3,具有高度的灵活特性,开发人员只需要下载FX3的固件库,就能使用USB3.0的功能。

      目前在一些电子产品中,使用主控器加PHY芯片最流行的方式是用FPGA+FX3这种搭配来实现USB3.0接口的。

       赛普拉斯官方数据手册中对FX3的描述如下:EZ-USB FX3 具有一个可进行完全配置的并行通用可编程接口GPIF II,它可与任何处理器、ASIC 或 FPGA 连接。这个通用可编程接口 GPIF II 是赛普拉斯旗舰 USB 2.0 产品 FX2LP 中的GPIF的增强版本。它可轻松无缝地连接至多种常用接口,比如异步 SRAM、异步和同步地址数据复用式接口、并行 ATA 等等。

       EZ-USB FX3 集成了 USB 3.0 和 USB 2.0 物理层 (PHY) 以及 32位ARM926EJ-S 微处理器,具有强大的数据处理能力,并可用于构建定制应用。采用了一种巧妙的架构,使从 GPIF II 到USB 接口的数据传输速度可达 320 MBps[1]。通过集成的 USB 2.0 OTG 控制器,可以实现需要双角色使用场合的应用。例如EZ-USB FX3 可以作为 MSC 和 HID 级设备的 OTG主机使用。

二、CYUSB3014内部逻辑框图

FX3的功能是在FPGA/MCU/CPU这些控制器和USB接口之间作为一个桥梁。CPU将需要发送的并行数据,通过GPIF II接口传给FX3,FX3内部将数据打包成带有USB3.0协议的数据包,通过USB标准接口对外传输。这样开发人员即不用掌握USB3.0协议的底层架构,还能使用UVC的协议将数据传输到带有USB3.0接口的主机(电脑)上。

    在FX3的内部,具有一个ARM9的核,内部集成了存储代码和数据的512KB片上SRAM,通过JTAG口烧写程序,FX3就能作为ARM使用。常见的应用场景如下所示.

三、CYUSB3014硬件配置

电源

FX3电源有3个部分:内核电源;数字I/O口电源;I/0模拟电源

内核电源

  • VDD :逻辑内核的供电电压。额定供电电压为 1.2 V。该电域为内核逻辑电路供电。下列也必须使用同样的供电:

  • AVDD :用于 PLL、晶体振荡器和其他内核模拟电路的 1.2 V供电。

  • U3TXVDDQ/U3RXVDDQ :用于 USB 3.0 接口的 1.2 V 供电电压。

数字I/O口电源

  • IO_VDDQ:指用于数字 I/O 的一组独立供电。供电电压为 1.8V 至 3.3V。EZ- USB FX3 为数字I/O 提供下列六个独立供电

  • VIO2 - IO2 供电

  • VIO3 - IO3 供电

  • VIO4 -UART/SPI/I2S 供电

  • VIO5 - I2C 和 JTAG 供电(支持 1.2V 至3.3V)

  • CVDDQ - 时钟供电电域

I/0模拟电源

VBATT/VBUS :用于 USB I/O 和模拟电路的 3.2V 至 6V 电池供电。通过 EZ-USB FX3 的内部电压调节器向 USB 收发器供电。VBATT 将内部调节为 3.3V。

3.2启动配置

CYUSB3014的启动配置,主要是通过PMODE三个管脚实现的,将PMODE管脚上拉,悬空,接地就可以实现不同的启动配置。具体方法见下表。

时钟配置

FX3支持两种时钟配置,一种是使用无源的外部晶振,另外一种是在CLKIN专用时钟引进上连接外部的时钟。

常见的使用方式是配置为000,使用一颗19.2MHz的晶振就可以。

四、GPIFII接口

GPIFII接口手册中描述如下:

EZ-USB FX3 具有高性能通用可编程接口 GPIF II。此接口能实现类似于 FX2LP 的 GPIF 和从器件 FIFO 接口的功能,但更为高级。

GPIF II 是一种可编程状态机,其所启用的灵活接口可用作工业标准或专用接口中的主控或从器件。并行和串行接口均可通过GPIF II 实现。

GPIF II 的特性总结如下:

  • 可用作主控或从器件

  • 提供 256 种固件可编程状态

  • 支持 8 位、16 位和 32 位并行数据总线

  • 接口频率可高达 100 MHz。

  • 使用 32 位数据总线时支持 14 根可配置控制引脚。所有控制引脚可作为输入/ 输出或双向引脚。

  • 使用 16/8 位数据总线时支持 16 根可配置控制引脚。所有控制引脚可作为输入/ 输出或双向引脚。

使用方式如下:

上面这幅框图的意思是,GPIF II口用作32位并行数据总线,其中A[1:0]的功能是指内部在使用4个缓冲器区的哪一个。FLAG信号是FX3内部SLAVE FIFO状态的标志信息。其他几根信号属于控制信号。

五、开发环境

  • FPGA 开发板(内含CYUSB3014芯片)

  • quartus prime17.1

  • 操作系统win10

  • 带usb3.0接口的电脑

  • 只要带CYUSB3014芯片的fpga开发板都可以参考本教程

六、准备工作

缓冲区可以通过固件来配置,上图是2缓存,每个缓冲区是1kB,为了提高性能,我在固件中设置的是4缓存,每个缓冲区16KB.数据总线32位宽,时钟100MHz,实测上下行通信都能达到338MB/s。

  • CYUSB3014芯片与fpga连接使用的是GPIF接口,我们只需要把CYUSB3014当成fifo来使用即可。

 

 

  • 七、驱动

  • 先安装FX3_SDK_Windows_v1.3.3,这个软件安装目录,下面有简称为SDK

  • 在SDK目录中,有提供很多文档、固件实例和相应的驱动

  • 在进行试验前要先安装好cypress提供的usb驱动,插上usb后,电脑就会检测到未识别的设备,这时打开设备管理器,右键未识别的usb,然后手动选择驱动。

  • 八、固件

  • 对于固件这块,有兴趣的同学可以自己去研究一下,如果只是使用的话,就可以直接使用本教程提供的固件。使用本实例的固件,你就可以基本可以把当成usb2.0一样使用了,因为他们都是slave fifo模块。

  • 如果自己想折腾一下的话,需要注意的就是标志信号的设置,usb标志信号比较灵活。下面主要讲解一下标志信号的设置。

  • 九、GPIF II Designer

  • Cypress官方提供了一个软件,可以用来设置gpif接口信号(包括标志信号),本教程只针对slave fifo,其他的模式自己去查看文档。

  1. 打开GPIF II软件

     

 

 

  2. 点击红色圈的地方

3. 想要编辑更多的信息,点击 File->Save project as Editable…

4. 编辑区按上图设置,右边的框图主要是设置标志信号FLAGA/FLAGB/FLAGC/FLAGD.双击右边的标志,各标志设置如下所示: 

 

 

 

5.四个标志都设置为低有效!!!初始值倒无所谓,并且都设置为专用标志,设置完后,只需要编译一下就可以了生成我们需要的头文件了。

 

6.将这个.h文件放到固件的工程中,替换固件相应的.h文件即可。

 

 

7.这些在本工程里面都已经做好了,如果没有说明特别的需要,就直接使用本项目提供的固件工程即可,就不需要自己再去设计GPIF接口了。

  • 10 写标志

  • flag_a和flag_b设置成线程0(P2U,即FPGA往CYUSB3014写)专用标志,flag_b为有水印值标志,

  • 当写满时,正常的flag_a会拉低,但是拉低的时间有点迟了,导致fpga检测到flag_a为低时,已经写溢出了,而flag_b的水印值可以使标志提前拉低,以便fpga检测到flag_b为低,不会发生写溢出。

 

因为我们slwr信号是要根据flag来驱动的,假如没有水印值标志,使用flag_a,检测到flag_a == 0时,再将slwr拉高,是不是就会发生写溢出了。通过上图不难发现只需要将flag_a提前4个周期拉低就可以满足我们的要求了。所以我们设置水印值为4.到时候看看signal_tap抓的图就知道了。

CyU3PGpifSocketConfigure设置水印值

  • 读标志

  • flag_c 和 flag_d 设置成线程3(U2P,即FPGA从CYUSB3014读)专用标志,flag_d为有水印值标志,

  • 当读空时,正常的flag_c会拉低,但是拉低的时间有点迟了,导致fpga检测到flag_a为低时,已经读空了,而flag_d的水印值可以使标志提前拉低,以便fpga检测到flag_b为低,不会发生读空

  • 和写操作类似,slrd信号是要根据flag来驱动的,假如没有水印值标志,使用flag_c,检测到flag_c == 0时,再将slrd拉高,是不是就会发生读空了。通过上图不难发现只需要将flag_c提前3个周期拉低就可以满足我们的要求了。所以我们设置水印值为3.到时候看看signal_tap抓的图就知道了

  • 另外需要主要的地方是fifo_addr到数据有效有3个周期延迟

  •  打开ezUsbSuite.exe

     

  • 导入本教程提供的固件工程

  •  

     

     

     

     

    最后再提醒一下,fifo的大小是16k,P2U的缓冲区设置为8个,U2P缓冲区设置为4个,这种配置可以最大的提高传输速度。需要注意的是,不管是写还是读,都是以16k为单位的,也就是说即便你只是想发送一个4字节的指令,你也要发送16k字节,多余发0就可以了。

  •  

  • 设置完后,就可以编译了,画重点了,使用debug编译的速度大概在252MB/s,使用release编译的速度大概在338MB/s.

  • 测试

  • 本教程提供的固件,是同时支持读写的。

  • 下载固件

  • 在调试期间,先将引导方式设置为usb引导

 

 

 

  • 读测试

  • 打开本教程提供的fpga程序,设置slrd下降沿触发。

  •  

     

  • 因为读缓冲区的大小是16k字节,而我们发送数据一般都是一些指令,数据量比较小,所以我在数据结构做了个调整,前4个字节是你要发送的数据的长度(32位),在fpga中,有cmd_flag和cmd_data信号,根据这两个信号就知道读的数据了。具体自己看我的代码。

  • 写测试

 

 

  • 写测试就简单了,点击transfer data-in,pc就会读取16k数据。数据为0-16‘h0000_0FFF。

  • 测速

  • 打开streamer软件

 

 

 

可以看出读写速度都差不多在338MB/s左右。性能还是不错。 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/669754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑死机怎么办?试试这5个方法!

案例:我的电脑用着用着突然死机了,我的文档写到了一半没有保存,不知道还能不能找回?电脑死机了怎么办?有没有小伙伴有应对的方法? 随着电脑在我们生活中的普及和广泛应用,电脑死机问题也成为了…

【Python】让 plotly 可视化更上一层:cufflinks 包

文章目录 一、导读二、安装三、使用方法四、数据说明五、折线图六、散点图七、气泡图八、柱状图九、箱型图box十、直方图十一、小提琴图十二、热力图heatmap十三、3d图十四、散点矩阵图十五、子图 一、导读 今天给大家推荐一个高级的可视化神器:cufflinks 学习过可…

智能汽车 | 为什么是高压,为什么800V?

摘要: 在谈到高压储能以及高压动力电池时候,有提到400V的,800V的,还有光伏储能用的1500V的;为什么是高压?本文做个总结。 1、李想看高压系统架构 今春李想的发言,从用户需求,市场需…

vue elementUI封装的无限多级导航菜单(递归循环)

需要封装成两个文件&#xff1a; menu/index.vue <template><el-menuclass"box-card"unique-opened:collapse"$store.state.isCollapse":default-active"$store.state.nowPage"background-color"#2f3332"text-color"…

浅谈电力通信与泛在电力物联网技术的应用与发展

安科瑞 崔丽洁 摘要&#xff1a;随着我国社会经济的快速发展&#xff0c;我国科技实力得到了巨大的提升&#xff0c;当前互联网通信技术在社会中得到了广泛的应用。随着电力通信技术的快速发展与更新&#xff0c;泛在电力物联网建设成为电力通讯发展的重要方向。本文已泛在电力…

股票量化分析工具QTYX使用攻略——每日涨停数据选股(更新2.6.6)

搭建自己的量化系统 如果要长期在市场中立于不败之地&#xff01;必须要形成一套自己的交易系统。 如何学会搭建自己的量化交易系统&#xff1f; 边学习边实战&#xff0c;在实战中学习才是最有效地方式。于是我们分享一个即可以用于学习&#xff0c;也可以用于实战炒股分析的量…

深入剖析Java 8的Stream并行原理,加速你的程序!

大家好&#xff0c;我是小米&#xff0c;在本期技术分享中&#xff0c;我将为大家详细介绍JDK1.8中的Stream以及它的并行操作原理。Stream是Java 8引入的一个强大的数据处理工具&#xff0c;可以让我们以一种简洁、高效的方式对集合数据进行操作和处理。接下来&#xff0c;我们…

C++初阶—模板进阶

目录 1. 非类型模板参数及容器arrary 2. 模板的特化 2.1 概念 2.2 函数模板特化 2.3 类模板特化 2.3.1 全特化 2.3.2 偏特化 2.3.3 类模板特化应用示例 3. 模板分离编译 3.1 什么是分离编译 3.2 模板的分离编译 3.3 解决方法 4. 模板总结 1. 非类型模板参数及容器a…

K8S:二进制安装K8S(单台master)安装etcd和master

系列文章目录 文章目录 系列文章目录一、安装K8S1.系统初始化配置2.部署docker引擎3.部署etcd集群 二、1.2. 总结 一、安装K8S 1.系统初始化配置 注意&#xff1a;该操作在所有node节点上进行&#xff0c;为k8s集群提供适合的初始化部署环境 #所有节点执行 systemctl stop f…

SSM长白山旅游网站-计算机毕设 附源码87175

SSM长白山旅游网站 目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3 论文结构与章节安排 2 长白山旅游网站系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2…

编译原理笔记9:语法分析树、语法树、二义性的消除

目录 语法分析树分析树与语言和文法的关系 语法树二义性及二义性的消除二义性问题优先级、结合性&#xff1a;引起二义性的根本原因【悬空&#xff08;dangling&#xff09;else】 问题 二义性的消除1. 改写二义文法为非二义文法让我们来搞【悬空 else 】罢&#xff01; 2. 规定…

数据分析年轻人的消费动向,小红书盲盒营销怎么玩?

一、ESG营销视角&#xff1a;Z世代年轻价值观的转向 近期&#xff0c;深受品牌方热议的ESG营销是什么呢&#xff1f; ESG 是 Environment&#xff08;环境&#xff09;、Society&#xff08;社会&#xff09; 和 Governance&#xff08;治理&#xff09;的缩写&#xff0c;是…

【openvpn】TAP模式

TAP与TUN模式简介 在OpenVPN中有两种工作模式&#xff0c;一种称为 TUN(tunnel)模式&#xff0c;即通道的意思&#xff1b;另一种是TAP(Terminal Access Point)模式&#xff0c;即一种网络设备或软件虚拟设备的意思。 TUN模式是一种虚拟点对点的网络设备模式。通常用于实现点…

即视角|出海正当时:欧美、东南亚、中东、拉美市场观察

即视角 Insight 共享即构新洞察&#xff0c;共建行业新动能——ZEGO即构科技基于音视频技术领域的多年深耕&#xff0c;综合面向各行业的服务经验&#xff0c;推出【即视角】栏目&#xff0c;发布即构对行业的洞察。欢迎大家探讨论道&#xff0c;共驱前行。 https://v.douyin…

【Note9】

9.PECI&#xff08;Platform Environment Control Interface&#xff09;&#xff1a;peci是 intel提供的私有协议&#xff0c;openbmc是由intel授权的&#xff0c;其他不授权是不能用。硬件上是一根线&#xff0c;不像i2c是2根线 11.1 模式和命令介绍&#xff1a;peci1.1只支…

华为OD机试之拔河比赛(Java源码)

文章目录 拔河比赛题目描述输入描述输出描述示例代码 拔河比赛 题目描述 公司最近准备进行拔河比赛&#xff0c;需要在全部员工中进行挑选。 选拔的规则如下&#xff1a; 按照身高优先、体重次优先的方式准备比赛阵容&#xff1b;规定参赛的队伍派出10名选手。 请实现一个选…

Imagination如何引领更安全的汽车行业?

如果您想购买一款全新的车辆&#xff0c;它很有可能配备数字显示屏&#xff0c;为用户体验提供丰富的驾驶体验&#xff0c;并可自由设置显示。想要更动感的仪表盘&#xff1f;那也没问题&#xff0c;只需改变驾驶主题。亦或是把音乐放在居中位置&#xff0c;同时在另一个屏幕上…

兼容性测试可否提高用户满意度?

兼容性测试可否提高用户满意度? 在信息化时代&#xff0c;软件应用的兼容性一直是一个重要的问题。由于操作系统版本、硬件设备、浏览器等因素的差异&#xff0c;软件在不同环境下运行的稳定性和表现也会不同。因此&#xff0c;如果对软件在不同的环境下进行兼容性测试&#x…

qt信号槽

目录 自定义信号槽 所谓信号槽&#xff0c;实际就是观察者模式 (发布 - 订阅模式)。当某个事件发生之后&#xff0c;比如&#xff0c;按钮检测到自己被点击了一下&#xff0c;它就会发出一个信号&#xff08;signal&#xff09;。这种发出是没有目的的&#xff0c;类似广播。如…

springboot实验室管理系统-计算机毕设 附源码86757

springboot实验室管理系统 摘 要 验室管理系统是将实验室的分析仪器通过计算机网络连起来&#xff0c;采用科学的管理思想和先进的数据库技术&#xff0c;实现以实验室为核心的整体环境的全方位管理。它集用户管理&#xff0c;实验室信息管理&#xff0c;实验室预约管理&#x…