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总结相关推荐

  1. GPIF II designer使用说明+CYUSB3014芯片基本信息介绍——英文文档学习记录

    这篇文章是基于之前FX3实现FPGA与USB3.0通信的内容.本人新手,写的不好如有错误请原谅.今天来记录一下官方文档的学习. 一.基本信息讲解 1.1 GPIF II Designer和CYUSB3 ...

  2. USB之Cyusb3014芯片原理之三GPIF原理(十一) 2022-03-08

    Cyusb3014芯片原理之三GPIF原理 请参照GPIFII_Designer_User_Guide.AN65974第9节.AN87216以及(八)Cypress的技术支持之开发环境与应用架构学习关 ...

  3. CYUSB3014 USB3.0与FPGA设计

    目录 1. USB3014连接框图 2. 复位设置 3. 时钟晶振 4. 时钟源配置 5. 引导方式配置 6. IIC存储器 7. SPI flash存储器 8. FPGA外接串口 1. USB301 ...

  4. 基于FPGA的CYUSB3014双向通信实验

    文章目录 开发环境 准备工作 驱动 固件 GPIF II Designer 写标志 读标志 CyU3PGpifSocketConfigure设置水印值 测试 下载固件 读测试 写测试 测速 固件固化到 ...

  5. CYUSB3014设计方案|替代CYUSB3014芯片|方寸微T630可完全替代兼容CYPRESS CYUSB3014

    CYUSB3014设计方案|替代CYUSB3014芯片|方寸微T630可完全替代兼容CYPRESS CYUSB3014 赛普拉斯CYPRESS CYUSB3014是一款USB 3.0 PHY芯片,广泛 ...

  6. 国产替代:T630 USB3.0接口芯片替换Cypress CYUSB3014

    产品介绍 T630简介 T630 作为专用接口芯片,配合 FPGA,在大部分应用中,可替代赛普拉斯CYUSB301X系列芯片. T630 是由方寸微电子自主研发的 USB3.0 超高速接口芯片,具有功 ...

  7. USB之Cyusb3014芯片原理之四控制传输实现原理(十二) 2022-04-01

    1.写在前面 系列文章(一)到(十一)应该是总分的结构,最开始大致写明我要写的内容,后面将每一个点拆解出来作为一篇.本篇所要讲述的内容是基于Cyusb3014实现控制传输的原理,要求比较高,硬是从写文 ...

  8. USB之Cyusb3014开发经验总结 (十八)2022-04-17

    1.固件开发 1.1串口打印调试信息 在固件开发时,可以利用串口打印调试信息,获得代码执行情况的指示.固件中,用于打印调试信息的串口配置如下,其中波特率的设置为112500,停止位为1,无校验位.在程 ...

  9. FPGA与CYUSB3014实现USB3.0数据传输学习笔记(1)

    简单介绍 赛普拉斯将CYUSB3014简称为EZ-USB FX3,该芯片用于USB3.0的外设控制.         EZ-USB FX3 集成了 USB 3.0 和 USB 2.0 物理层 (PHY ...

最新文章

  1. 异常:此数据库没有有效所有者,因此无法安装数据库关系图支持对象。
  2. springJAR包和配置文件
  3. React的组件模式
  4. jvm_虚拟机参数讲解(一)
  5. 郭宏志的android无线点餐系统,Android无线点餐系统--含代码.doc
  6. python3----练习题(图片转字符画)
  7. JAVA中加密算法的简单使用入门
  8. 阿里巴巴 程劭非(寒冬)- 《浅谈前端交互的基础设施的建设》
  9. mysql预处理stmt_mysqli_stmt类:使用预处理语句处理SELECT查询结果
  10. Windows 10 无法访问共享的解决办法大全
  11. 架构师必备!15个经典面试问题及回答思路
  12. table表格竖列横排显示
  13. 渣男劈腿,两个女生却逼他做出选择,结果......
  14. (Codeforce 757)E. Bash Plays with Functions(积性函数)
  15. 用 Async 函数简化异步代码
  16. 安卓编程基础——手势编程
  17. 什么是端口?要如何修改端口?
  18. 万字长文,冲刺备战金九银十,奉上[Java一线大厂高岗面试题解析合集]
  19. 3-10 Pandas的数据规整
  20. 图像暗角阴影去除算法

热门文章

  1. OJ每日一练——角谷猜想
  2. 编码器类型原理知识汇总(增量式/绝对式/绝对值)
  3. 计算机桌面变蓝屏,电脑进入桌面蓝屏解决方法
  4. 膜态沸腾UDF【转载】
  5. 20-50人,拓展基地_拓展训练_拓展基地_拓展公司推荐_嗨牛团建
  6. 2018级《程序设计基础(B)I》期末上机考试 重现(第二场)
  7. pyinstaller打包项目,运行exe找不到指定模块(自定义/python39.dll等)
  8. IT行业前景真的好吗_转IT学什么语言好?
  9. vue在按钮上绑定enter键
  10. 华为微认证华为云数据库服务实践稳过 笔记资料