【ZYNQ】黑金教程_OV5640加LCD显示实验的Bug分享

在学习黑金的型号为AX2UCG-E开发板时,学习到基于AN5641模块的MIPI采集显示实验和7寸触摸屏模块的显示实验,正好对应我们上课需要将这两个模块结合在一起,实现将摄像头采集的画面实时显示在LCD屏幕上,因此我学习如何结合,在学习的过程中碰到很多意想不到的问题,在这里做一个分享。
1、时序一定要对,摄像头采集的图像大小为19201080大小,因此VDMA的写通道,就是往DDR里面写图像数据时,图片大小仍为19201080,但是在配置VDMA的读通道时,要根据LCD屏幕的大小而定,我当时理所当然的认为还是按照1920*1080来,只不过LCD屏幕没那么大,显示不完整而已,但是错了,读通道应该配置为LCD屏幕大小,这关系到正确驱动LCD屏幕的时序参数。
2、在黑金的基于AN5641模块的MIPI采集显示实验中,是采用的DP接口,作为图像数据的输出端,输出格式为RGBA格式,而LCD屏幕的格式为RGB888格式,所以涉及到AXI4-Stream上的视频数据应该如何重新组合成LCD屏幕的格式,之前我没看过官方的文档,我压根也不知道AXI4-Stream上的数据哪些位宽代表R分量,哪些代表G分量,哪些代表B分量,所以也不知道该如何组合,我当时是根据实验对位宽数据排列组合试出来的,后来有时间了就回过头来看了下官方文档,这个部分在我的另一篇文章【ZYNQ】IP核_关于视频IP核的详细介绍有讲述。
3、本来7寸触摸屏模块的显示实验的实验结果是显示一张图片出来,可是当我跟着教程将其复现出来时,发现我的图片有很多绿点,给我的感觉就像是液晶屏漏液了,我还打算去找客服换一块屏幕,结果客服也是好几天不回,后来跟我说是他们资料里的代码有问题,后来又过了好几天,客服才重新给我发了一份例程文件,这才解决问题,不知道现在黑金教程有没有把这个例程更新。
4、摄像头的画面能够在LCD屏幕上显示,但是屏幕上上半间为花屏状态,下半间出现移屏现象,什么意思呢,就是下半间左边一半显示的是摄像头采集的右边画面,右边一半显示的是摄像头采集的左边画面,但是至少能出来图像,我很开心,然后就是怎么解决的问题,也是特浮躁的网上一顿找,最后自己从原理出发,细想是不是和我设置的地址有关,结果还真是,这里显示出我的C语言水平有多差,本来是要给一个地址的首地址就行,然后我记得数组名不就是相当于数组第一个元素的地址吗,我就这么做的,然后就出现了上面提到的问题,这里面还涉及到指针的问题,指针还是我用的太少了,总是把我给绕进去了,所以说还是要多写多看代码,书上的知识也要过一段时间就拿出来温习一下。

以上就是我在单纯做OV5640加LCD屏幕显示时碰到的一些问题,后来在学习的过程中看到B站UP主大磊FPGA做了个帧差法运动目标检测的工程,自己也想试一试,其中关于如何将图像处理的算法封装成IP核当时也是学了半天,其实只要接口按规范定义,封装时就能自行推断,但是当时我不知道这些,这都不说了,我想说另一方面,因为在这个实验中要用到两个VDMA,我就按照我上面做的那个实验来做,结果LCD屏幕显示黑屏,不出来画面,当时百思不得其解,心想一个VDMA我已经实现出来了呀,再加一个VDMA,怎么就不行了呢,我一度怀疑是VDMA帧同步配置的有问题,我就把VDMA官方文档看了一遍,按我理解配置后还是不行,没办法我就没用黑金封装的VDMA的驱动代码,而是直接操作寄存器不得不说,操作寄存器是真简单,又直观,操作了哪些寄存器我都知道,当时我看黑金的VDMA驱动,头都大了,半天找不到一个函数到底是操作的哪个寄存器,在我使用操作寄存器的方法解决问题后,帧差法运动目标检测的工程也实现了,这就是我的另一篇文章ZYNQ图像处理_帧差法运动目标检测实现(开源)所写的。
最近也是想把我做的这些工作都总结出来,以文章的形式在CSDN上分享出来,我再回过头来看我完成的这个实验,我想到如果把中断加进来,比如在写入多少帧图像以后,触发中断,抓取一帧图像存入SD卡,这时操作寄存器的方式是肯定不如库函数方便的,所以还是决定通过库函数的方式将其重新做一遍,结果可想而知,我还是没搞出来,我在阅读官方文章的时候文档中这样写道,视频处理系统的编程流程应该从后往前,什么意思呢,就是调用的那些视频IP核在PS端配置时,应当从后往前配置,我心想是不是我的代码在这方面出了问题,结果和这没关系,白高兴一场,后来也是仔细的看黑金的VDMA驱动代码,然后我将其改了,把VDMA的初始化代码单独封装成一个函数,读通道配置和写通道配置也都各自封装成一个函数,然后再来调用,结果这次问题成功解决了,所以问题就出在这,黑金的VDMA驱动代码有两个主要函数,即读通道(初始化,配置,开启)一个函数,写通道(初始化,配置,开启)一个函数,如果我同时调用的话,意味着在读通道里将VDMA初始化了一次,在写通道里又将VDMA初始化了一次,我之前觉得这样做没问题,可是问题就是出在这,对此我也是只能哭笑一下,其实还是我自己水平太差了,一点都不懂得变通,不过既然选择了ZYNQ/FPGA这条路,咱就坚持走下去,毕竟同样的问题总结之后,就不可能再出现第二次。
下面我就把库函数版本的OV5640摄像头采集加LCD屏幕显示实验的工程文件放在这,供大家学习。
链接:https://pan.baidu.com/s/1WNN1IgvuTHaACOP6gaf3jA
提取码:bz6m
最后贴一张实验的结果吧
在这里插入图片描述

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值