野火ov5640程序在AC620开发板及摄像头的HDMI显示中的问题记录与总结

博主花费一周时间成功解决OV5640摄像头在开发板上的显示问题。从最初无显示,排查到IIC驱动模块,发现器件地址错误,最终修正为0x3c后实现正常显示。尽管图像方向需要调整,但通过官方手册配置寄存器后,图像显示恢复正常。

  大概将近一周的时间终于调出来了。从最开始,将程序下载到开发板,发现无显示,用AC620开发板的参考程序,是能正常显示的;找了好久不知道那里的问题,后来觉得可能是引脚的问题,按照两个程序的引脚分布发现野火的参考程序里面少了一个,查找发现少了ov5640摄像头的驱动时钟,然后把24M的驱动时钟加上。还是不行,然后用signal tap 去调试,发现hdmi的输出没用信号,以为是hdmi模块的问题,调了好久,最后把两个参考程序的signl tap调试结果对比发现,hdmi模块没什么问题。

  后来突然想到根据像数数据的数据流去找哪里的问题,发现像数数据输入ov5640模块处理后没有数据输出,然后根据模块内部的数据流向,发现可能是iic驱动模块的问题;然后开始了对 IIC模块的调试,最终发现写入器件地址数据后应答信号为高电平,也就是说IIC传输的数据根本没有写入到ov5640的寄存器中。找了好久没有发现问题。因为ov5640摄像头模块上面写的器件地址是 0x78,所以上面的所有调试过程中使用的器件地址都是 0x78。不知道突然怎么就想到用代码里面原来给的器件地址 0x3c,下载到开发板后终于能正常显示了。(有点想不明白为什么之前我没改器件地址,加了0v5640的驱动时钟之后没显示,而现在有显示了)。

  虽然能显示了,但是图像的左右和上下都是颠倒的。然后按照小梅哥的教程里面的,把 0x3820 设置为 8’h40 ;0x3821设置为 8’h07, 图像显示位置正常了,但是有很多红色线条且抖动。还有网上找的一些参数,要不是显示的是镜像,要不是上下颠倒,而且闪烁的厉害。后来按照官方手册里面的寄存器配置把下面几个寄存器的值改成手册里面的,镜像和翻转的寄存器也按照官方手册里面的设置,终于显示正常了。

{
   
   16'h3820, 8'h41}
r40_tinav2.1_最终验证通过_使用CB-S来验证OV5640有横条纹fpscamera+SPI2.0成功_20171114_1443没有外层目录.7z 开发板:CB-S 1、(可选修改/调试技巧:) 除了ov5640.c之外,其它的驱动都不编译,节省编译时间! W:\ov5640_spi20_r40t\lichee\linux-3.10\drivers\media\platform\sunxi-vfe\device\Makefile obj-m += ov5640.o #obj-m += ov2640.o #obj-m += ov7736.o #obj-m += s5k4ec.o #obj-m += s5k4ec_mipi.o #obj-m += gc2035.o #obj-m += gt2005.o #obj-m += gc0307.o #obj-m += gc0308.o #obj-m += gc0328.o #obj-m += gc0328c.o #obj-m += gc2145.o #obj-m += gc0329.o #obj-m += gc0311.o #obj-m += hi253.o #obj-m += sp2518.o #obj-m += sp2519.o #obj-m += sp0718.o #obj-m += sp0838.o #obj-m += ov16825.o #obj-m += ov5650.o #obj-m += ov5647.o #obj-m += ov5647_mipi.o #obj-m += t8et5.o #obj-m += s5k4e1.o #obj-m += s5k4e1_mipi.o #obj-m += sp2518.o #obj-m += sp0718.o #obj-m += gc5004.o #obj-m += gc5004_mipi.o #obj-m += ov5648.o #obj-m += ar0330.o #obj-m += ov5648.o #obj-m += sp5408.o #obj-m += ov12830.o #obj-m += ov8825.o #obj-m += ov8850.o #obj-m += gc2155.o #obj-m += ov8858.o #obj-m += ov13850.o #obj-m += imx214.o #obj-m += ov8858_4lane.o #obj-m += sp5409.o #obj-m += s5k5e2yx.o #obj-m += ov2710_mipi.o #obj-m += ov2686.o (这里是看ov5640的驱动的probe执行是否正确?设备ID是否读取成功!) W:\ov5640_spi20_r40t\lichee\linux-3.10\drivers\media\platform\sunxi-vfe\device\ov5640.c static int sensor_detect(struct v4l2_subdev *sd) { data_type rdval; printk("****wyb %s:%d/%s()! \n", __FILE__, __LINE__, __func__); LOG_ERR_RET(sensor_read(sd, 0x300a, &rdval;)) printk("****wyb %s:%d/%s()! 0x300a rdval=0xx\n", __FILE__, __LINE__, __func__, rdval); if(rdval != 0x56) return -ENODEV; LOG_ERR_RET(sensor_read(sd, 0x300b, &rdval;)) printk("****wyb %s:%d/%s()! 0x300b rdval=0xx\n", __FILE__, __LINE__, __func__, rdval); if(rdval != 0x40) return -ENODEV; return 0; } (在全志R16平台改过这个文件,让摄像头不要休眠,但是全志R40平台的tina v2.1系统下不需要修改!) W:\ov5640_spi20_r40t\lichee\linux-3.10\drivers\media\platform\sunxi-vfe\vfe.c 2、(可
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值