FPGA实现USB3.0 UVC 相机OV5640摄像头输出 基于FT602驱动 提供工程源码和QT上位机源码

1、前言

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

本设计用FPGA驱动FT602芯片实现USB3.0UVC 相机彩条视频输出试验,使用同步245模式通信,提供vivado工程源码,采集OV5640摄像头数据,视频经过图像三帧缓存至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、详细设计方案

详细设计方案框图如下:
在这里插入图片描述
OV5640摄像头和视频采集:
OV5640分辨率为1280x720@60Hz,纯verilog实现的i2c协议实现对齐内部寄存器的配置,纯verilog实现的图像采集模块将OV5640输出视频采集为VGA时序的RGB888视频输出;
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;
输入:OV5640摄像头 720P分辨率;
输出:FT602–USB3.0接口;
应用:模拟和实现 USB3.0 UVC 相机的功能;

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

7、上板调试验证

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_41667729/article/details/131177635