芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 5536|回复: 0

OV7725的CMOS摄像头例程移植现象分析

[复制链接]
  • TA的每日心情
    开心
    2021-12-31 09:03
  • 71

    主题

    79

    帖子

    967

    积分

    高级会员

    Rank: 6Rank: 6

    积分
    967
    发表于 2020-11-12 21:19:20 | 显示全部楼层 |阅读模式
    OV7725的CMOS摄像头例程移植现象分析
           本人最近尝试将小梅哥AC620开发板的OV7725例程移植到AC720开发板上,在移植的过程中积累了一些心得,愿意和各位同学共同分享,欢迎大家拍砖。
    准备:
    软件材料:AC620开发板的OV7725资料例程,AC720开发板的OV5640摄像头720P的HDMI,TFT通用显示例程

    1.png

    硬件材料:AC720开发板含下载器一套,HDMI显示器一台带HDMI线,OV7725摄像头一个,最好加OV5640摄像头一个(配合测试观察现象),如果你是土豪,可以再准备一块AC620开发板,用于原始程序现象观察。

    程序移植中的难点:
    1、 AC620开发板例程使用的是SDRAM作为图像缓存,而ACX720开发板例程使用的是DDR3作为图像缓存,所以不能将整个项目的V文件直接全部替换。
    2、 AC620和ACX720编程软件不同,IP不能通用。
    3、 两款摄像头的初始化文件不同,需关注摄像头初始化的问题。
    4、 OV5640摄像头是500W像素摄像头,OV7725摄像头是30W像素摄像头(像素不高,但是便宜啊!!!),液晶屏的分辨率是800*480,HDMI显示器分辨率由于过于灵活,是否会被自己作死?o(* ̄) ̄*)o,AC620开发板的FPGA芯片是低电平复位,ACX735开发板的FPGA芯片是高电平复位,过多的不稳定因素,会让实验的难度呈几何级别的增长。
    5、 移植过程中,文件版本的管理,也需要引起注意,错乱的管理不但会耽误时间影响效率,严重的甚至直接导致程序员记忆崩溃,项目失败。

    开始:
    第一步:将两个例程放在同一个文件夹中,删除不相关信息,作为原始文件的备份,做好打持久战的准备。建好文件夹以后,再开辟一个文件夹,用于第一版程序修改。由于相信持久战不会太持久,所以用一个数字附加就可以表示进度了,大脑也要出一点点力,协助记一下每个版本的大致修改情况,实在记不住的,可以将文件名信息丰富一下或者在工程文件夹下建立一个文本,描述一下这个版本的信息。

    2.png
    第二步:开始初始化摄像头。由于最终我们需要让程序在ACX720上实现,所以我们的顶层文件必须采用ACX720为蓝本的顶层调度文件。观察AC620和AC720的代码V文件,我们发现两个文件的例化接口是一模一样的,并且这一部分不含IP和存储器数据缓存,瞬间欣喜若狂。要搬,就全部搬一套过来。于是我删掉原来ACX720文件内部源文件的全部摄像头初始化文件,将AC620代码的文件包整个拷贝过来,放到相同路径下方,诱骗一下VIVADO,看能否直接嫁接初始化程序。结果,被VIVADO机智的发现了我的行为。VIVADO将文件进行层次划分的时候,发现部分文件丢失,部分文件重复。
    3.png
           这个是可以理解的,由于vivado识别文件的层次结构,名字必须完全相同,两款开发板的层次存在差异,而且VIVADO在例程创建之初导入文件的路径,和直接拖过来的文件夹,层次结构也不一样,这样,文件出现了孩子找不到妈,父亲找不到儿子的现象。
           出现这个现象,我们只需要将文件在VIVADO下进行规整就好。本人在进行测试的时候,测试完成的程序也可能出现层次不正常的情况,这有可能是vivado的内部文件关联问题,目前解决方案是重新add文件夹下文件到工程目录中,让vivado再次自动安排层次。
           首先,删除重复的文件,
    4.png
    i2c文件是摄像头例化时,对摄像头初始化进行操作的文件,这两个文件出现在顶层肯定是不正确的,看看是不是文件删除的时候,没有删除完全造成的。考虑到移植过来的文件也有相同的文件名,因此,需要将文件看清楚再删,典型的差异在于720文件的复位信号是Rst_p,而AC620开发板的原始文件是rst_n,所以,不能误删文件。对于找不到孩子的文件,应该是620原程序的顶层文件,看清以后,进行处理,典型的判断依据是顶层出现SDRAM字样的,肯定是620文件。
    本人在调试过程中,就由于误删了i2c文件,导致摄像头初始化不成功。典型的摄像头初始化不成功的现象包括但不限于:TFT黑屏,TFT出现彩色雪花点等,同时伴随摄像头背部电路板没有发热这一现象。
    5.png
    同时,由于两套程序复位信号电平不同,需在顶层做相应的接口以适应上层和下层的信号过渡:

    6.png
    以上红框中内容为万古不变的真理,不管用不用的上,都可以写出来。有时候复位信号的疏忽,会导致程序无法启动,而一直无法找到原因。
    如果摄像头初始化成功,则进入第二步:

    第三步:参数粗调整。这一步的主要目标是整出动态影像,如果你走了XXXX运(自己脑补关键名词)直接出视频信号请绕道。
    我们在参数调整之前,很有可能并不记得哪些地方需要修改,哪些地方涉及到像素信息,哪些地方是像素的输入,哪些地方是像素的输出,再加上行限位,场限位,行消隐,场消隐等因素的影响,所以,开启了摸索尝试的艰辛道路.......以下现象均为调试过程中各个大型翻车现场:现在进行以下列举和分析,作为调试经验:
    1、我晃你也晃,叠影千重障........
    7.jpg
    出现这个现象,是摄像头配置文件书写成功的典型标志,TFT屏能够一定程度呈现摄像头的信息。出现这个现象确定了摄像头配置寄存器正确以后,可开始重点关注参数的修改正确情况。
    2、TFT四分屏,HDMI三行两列......
    8.jpg
    出现这个现象,说明720p的程序导入成功,频率和像素匹配正确,是不是感觉离胜利越来越接近了?


    3、TFT无影像,HDMI显示像素不正常.....
    9.jpg 10.jpg
    DVI锁相环out2不是out1的5倍。
    TFT可能不支持低于其分辨率的像素





    4、我既有背景,又有背影......
    11.jpg
    行约束不力。
    分析:
    出现以上种种现象,无非以下原因:
    TFT屏和HDMI的问题归根结底有可能是如下方面的原因:
    1、 TFT屏不支持比它低的像素输入
    2、 没有进行(xing韵母第二声)行(hang韵母第二声)约束
    3、 分辨率没有进行调整
    4、 程序out1的输出选择和像素不匹配。
    5、程序中DVI频率的锁相环输出,out2不是out1的5倍。

    解决:
    1、检查修改顶层文件的分辨率参数,适应摄像头640*480
    12.png
    2、修改显示文件disp_parameter_cfg的参数为800*480,同时留意参数对应的频率,只有这样,屏幕才能正常输出,如果采用640*480,则无法输出信号,具体原因可能是屏的门槛分辨率导致。
    13.png

    3、 修改锁相环的DVI的clk_out1和clk_out2输出频率
    以下是错误参数:
    14.png
    以下是正确的参数:
    15.png

    5、在顶层文件打上限位的补丁,输入如下语句:
    16.png
    值得注意的是:如果wire的disp_data_limit未标明是[15:0],则可能出现黑屏的情况,程序会判断disp_data_limit是一个一位的数据。
    结果:
    愉快收工:
    17.jpg 18.jpg


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-3-29 00:46 , Processed in 0.110123 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表