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

news2024/11/18 3:27:21

目录

  • 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.coloradmin.cn/o/654634.html

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

相关文章

基于多层感知机MLP的数据预测与误差分析的完整matlab代码分享

多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构。多层感知器(multilayer Perceptron,MLP)是指可以是感知器的人工神经元组成的多个层次。MPL的…

在Windows和Linux系统上,用C语言实现命令行下输入密码回显星号和完全隐藏密码

本篇目录 引子在Windows 上实现在Linux上实现回显星号代码解读运行 完全隐藏运行 引子 在Windows系统上,当我们使用命令行和MySQL进行交互时,第一步就是要输入密码: -p后面的参数紧跟着的就是相应用户的密码。然而这种方式并不安全&#xff…

【数学建模】2019 年全国大学生数学建模竞赛C题全国一等奖获奖论文

2021 年高教社杯全国大学生数学建模竞赛题目 机场的出粗车问题 大多数乘客下飞机后要去市区(或周边)的目的地,出租车是主要的交通工具之一。国内多数机场都是将送客(出发)与接客(到达)通道分开…

2. windows系统下在QT中配置OPenCV开发环境

1. 说明: 在Windows系统中配置相对简单,不需要对下载的源码进行编译,在官网上下载的OPenCV可以直接使用,本文系统版本为win10,opencv是最新版本4.7.0。 效果展示: 2. 配置步骤: 2.1 下载OPenCV压缩包 打开opencv的官网OPenCV下载地址,可以在其页面内下载到最新的压…

iPhone手机UDID获取方法

UDID:iOS设备的唯一识别码,每台iOS设备都有一个独一无二的编码,这个编码,就称为识别码,也叫做UDID(Unique Device Identifier) 一、通过Xcode查看 手机连接电脑打开Xcode,选择wind…

入职2个月,那个高薪挖来的自动化软件测试被劝退了....

其实,在很多小伙伴的想法中,是希望通过跳槽实现薪酬涨幅,可是跳槽不是冲动后决定,应该谨慎啊~ 01 我的学弟,最近向我吐槽,2020 年上半年入职一家公司,当时是高薪挖走的他,所谓钱到…

阿里云无影云电脑使用教程全流程(5分钟上手)

阿里云无影云电脑即无影云桌面,云桌面如何使用?云桌面购买后没有用户名和密码,先创建用户设置密码,才可以登录连接到云桌面。云桌面想要访问公网还需要开通互联网访问功能。阿里云百科来详细说下阿里云无影云电脑从购买、创建用户…

h264结构与码流

h264基本概念结构图 H264视频压缩后会成为一个序列帧,帧里包含图像,图像分为很多片,每个片可以分为宏块,每个宏块由许多子块组成 H264结构中,一个视频图像编码后的数据叫做一帧,一帧由一个片(sl…

Redis系列--布隆过滤器(Bloom Filter)

一、前言 在实际开发中,会遇到很多要判断一个元素是否在某个集合中的业务场景,类似于垃圾邮件的识别,恶意ip地址的访问,缓存穿透等情况。类似于缓存穿透这种情况,有许多的解决方法,如:redis存储…

Python 自动化测试五种自动化测试模型实战详解

目录 前言: 自动化测试模型都有哪些? 线性模型 模块化驱动模型 数据驱动模型 关键字驱动模型 行为驱动模型 扩展知识 前言: Python是一种流行的编程语言,广泛应用于自动化测试领域。自动化测试可以帮助测试人员更快、更准确地发…

人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码)

人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 目录 人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 1. 前言 2. 项目说明 (1)开发版本 (2)依赖库说明(O…

uniapp微信开发者工具效果正常,真机上显示不出效果

1.问题描述 如上图,我需要给页面加入两个icons,页面属于分包内页面,icons使用的uni-icons组件,微信开发者工具中显示效果一切正常,但是在真机上预览页面显示错乱,没有图标,其他数据也显示不出来…

DJ3-7 TCP:拥塞控制

目录 一、拥塞控制概述 二、TCP 拥塞控制算法 1. 慢启动 2. 拥塞避免 3. 快速恢复 4. 状态转换图 5. 拥塞窗口的变化举例 一、拥塞控制概述 1. 如何限制发送方发送速率 TCP 拥塞控制设置 拥塞窗口 变量,表示为 cwnd: 它对发送方向网络中发送流…

A+CLUB管理人支持计划第五期 | 鸣熙资产

免责声明 本文内容仅对合格投资者开放! 私募基金的合格投资者是指具备相应风险识别能力和风险承担能力,投资于单只私募基金的金额不低于100 万元且符合下列相关标准的单位和个人: (一)净资产不低于1000 万元的单位&a…

init与zygote的启动流程

文章目录 1.init进程启动过程1.1init进程的入口函数1.1.1创建和启动所需要的文件目录1.1.2对属性进行初始化与启动属性服务1.1.3子进程信号处理函数1.1.4.重启死去的进程1.1.5.解析init.rc配置文件 1.2解析init.rc配置文件1.3解析Service语句1.4init启动Zygote1.4.1start方法 1…

Android kotlin 实现仿淘宝RecyclerView和对应下的指示器功能

文章目录 一、实现效果二、引入依赖三、源码实现1、指示器样式(自定义类)2、RecyclerView适配器3、主视图实现一、实现效果 指示器样式,第二个gif是用模拟器的,gif有小问题,第三个截图没问题 二、引入依赖 在app的build.gradle在添加以下代码 1、implementation com.githu…

数字电路基础---组合逻辑

目录 数字电路基础---组合逻辑 1、简介 2、实验任务 3、程序设计 4、仿真验证 数字电路基础---组合逻辑 FPGA 或者 IC 内部的逻辑一般包括组合逻辑和时序逻辑,组合逻辑一般指的是一些门电路或者选择器、比较器一起组成的逻辑。 1、简介 数字电路根据逻辑功能的…

程序员必备超好用下载器IDM(Windows下载)

程序员必备现役最强下载器IDM(Windows下载) 1 介绍 IDM,全称Internet Download Maneger,在下载界可谓是大名鼎鼎,不仅仅是其强大的32线程下载,还因为其无与伦比的资源嗅探功能,Internet Downlo…

监听关闭浏览器触发事件

关闭和刷新页面都会触发,一般都不用来做弹窗提示,一般用来做数据操作 // 监听页面关闭 清除本地缓存 window.onbeforeunload function (e) { localStorage.removeItem("statement"); }; // 监听页面关闭 提醒是否关闭 现在不允许自定义内容了…

生命周期监听的使用和源码解析

定义SpringApplicationRunListener来监听springApplication的启动 1.通过实现springApplicationRunListener来实现监听。 2.在 META-INF/spring.factories 中配置 org.springframework.boot.SpringApplicationRunListener自己的Listener。 在默认的springboot配置中就有给我…