FPGA实现USB3.0 UVC 相机HDMI视频输出 基于FT602驱动 提供工程源码和QT上位机源码

news/2024/11/30 18:55:59/

目录

  • 1、前言
  • 2、UVC简介
  • 3、FT602芯片解读
  • 4、我这儿的 FT601 USB3.0通信方案
  • 5、详细设计方案
    • 基于FT602的UVC模块详解
  • 6、vivado工程详解
  • 7、上板调试验证
  • 8、福利:工程代码的获取

1、前言

目前USB3.0的实现方案很多,但就简单好用的角度而言,FT601/602应该是最佳方案,因为它电路设计简单,操作时序简单,软件驱动简单,官方甚至提供了包括FPGA驱动在内的丰富的驱动源码和测试软件;

本设计用FPGA驱动FT602芯片实现USB3.0UVC 相机彩条视频输出试验,使用同步245模式通信,提供vivado工程源码,用笔记本电脑模拟HDMI摄像头,HDMI视频输入到FPGA开发板板载的ADV7611解码芯片,将HDMI视频解码为RGB视频,FPGA将RGB视频数据经过图像三帧缓存至DDR3后读出,经过RGB转YUV送入UVC模块,经FT602芯片的USB3.0接口输出到电脑主机,电脑端用FT602官方的软件接收视频,同时也可以用我们提供的QT上位机接收;
本设计完全可以模拟和实现USB3.0 UVC 相机的功能;代码编译通过后上板调试验证,可直接项目移植,适用于在校学生做毕业设计、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的USB3.0 UVC 通信和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式以及上板调试的演示视频放在了文章末尾,请耐心看到最后;

2、UVC简介

UVC 全称为 USB Video Class,即:USB 视频类,是一种为 USB 视频捕获设备定义的协议标准。是 Microsoft与另外几家设备厂商联合推出的为 USB 视频捕获设备定义的协议标准,目前已成为 USB org 标准之一。支持 USB Video Class (UVC) standard 1.1 可以让相机在所有的作业系统以及平台中使用(Windows, Linux, Mac etc.)。用户只需连接相机便可进行图像传输,而无需安装任何驱动程序。UVC 相机最适合作为工业网络相机在视频会议、站亭系统、小型设备生产、物流业等应用中使用。
本设计使用FT602芯片实现USB3.0协议,采用verilog语言实现UVC总线协议;

3、FT602芯片解读

FT602 是 USB-to-FIFO 接口 SuperSpeed USB(USB 3.1 Gen 1)USB 视频类(UVC)桥接芯片具有以下特点:
1:支持 USB 3.1 GEN 1 超高速:(5Gbps)/ USB 2.0 高速(480Mbps);
2:支持 USB 传输类型:控制/散装/中断;
3:支持 UVC 1.1 版:支持最多 4 个视频输入通道;
4:FIFO 总线:支持 2 个并行从 FIFO 总线协议,245 FIFO 和多通道 FIFO 模式,数据突发速率高达 400MB / s,32 位并行接口;
5:内置 16kB FIFO 数据缓冲 RAM;
6:用于视频设备的内置 I2C 主接口;
7:组态:
7.1:支持多电压 I / O:1.8V,2.5V 和 3.3V;
7.2:内部 LDO 1.0V 稳压器;
7.3:集成的上电复位电路;
7.4:用户可编程 USB 和 UVC 描述符;
7.5:工业工作温度范围:-40 至 85⁰C;
7.6:符合 RoHS 标准的紧凑型无铅 QFN-76 封装;
芯片框图如下:
在这里插入图片描述
参考电路如下:
在这里插入图片描述

4、我这儿的 FT601 USB3.0通信方案

我这儿现有的FPGA基于FT601和FT602的USB3.0通信方案主要有简单的测速方案、图像传输方案,图像传输方案包括简单的彩条传输采集、OV5640摄像头传输采集、HDMI视频采集,HDMI视频采集抓拍、USB3.0 UVC视频等等,所有工方案均包括FPGA工程和QT上位机源码;感兴趣的可以去我的FT601 USB3.0通信专栏阅读,专栏地址如下:
https://blog.csdn.net/qq_41667729/category_12339160.html?spm=1001.2014.3001.5482

5、详细设计方案

详细设计方案框图如下:
在这里插入图片描述
HDMI视频输入和采集:
用笔记本电脑模拟HDMI摄像头,HDMI视频输入到FPGA开发板板载的ADV7611解码芯片,将HDMI视频解码为RGB视频,ADV7611解码芯片需要i2c配置才能使用,例程里提供了纯verilog代码的i2c配置;
FDMA图像缓存:
FDMA图像三帧缓存,经常看我文章的兄弟都知道,这是我惯用的图像缓存套路,它由FDMA控制器和FDMA构成,作用是将输入的视频缓存到DDR3里做三帧缓存后再读出来,目的是使得图像数据的输入输出跨时钟域读写,输出图像平稳无撕裂等现象;关于FDMA的详细设计说明,请参考我之前的文章:点击直接前往
RGB888转YUV444:
很简单的一个模块,将RGB888转为YUV444视频,因为UVC模块输入需要YUV格式视频;

基于FT602的UVC模块详解

