Zynq UltraScale系列使用MIPI CSI-2 RX Subsystem 解码MIPI视频PD输出 提供2套工程源码和技术支持
目录
- 1、前言
- 2、设计思路和架构
- 3、vivado工程详解
- 4、上板调试验证
- 5、福利:工程代码的获取
1、前言
本设计采用OV5640摄像头MIPI模式作为输入,分辨率为1280x720@60Hz,MIPI解码方案采用Xilinx官方提供的MIPI CSI-2 RX Subsystem IP解码MIPI视频,通过DP接口输出视频。
FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI协议了,MIPI解码难度之高,令无数英雄竞折腰,以至于Xilinx官方不得不推出专用的IP核供开发者使用,不然太高端的操作直接吓退一大批FPGA开发者,就没人玩儿了。
本文详细描述了设计方案,工程代码编译通过后上板调试验证,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
关于MIPI协议,请自行搜索,csdn就有很多大佬讲得很详细,我就不多写这块了;
本设计只针对2line的MIPI相机;
如果要使用4line的MIPI相机,请参考我之前写的文章4line MIPI解码
2、设计思路和架构
工程采用两个 lane 的 MIPI 输入,MIPI 摄像头配置为 RAW10 输出。通过mipi_csi2_rx_subsystem 模块进行协议解析并转换成 AXIS 流数据,并通过Sensor Demosaic模块将RAW 转换成 RGB 数据,之后经过 Gammer 校正等模块,进入 VDMA,之后进入 HP 口。
设计架构如下:
先配置 ZYNQ 核,100MHz 用于数据传输,200MHz 用于 MIPI 模块参考时钟,如下图:
配置 i2c 为 EMIO,用于配置摄像头寄存器,GPIO EMIO 设置为 1,用于配置摄像头使能,如下图:
添加 mipi_csi2_rx_subsystem IP,用于 MIPI 数据的接收与解析,转成 axi-stream 接口。
配置如下,数据格式选择 RAW10,选择 2 lane,Line Rate 配置为 1000Mbps,指的是最大支持的速率,也可以根据自己的需求填写,范围为 80-2500;Pixels Per Clock 默认配置为1,表示 1 个周期为 1 个像素;如下图:
自此,输入MIPI视频就以完成了解码,输出为AXIS视频流;后面就是图像数据格式转换和VDMA缓存以及vitis软件配置了。
3、vivado工程详解
提供2套工程源码,对应2种fpga,其他型号的fpga只需在vivado里更改fpga型号,然后重新编译即可,很简单,不多说;
工程1:
输入:OV5640摄像头MIPI模式,1280x720@60Hz;
FPGA型号:Zynq UltraScale Xczu4ev;
开发环境:vivado2020.2;
输出:DP,1280x720@60Hz;
工程2:
输入:OV5640摄像头MIPI模式,1280x720@60Hz;
FPGA型号:Zynq UltraScale Xczu2cg;
开发环境:vivado2020.2;
输出:DP,1280x720@60Hz;
以工程1为例,vivado工程BD如下:
综合后的代码架构如下:
vitis软件配置部分c代码主函数源码如下:
int main(void)
{int Status;int i ;Xil_DCacheDisable();Xil_ICacheDisable();for (i = 0; i < DISPLAY_NUM_FRAMES; i++){pFrames[i] = frameBuf[i];memset(pFrames[i], 0, DEMO_MAX_FRAME);}PsGpioSetup() ;XGpioPs_WritePin(&Gpio, CAM_EMIO, 0) ;usleep(1000000);XGpioPs_WritePin(&Gpio, CAM_EMIO, 1) ;usleep(1000000);i2c_init(&ps_i2c0, XPAR_XIICPS_0_DEVICE_ID,100000);xil_printf("DPDMA Generic Video Example Test \r\n");Status = DpdmaVideoExample(&RunCfg, pFrames[0]);if (Status != XST_SUCCESS) {xil_printf("DPDMA Video Example Test Failed\r\n");return XST_FAILURE;}gamma_lut_init();demosaic_init();vdma_write_init(XPAR_AXIVDMA_0_DEVICE_ID,HORSIZE,VERSIZE,DEMO_STRIDE,(unsigned int)pFrames[0]);sensor_init(&ps_i2c0);return 0;
}
4、上板调试验证
由于某些不可抗力和高层次复杂因素,不便展示调试结果,请见谅;
5、福利:工程代码的获取
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
相关文章:
Zynq UltraScale系列使用MIPI CSI-2 RX Subsystem 解码MIPI视频PD输出 提供2套工程源码和技术支持
目录1、前言2、设计思路和架构3、vivado工程详解4、上板调试验证5、福利:工程代码的获取1、前言 本设计采用OV5640摄像头MIPI模式作为输入,分辨率为1280x72060Hz,MIPI解码方案采用Xilinx官方提供的MIPI CSI-2 RX Subsystem IP解码MIPI视频&a…...
C++:详解C++11 线程休眠函数
休眠函数简介1: 让线程休眠一段时间1.1:std::chrono 的时钟 clock简介 C11 之前并未提供专门的休眠函数,C语言的 sleep、usleep函数其实是系统提供的函数,不同的系统函数的功能还要些差异。 在Windows系统中,sleep的参数是毫秒 …...
TryHackMe-The Great Escape(Docker)
The Great Escape 我们的开发人员创建了一个很棒的新网站。你能冲出沙盒吗? 端口扫描 循例 nmap Web信息收集 robots.txt: /exif-util是文件上传点,但是绕过之后貌似没啥用 在robots.txt当中披露了可能存在.bak.txt,现在我们已知的文件就是…...
这么强才给我28k,我头都不回,转身拿下40k~
时间真的过得很快,眨眼就从校园刚出来的帅气小伙变成了油腻大叔,给各位刚入道的测试朋友一点小建议,希望你们直通罗马吧! 如何选择自己合适的方向 关于选择测试管理: 第一,你一定不会是一个喜欢技术&…...
【Python学习笔记】第二十一节 Python Lambda 函数
Python 提供了非常多的库和内置函数。有不同的方法可以执行相同的任务,而在 Python 中,有个万能之王函数:lambda 函数,它以不同的方式在任何地方使用。一、Lambda 函数简介在 Python 中,函数可以接受一个或多个位置参数…...
Nginx学习整理
Nginx学习第一章 Nginx概述1.1、Nginx概述1.2、Nginx官网1.3、Nginx用处第二章 Nginx单实例安装2.1、环境说明2.2、安装依赖2.3、Nginx下载2.4、Nginx解压2.5、Nginx安装2.6、Nginx命令2.7、开放防火墙2.8、启动后效果第三章 Nginx正向代理、反向代理3.1、概述3.2、反向代理配置…...
阿里面试之Hr面,这个套路把我坑惨了......
作为技术类的测试工程师面试,往往要经过多次面试才能拿到心仪的offer,这里面有技术一面、二面…,甚至总监面等,还有一个必不可少的就是HR面,一般HR会出现在你面试的最前面和最后面,前面是了解你的基本情况&…...
域基础和基本环境搭建
1.1 名词解释 域和工作组的区别: 工作组中所有的计算机都是对等的,也就是没有服务器和客户机的之分,所以工作组并不存在真正的集中管理作用;域是一个有安全边界的计算机集合,安全边界指的是一个域中的用户无法访问到另…...
Java Map集合体系(HashMap、LinkedHashMap、TreeMap、集合嵌套)
目录Map集合体系一、Map集合的概述二、Map集合体系特点三、Map集合常用API四、Map集合的遍历4.1 Map集合的遍历方式一:键找值4.2 Map集合的遍历方式二:键值对4.3 Map集合的遍历方式三:lambda表达式五、Map集合案例-统计投票人数六、Map集合的…...
使用邮箱验证实现登录功能(发送邮件,redis)
目录 概述 前端搭建 后端搭建 生成验证码-存入redis(主要过程代码) 发送邮件(主要过程代码) 登录验证-取出redis中数据进行验证(主要代码) 完整代码一-LoginController 完整代码二-LoginService 完…...
【Linux】网卡的7种bond模式
网卡的7种bond模式 一、bond模式 Mode0(balance-rr) 表示负载分担round-robin,和交换机的聚合强制不协商的方式配合 Mode1(active-backup) 表示主备模式,只有一块网卡是active,另外一块是备的standby,这时如果交换机配的是捆绑,…...
AQS抽象队列同步器
aqs 抽象队列同步器,内部存储了一个valitail修饰的status 和内部类node ,来实现对共享变量并发同步队列机制,以reentrantLock为例,lock底层实际上调用的是sync的lock,会调用cas对status的状态进行修改,来确定是否获得锁…...
springBoot对REST支持源码解析
一、在配置类中: AutoConfiguration(after { DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,ValidationAutoConfiguration.class }) ConditionalOnWebApplication(type Type.SERVLET) ConditionalOnClass({ Servlet.class, D…...
6 集成学习及Python实现
1 主要思想 集成学习: 三个臭裨将, 顶个诸葛亮 Bagging: 数据随机重抽样, 并行构建分类器, 投票;Boosting: 关注被错分的样本, 串行构建分类器, 加权投票。 2 理论 AdaBoost (Adaptive Boosting)示意图1 错误率: εEN\varepsilon \frac{E}{N}εNE 其中NNN为…...
如何编程实现从多数据库操作数据
对于数据量很大的复杂系统,有时候会采用分库或者分表的减轻单台数据库服务器压力,截止目前有一些工具直接支持读写分离等,例如ShardingSphere,如果不采用工具框架,从编码出发,如何实现从多个数据库读写数据…...
LeetCode 147. 对链表进行插入排序 | C/C++版
LeetCode 147. 对链表进行插入排序 | C语言版LeetCode 147. 对链表进行插入排序题目描述解题思路思路一:使用栈代码实现运行结果参考文章:思路二:减少遍历节点数代码实现运行结果参考文章:[]()LeetCode 147. 对链表进行插入排序 …...
【QT进阶】第五章 QT绘图之自定义控件--仪表盘绘制
❤️作者主页:凉开水白菜 ❤️作者简介:共同学习,互相监督,热于分享,多加讨论,一起进步! ❤️专栏目录:【零基础学QT】文章导航篇 ❤️专栏资料:https://pan.baidu.com/s/192A28BTIYFHmixRcQwmaHw 提取码:qtqt ❤️点赞 👍 收藏 ⭐再看,养成习惯 订阅的粉丝可通过…...
Java代码弱点与修复之——URL manipulation(URL操纵)
弱点描述 “URL manipulation” 是指攻击者利用应用程序中的 URL 参数来执行恶意操作的一种攻击技术。 在 URL manipulation 攻击中,攻击者会修改应用程序中的 URL 参数,以便执行不当操作,如访问未授权的页面、修改他人的数据、绕过访问控制等。攻击者通常会使用手动修改 …...
Sharding Sphere学习
一、基本概念 1.什么是Sharding Sphere 2.分库分表3.分库分表的方式 4.分库分表应用和问题 5.功能 5.1数据分片 —核心概念 —使用限制 5.2分布式事务 —核心概念 —使用限制 5.3读写分离 —核心概念 —使用限制 5.4高可用 —核心概念 —使用限制 5.5数据库网关 —核心概念…...
粗心小编被云拯救,那云上数据谁来拯救?
开工第三天 小编已忙的焦头烂额 不是因为工作积压 而是因为自己的疏忽 也许是没有进入工作状态,一大早先经历了自行车钥匙丢失,手机遗落在家,好不容易坐到工位上才发现,备份数据的U盘忘带了。 不过,好在提前将工作文件上传到了云端…...
[git可视化软件]gitkraken平替:GitAhead
日期2023-02-28 gitkraken6.5.1已经不能登陆使用了!! 6.5.1免费版已经无法使用!!! 现在是2023-02-28 这款工具已经废除了6.5.1版本的使用功能了,我直接卡在登陆界面进不去项目了. 要想继续管理私有项目,只能升级最新版的软件,并且开通会员.会员费用高的一批,一年要59.4美元.约…...
CentOS8基础篇8:使用systemctl管理NFS服务
一、服务简介 服务:是指执行指定系统功能的程序、例程或进程,以便支持其他程序,尤其是底层(接近硬件)程序。 例如:打印服务,ftp服务,http服务。 服务就是一个程序(正在执行的程序)…...
Go defer用法
defer概览 defer是go语言里的一个关键字,在 函数内部使用;defer关键字后面跟一个 函数或匿名函数; defer用法 执行一些资源的收尾工作,如 关闭数据库连接,关闭文件描述符,释放资源等等;结合recover()函数使用,防止函数内部的异常导致整个程序停止;defer在遇到panic后,仍然会…...
产地证是什么,主要作用有哪些?
产地证是什么,主要作用有哪些?最近一个客户问我,产地证是什么,主要作用有哪些?今天就来扒拉扒拉这个问题,其实很简单~通俗一点的讲,产地证是货物原产地的证明文件之一,主要用于国外清…...
王道计算机网络课代表 - 考研计算机 第一章 计算机网络体系结构 究极精华总结笔记
本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 计算机网络 知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!! 关于对 “计算机网络体系结构” 章节知识点总结的十分全面,涵括了《计算机网络…...
数据处理 |遍历所有文件夹及子目录文件夹方法总结与实例代码详解
深度学习中不可避免的数据预处理~1. glob.glob()方法 2. pathlib中的Path方法3. os.walk()方法1. glob.glob()方法 语法glob.glob(pathname)(多指定文件类型,查找jpg,png,txt,json等)缺点:查找文件较慢2. 路径操作库pathlib中的Pa…...
ProtoEditor - 如何在Unity中实现一个Protobuf通信协议类编辑器
文章目录简介Protobuf 语法规则Proto Editor实现创建窗口定义类、字段增删类编辑字段导入、导出Json文件生成.proto文件生成.bat文件简介 在Socket网络编程中,假如使用Protobuf作为网络通信协议,需要了解Protobuf语法规则、编写.proto文件并通过编译指令…...
2022 OpenCV Spatial AI大赛前三名项目分享,开源、上手即用,优化了OAK智能双目相机的深度效果。
编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 ▌前言 Hello,大家好,这里是OAK中国,我是助手…...
Android 蓝牙开发——HCI log 分析(二十)
HCI log 是用来分析蓝牙设备之间的交互行为是否符合预期,是否符合蓝牙规范。对于蓝牙开发者来说,通过 HCI log 可以帮助我们更好地分析问题,理解蓝牙协议。 一、抓取HCI log 1、手机抓取HCI log 在开发者选项中打开启用蓝牙HCI信息收集日志开关,Android系统就开始自动地收…...
flask入门-4.项目实战
4. 项目实战1 1. 问答平台项目结构搭建 项目结构 config.py hostname "127.0.0.1" port 3306 username "root" password "root"database "flask_qa"# 在 app.config 中设置连接数据库的信息 SQLALCHEMY_DATABASE_URI f"…...
网站建设灬金手指下拉/揭阳市seo上词外包
我现在的公司是自己和几个朋友创办的(大学生自主创业).人数不是很多,每个人负责一个版块.我们的经理本来开始也是专注技术的,后来因为公司的发展,他的经理基本上转到管理方面去了,因此在web技术方面就我孤单一个人了.现在觉得前途太迷茫了.本人是从学习asp开始的.然…...
网泰网站建设网络/黑帽seo培训网
有些想入门学习测试的朋友问我,我都30了,还能不能做软件测试?我本来想直接回答,但回答的明显字数不够用。所以就干脆就把想说的都记录下来写一篇文章。 1.我今年30岁了,还适不适合做软件测试? 首先&#…...
百度推广优化师是什么/自贡网站seo
svn服务器有2种运行方式 1.独立服务器 (例如:svn://xxx.com/xxx); 2.借助apache。(例如:http://svn.xxx.com/xxx); 为了不依赖apache,选择第一种方式-独立的svn服务器。 svn存储版本数据也有2种方式: 1.bdb; 2.fsfs。 …...
wordpress代码分享主题/西安seo外包行者seo
你对 Git 了解得越多,使用 Git 就会越容易。一起来回顾下年度最佳 Git 文章。来源:https://linux.cn/article-12981-1.html作者:Joshua Allen Holm译者:Xiaobin.Liu(本文字数:2277,阅读时长大约…...
做微信扫码网站/软文写作技巧有哪些
TIOBE 7 月份的编程语言排行榜已经公布,官方的标题是 Perl 是Python 热度过高的受害者之一,Python 最近确实是挺热的,大家可以看到最近 Python 相关培训课程的广告投放,不管在微信还是网站上都有它们的身影。 Perl 这个语言还是很…...
网站建设需要哪些人员/百度指数怎么下载
UNICODE程序指的是编译时定义了_UNICODE宏的程序,相应的,编译时没定义_UNICODE宏的程序叫非UNICODE程序。要开发两种程序,visual studio C .net就是“Character Set”设置上的不同:UNICODE、非UNICODE程序使用的字符编码UNICODE程…...