OV7725的CMOS摄像头例程移植现象分析 本人最近尝试将小梅哥AC620开发板的OV7725例程移植到AC720开发板上,在移植的过程中积累了一些心得,愿意和各位同学共同分享,欢迎大家拍砖。 准备:软件材料:AC620开发板的OV7725资料例程,AC720开发板的OV5640摄像头720P的HDMI,TFT通用显示例程
硬件材料: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、 移植过程中,文件版本的管理,也需要引起注意,错乱的管理不但会耽误时间影响效率,严重的甚至直接导致程序员记忆崩溃,项目失败。
开始:第一步:将两个例程放在同一个文件夹中,删除不相关信息,作为原始文件的备份,做好打持久战的准备。建好文件夹以后,再开辟一个文件夹,用于第一版程序修改。由于相信持久战不会太持久,所以用一个数字附加就可以表示进度了,大脑也要出一点点力,协助记一下每个版本的大致修改情况,实在记不住的,可以将文件名信息丰富一下或者在工程文件夹下建立一个文本,描述一下这个版本的信息。
第二步:开始初始化摄像头。由于最终我们需要让程序在ACX720上实现,所以我们的顶层文件必须采用ACX720为蓝本的顶层调度文件。观察AC620和AC720的代码V文件,我们发现两个文件的例化接口是一模一样的,并且这一部分不含IP和存储器数据缓存,瞬间欣喜若狂。要搬,就全部搬一套过来。于是我删掉原来ACX720文件内部源文件的全部摄像头初始化文件,将AC620代码的文件包整个拷贝过来,放到相同路径下方,诱骗一下VIVADO,看能否直接嫁接初始化程序。结果,被VIVADO机智的发现了我的行为。VIVADO将文件进行层次划分的时候,发现部分文件丢失,部分文件重复。 这个是可以理解的,由于vivado识别文件的层次结构,名字必须完全相同,两款开发板的层次存在差异,而且VIVADO在例程创建之初导入文件的路径,和直接拖过来的文件夹,层次结构也不一样,这样,文件出现了孩子找不到妈,父亲找不到儿子的现象。 出现这个现象,我们只需要将文件在VIVADO下进行规整就好。本人在进行测试的时候,测试完成的程序也可能出现层次不正常的情况,这有可能是vivado的内部文件关联问题,目前解决方案是重新add文件夹下文件到工程目录中,让vivado再次自动安排层次。 首先,删除重复的文件, i2c文件是摄像头例化时,对摄像头初始化进行操作的文件,这两个文件出现在顶层肯定是不正确的,看看是不是文件删除的时候,没有删除完全造成的。考虑到移植过来的文件也有相同的文件名,因此,需要将文件看清楚再删,典型的差异在于720文件的复位信号是Rst_p,而AC620开发板的原始文件是rst_n,所以,不能误删文件。对于找不到孩子的文件,应该是620原程序的顶层文件,看清以后,进行处理,典型的判断依据是顶层出现SDRAM字样的,肯定是620文件。 本人在调试过程中,就由于误删了i2c文件,导致摄像头初始化不成功。典型的摄像头初始化不成功的现象包括但不限于:TFT黑屏,TFT出现彩色雪花点等,同时伴随摄像头背部电路板没有发热这一现象。 同时,由于两套程序复位信号电平不同,需在顶层做相应的接口以适应上层和下层的信号过渡:
以上红框中内容为万古不变的真理,不管用不用的上,都可以写出来。有时候复位信号的疏忽,会导致程序无法启动,而一直无法找到原因。 如果摄像头初始化成功,则进入第二步:
第三步:参数粗调整。这一步的主要目标是整出动态影像,如果你走了XXXX运(自己脑补关键名词)直接出视频信号请绕道。 我们在参数调整之前,很有可能并不记得哪些地方需要修改,哪些地方涉及到像素信息,哪些地方是像素的输入,哪些地方是像素的输出,再加上行限位,场限位,行消隐,场消隐等因素的影响,所以,开启了摸索尝试的艰辛道路.......以下现象均为调试过程中各个大型翻车现场:现在进行以下列举和分析,作为调试经验: 1、我晃你也晃,叠影千重障........ 出现这个现象,是摄像头配置文件书写成功的典型标志,TFT屏能够一定程度呈现摄像头的信息。出现这个现象确定了摄像头配置寄存器正确以后,可开始重点关注参数的修改正确情况。 2、TFT四分屏,HDMI三行两列...... 出现这个现象,说明720p的程序导入成功,频率和像素匹配正确,是不是感觉离胜利越来越接近了?
3、TFT无影像,HDMI显示像素不正常..... DVI锁相环out2不是out1的5倍。 TFT可能不支持低于其分辨率的像素
4、我既有背景,又有背影......
行约束不力。 分析:出现以上种种现象,无非以下原因: TFT屏和HDMI的问题归根结底有可能是如下方面的原因: 1、 TFT屏不支持比它低的像素输入 2、 没有进行(xing韵母第二声)行(hang韵母第二声)约束 3、 分辨率没有进行调整 4、 程序out1的输出选择和像素不匹配。 5、程序中DVI频率的锁相环输出,out2不是out1的5倍。
解决:1、检查修改顶层文件的分辨率参数,适应摄像头640*480 2、修改显示文件disp_parameter_cfg的参数为800*480,同时留意参数对应的频率,只有这样,屏幕才能正常输出,如果采用640*480,则无法输出信号,具体原因可能是屏的门槛分辨率导致。
3、 修改锁相环的DVI的clk_out1和clk_out2输出频率 以下是错误参数: 以下是正确的参数:
5、在顶层文件打上限位的补丁,输入如下语句: 值得注意的是:如果wire的disp_data_limit未标明是[15:0],则可能出现黑屏的情况,程序会判断disp_data_limit是一个一位的数据。 结果:愉快收工:
|