U3V实现——CYUSB3014之GPIF总结
0 背景:
实现基于CYUSB3014传输的标准USB3 VisionDevice支持GenIcam过程中,控制节点实现已与eBus正常通讯,但是图像流传输,是接下来攻克的重点,本文档用于记录攻克数据流传输过程的难点问题,数据流传输主要使用的Cypress公司的GPIFII接口。
硬件拓扑结构是:
Sensor-->FPGA-->CyUSB3014-->pc
以下记录了从设计到问题解决的过程,包括关键词总结,使用方法步骤详述,和原理说明,参考资料来源。
(欢迎关注与支持,后期会不断更新创作)
1 总结:
概念描述:
1.1 套接字(socket):用于指向有效的DMA描述符,使能或者标记中断;
1.2 DMA描述符(descriptor):描述缓冲区地址,大小,下一个描述符的位置等;DMA节点分为DMA Producer和DMA Customer,生产者和消费者,生产者作为数据生成端口,消费者作为数据消耗端口。
1.3 DMA缓冲区(buffer):用于缓冲接口传输数据;
1.4 GPIF线程:赛普拉斯开发的USB SOC与USB上位机之间有32个endpoint节点,但是对外为可编程总线接口,可满足SD卡开发,传感器等并行可编程接口,Cypress称之为GPIF II。有专用的Cypress开发软件“GPIF II Designer”。
1.5 URB:USB Request Block;和USB传输包大小无关,多个Buck传输组成一个URB。BUShound抓取的是URB包,因此呈现出单个URB可以传输很大的数据量。(大家会疑惑,USB3.0 Buck传输官方手册说是1024Byte,在这里做阐述届时,大家看大Bushund抓取的包超过1024之后不要惊讶)。
2 使用方法:
2.1 打开"GPIF II Designer";
2.2 “File --> OpenProject --> fx3_uvc.cydsn”;
2.3 得到如下图示
图2.3.1
2.4 StateMachine示意如下:
图2.4.1
2.5 “File-->Save Project As”另存为本地路径下的新工程;
2.6 修改合适的“LD_DATA_COUNT”和“LD_ADDR_COUNT”修改方法是:预设的DMA缓冲区大小/(数据位宽/8)-1 得到所需修改的值。注意:由于状态机级数从0开始,因此计数起始值为0;
图2.6.1
2.7 保存,编译,编译all;得到Cypress的SOC下硬件配置“cyfxgpif2config.h”
2.8 替换eclipse工程路径下的“cyfxgpif2config.h”,即完成了GPIF II端的设计。
3原理说明:
3.1 传统设计中,FPGA端或者Sensor端常采用DVP接口,图像从Sensor或者FPGA传入到USB SOC上,由于前端的流数据不会与SOC中的CPU握手,因此无法控制Master端数据启停。同时由于USB繁忙度原因,如果采用如下简单数据流方式实现GPIF II状态机,则稳定性及数据传输的效率欠佳。如图状态机:
图3.1.1
3.2 为了适配各种不同分辨率,且不同分辨率下均不发生数据丢失问题,我们采用Ping-Pong设计,即:GPIF II接口作为Slave设备,接收来自FPGA或Sensor的VS/DE/Data信号,通过GPIF II Block的双线程,进而通过DMA套接字传输到DMA缓冲区,由于CPU在转接数据过程中有us及延时存在,因此如果不采用Ping-Pong设计,会导致GPIF端数据丢失引起的问题。因此结构如下:
3.3 关于USB3 Vision Device的Genicam协议要求的Stream流数据必须具备Leader + Payload + Trailer。但是Stream可以正常传输了,但是L/T如何传输?
如图2.4.1中,State19和State22中实现了Commit,Commit了0长度的包到CPU,此时CPU应该响应并向USB Endpoint的Buffer中写入预设的L/T信息,即可完成L/T传输。
具体应用见c代码设计。
3.4 GIPF II设计中的"INTR_CPU"实现了戳CPU的状态,同时此时CPU的c代码应该具备GPIF_CB callback响应此中断。否则状态机无法正常运行。
3.5 图示中的状态机设定由于是2个GPIF II线程对接消耗端,因此c代码中的DMA应该创建MANY_TO_ONE的模式,使用CyU3PDmaMultiChannelCreate。
3.6 dmaMultiConfig.size大小设定与“LD_DATA_COUNT”和“LD_ADDR_COUNT”设定值一致,但不用减1。
3.7 C代码中,启动Stream前需要写入cyfxgpif2config配置字到SOC寄存器内。
3.8 c代码中需要将状态机强制复位到起始位置。
3.9 c代码需要简历Stream的Callback函数Commit到上位机所需要的数据。
4 参考设计:
4.1 参考设计信息:
详见Infineon官方社区与论坛。
4.2 参考代码
“U3V_SM.cydsn”
“U3V_on_Fx3”
“cyfxuvc_an75779”
4.3 参考文档
《AN87216_Designing_a_GPIF_II_Master_Interface_Chinese.pdf》
《AN75779_How_to_Implement_an_Image_Sensor_Interface_with_EZ-U.pdf》
U3V实现——CYUSB3014之GPIF总结相关推荐
- GPIF II designer使用说明+CYUSB3014芯片基本信息介绍——英文文档学习记录
这篇文章是基于之前FX3实现FPGA与USB3.0通信的内容.本人新手,写的不好如有错误请原谅.今天来记录一下官方文档的学习. 一.基本信息讲解 1.1 GPIF II Designer和CYUSB3 ...
- USB之Cyusb3014芯片原理之三GPIF原理(十一) 2022-03-08
Cyusb3014芯片原理之三GPIF原理 请参照GPIFII_Designer_User_Guide.AN65974第9节.AN87216以及(八)Cypress的技术支持之开发环境与应用架构学习关 ...
- CYUSB3014 USB3.0与FPGA设计
目录 1. USB3014连接框图 2. 复位设置 3. 时钟晶振 4. 时钟源配置 5. 引导方式配置 6. IIC存储器 7. SPI flash存储器 8. FPGA外接串口 1. USB301 ...
- 基于FPGA的CYUSB3014双向通信实验
文章目录 开发环境 准备工作 驱动 固件 GPIF II Designer 写标志 读标志 CyU3PGpifSocketConfigure设置水印值 测试 下载固件 读测试 写测试 测速 固件固化到 ...
- CYUSB3014设计方案|替代CYUSB3014芯片|方寸微T630可完全替代兼容CYPRESS CYUSB3014
CYUSB3014设计方案|替代CYUSB3014芯片|方寸微T630可完全替代兼容CYPRESS CYUSB3014 赛普拉斯CYPRESS CYUSB3014是一款USB 3.0 PHY芯片,广泛 ...
- 国产替代:T630 USB3.0接口芯片替换Cypress CYUSB3014
产品介绍 T630简介 T630 作为专用接口芯片,配合 FPGA,在大部分应用中,可替代赛普拉斯CYUSB301X系列芯片. T630 是由方寸微电子自主研发的 USB3.0 超高速接口芯片,具有功 ...
- USB之Cyusb3014芯片原理之四控制传输实现原理(十二) 2022-04-01
1.写在前面 系列文章(一)到(十一)应该是总分的结构,最开始大致写明我要写的内容,后面将每一个点拆解出来作为一篇.本篇所要讲述的内容是基于Cyusb3014实现控制传输的原理,要求比较高,硬是从写文 ...
- USB之Cyusb3014开发经验总结 (十八)2022-04-17
1.固件开发 1.1串口打印调试信息 在固件开发时,可以利用串口打印调试信息,获得代码执行情况的指示.固件中,用于打印调试信息的串口配置如下,其中波特率的设置为112500,停止位为1,无校验位.在程 ...
- FPGA与CYUSB3014实现USB3.0数据传输学习笔记(1)
简单介绍 赛普拉斯将CYUSB3014简称为EZ-USB FX3,该芯片用于USB3.0的外设控制. EZ-USB FX3 集成了 USB 3.0 和 USB 2.0 物理层 (PHY ...
最新文章
- 异常:此数据库没有有效所有者,因此无法安装数据库关系图支持对象。
- springJAR包和配置文件
- React的组件模式
- jvm_虚拟机参数讲解(一)
- 郭宏志的android无线点餐系统,Android无线点餐系统--含代码.doc
- python3----练习题(图片转字符画)
- JAVA中加密算法的简单使用入门
- 阿里巴巴 程劭非(寒冬)- 《浅谈前端交互的基础设施的建设》
- mysql预处理stmt_mysqli_stmt类:使用预处理语句处理SELECT查询结果
- Windows 10 无法访问共享的解决办法大全
- 架构师必备!15个经典面试问题及回答思路
- table表格竖列横排显示
- 渣男劈腿,两个女生却逼他做出选择,结果......
- (Codeforce 757)E. Bash Plays with Functions(积性函数)
- 用 Async 函数简化异步代码
- 安卓编程基础——手势编程
- 什么是端口?要如何修改端口?
- 万字长文,冲刺备战金九银十,奉上[Java一线大厂高岗面试题解析合集]
- 3-10 Pandas的数据规整
- 图像暗角阴影去除算法
热门文章
- OJ每日一练——角谷猜想
- 编码器类型原理知识汇总(增量式/绝对式/绝对值)
- 计算机桌面变蓝屏,电脑进入桌面蓝屏解决方法
- 膜态沸腾UDF【转载】
- 20-50人,拓展基地_拓展训练_拓展基地_拓展公司推荐_嗨牛团建
- 2018级《程序设计基础(B)I》期末上机考试 重现(第二场)
- pyinstaller打包项目,运行exe找不到指定模块(自定义/python39.dll等)
- IT行业前景真的好吗_转IT学什么语言好?
- vue在按钮上绑定enter键
- 华为微认证华为云数据库服务实践稳过 笔记资料