U3V实现——CYUSB3014之GPIF总结

本文档详细记录了使用CYUSB3014在实现USB3VisionDevice过程中,通过GPIFII接口进行图像数据流传输的难点与解决方案。内容涵盖GPIFII的DMA描述符、缓冲区、线程等概念,以及设计方法、状态机原理和USB3.0的URB理解。同时,提到了采用Ping-Pong设计来避免数据丢失,并介绍了GenICam协议的Stream数据格式要求。
摘要由CSDN通过智能技术生成

原文地址::U3V实现——CYUSB3014之GPIF总结_gpif接口_初一零一的博客-CSDN博客

相关文章

1、Infineon开发套件, 无线通信开发工具----CYUSB3KIT-003 | Infineon开发套件, 无线通信开发工具 | RS 

2、基于CYUSB3KIT-003USB接口到微控制器的参考设计----基于CYUSB3KIT-003USB接口到微控制器的参考设计-电子电路图,电子技术资料网站 

3、FPGA和USB3.0通信-UVC摄像机----FPGA和USB3.0通信-UVC摄像机 - 知乎 

4、FPGA和USB3.0通信-SDK的安装----FPGA和USB3.0通信-SDK的安装

5、FPGA和USB3.0通信-联合测试(一)----​FPGA和USB3.0通信-联合测试(一)

6、FPGA和USB3.0通信-联合测试(二)----FPGA和USB3.0通信-联合测试(二)

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》
————————————————
版权声明:本文为CSDN博主「初一零一」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_48244275/article/details/126825892

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值