模块代码架构如下:
在这里插入图片描述
可以看到顶层模块 ft602_uvc_top.v 包含了 7 个子模块。其中,sys_pll.v 用于生成 ft602 模块所需的时钟,主要是生产视频时许所需的时钟 27MHz (VGA), 74.25MHz (HD) and 148.5MHz (Full HD);
模块 ft602_i2c_slv.v 模拟一个 IIC 从机,FT602Q 芯片通过该接口读取 FPGA 中视频信息,同时将上位机的配置信息通过该接口配置到 FPGA。
模块 ft602_uvc_reg.v 包含了 UVC 协议对应的一些寄存器,关于视频制式的信息也从这里修改。
模块 ft602_uvc_fsm.v 是 uvc 在总线读写 FIFO 控制的状态机,四个通道,实际工程中,我们只使用一个通道。
模块 Module ft602_pre_fet.v 数据预读取,用于优化时序。类似于 cache 功能。
模块 ft602_pch_inp.v 为视频流处理模块,将 IMG 数据流转换为 FT602Q 对应的接口数据格式,通过 FIFO 缓存;
模块 ft602_img_rx 处理 IMG 输入视频流数据或者前面生成的测试数据流,将视频格式的数据流转换为 FT602 总线对应的数据格式。
模块 ft602_dclk_fifo 控制双口 ram,接收 ft602_img_rx 模块的视频流数据,同时对外提供 FIFO 读接口。模块结构如下图:本设计只是用了一个通道 Video ch0;
在这里插入图片描述
FT602 驱动和QT上位机:
FT602 驱动由官方提供,QT上位机采用C++语言编写,实时采集USB3.0接口的视频数据并显示;我提供的资料包里有QT上位机软件和QT源码,做嵌入式软件开发的兄弟可以拿去参考;

6、vivado工程详解

开发板FPGA型号:xc7k325tffg900-2;
开发环境:vivado2022.2;
输入:HDMI 1080P分辨率;
输出:FT602–USB3.0接口;
应用:模拟和实现 USB3.0 UVC 相机的功能;

工程Block Design如下:
在这里插入图片描述
综合后的工程代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

7、上板调试验证

上板调试需要安装FT602官方驱动,还需要软件的配置,鉴于篇幅原因,我专门写了一篇调试使用的文档,并放在了资料包里,路径如下,调试时请参考使用和调试手册,如下:
在这里插入图片描述
最后的输出效果如下:
在这里插入图片描述

8、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式1:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述


http://www.ppmy.cn/news/413965.html

相关文章

go常用特性(embed、插件化开发)、常用包(并发)

go常用特性及常用包 1 常用特性 1.1 go:build //go:build !windows //go:build是前缀指令,!windows是逻辑判断的条件。这个指令的作用是在Windows系统外,编译当前源文件。// build !windows // build是前缀指令,!windows是编译标记。这个指…

ros中使用yolov5(1)

编辑器 提示:环境ubuntu18.04 anaconda下python3.8torch1.9 ros中使用yolov5 前言一、先将yolov5封装二、步骤1.创建一个新的脚本2.修改detect#修改yolov5/utils/dataset.py再次修改detect.py结果 前言 提示:参考的博客: 封装yolov5: https…

TRX和TRC10交易三种合约

在TRON中检测TRX或TRC10事务涉及3种类型的合约: TransferConract(系统合同类型)TransferAssetContract(系统合同类型)TriggerSmartContract(智能合约类型) Transaction,Transactio…

3: 00npm start的时候报了奇怪的错误A42E6F node::MakeCallback+4719 4: 00007FF75AA170F0 node::DecodeWrite+13120

报了一堆奇怪的错 node_contextify.cc:635: Assertion args[1]->IsString()’ failed. 1: 00007FF75AA6832A v8::internal::GCIdleTimeHandler::GCIdleTimeHandler4506 2: 00007FF75AA42DB6 node::MakeCallback4534 3: 00007FF75AA42E6F node::MakeCallback4719 4: 00007FF7…

激光SLAM多层料箱机器人HEGERLS A42M SLAM|灵活匹配多种作业高度|支持多尺寸纸箱/料箱混合拣选

作为厢式仓储物流智能机器人的领跑者,海格里斯HEGERLS致力于通过机器人技术和人工智能算法,提供高效、智能、柔性、定制化的仓储自动化解决方案,为每个工厂和物流仓库创造价值。海格里斯HEGERLS专注于箱式仓储机器人系统研发设计,…

动态调宽箱式机器人HEGERLS A42-FW|仓储存储密度再提高60%|刷新高密度的“天花板”

在智能搬运、拣选、分拣等仓储物流的关键环节,满足多重需求的“货箱到人”的箱式仓储机器人脱颖而出。由于箱式仓储机器人是拣选搬运货箱而不是货架,所以可以把货架之间的巷道设置得更窄,存储密度更高,更节省空间,进而…

第10篇:强化学习Q-learning求解迷宫问题 代码实现

你好,我是郭震(zhenguo) 今天重新发布强化学习第10篇:强化学习Q-learning求解迷宫问题 代码实现 我想对此篇做一些更加详细的解释。 1 创建地图 创建迷宫地图,包括墙网格,走到墙网格就是负奖励。 注意&…

总结712

今天看了高数换元法,分部积分,有理函数的积分的内容。之后写了一篇长篇阅读作文。之后就听到能回家的消息了。也不是很清楚到底是什么状况,但这学期过得确实快。走的时候先去图书馆借一波书先,暑假就是遗憾没能借些计算机类的书籍…