【Hi3566V100】OV2311 的调试(一)

一、前言

       最近一直在调 OV2311 这款 Sensor,其中遇到了不少问题,所以本次博文给大家带来在 Defensor 上调试 OV2311时所遇到的一些问题,以及分析问题的过程和解决方法,使用的软件 SDK 版本是 Hi3562V100_MobileCam_SDK_V2.0.0.2。 

二、OV2311 简介

2.1 基本介绍

       根据 OV2311 的规格书说明,这款 Sensor 通过 SCCB 协议控制,数据通过 2-lane MIPI 信号线传输,输出的数据格式是 RAW10,分辨率默认为 1600*1300,帧率默认为 60,数据传输速率默认为 800Mbps。SCCB 协议跟 I2C 协议是一样的,可以直接把 Sensor 设备挂载到主控的 I2C 总线上,通过 I2C 写入初始化序列。

图 2.1 规格书简介

 

2.2 修改输出帧率

       查看了 Hi3566V100 的规格书,平台最大只支持双路 1920*1080@30 输入,很明显 OV2311 的 1600*1300@60 的输入已经超过了该限制,

所以我们需要调整 Sensor 输出的帧率,这里只需要修改 0x380E 和 0x380F 两个寄存器,这两个寄存器决定每帧画面的帧长,所以我们只需要把这个值 *2 就相当于把帧长增加一倍,

以达到帧率从 60fps 缩减到 30fps 的效果。

  

三、I2C 问题

3.1 写设备地址失败

       本次使用的 OV2311 模组是经过 THCV241A 和 THCV242 这对 Serdes 传输的 DMS 摄像头,OV2311 的 I2C 地址是 0xC0,需要在 Serdes 的驱动代码中填写 0xC0 这个地址,对应的文件是 amp\a7_liteos\drv\extdrv\serdes\thine_241a242_serdes.c :

图 3.1 填写 Sensor 地址

       做完这一步后,0xC0 这个地址就会在 Serdes 初始化时绑定到 I2C 总线上,无论这个地址有没有连接设备。一开始的时候我就是只能 detect 到 0xC0 这个地址,但是无论是对这个地址读或写都没有效果。然后去测量 Serdes 和 OV2311 间的 I2C 波形看是否有异常:



图 3.2 模块 I2C 波形

       从波形中可以明显看出,Serdes 发送 0xC0 地址后没有收到 Sensor 的回应,并且发送的数据只有这一小段,理论上后面还会寄存器的地址,所以问题就出现在这里。       然后再测量了主控和 Serdes 之间的 I2C 数据线,波形如下:

图 3.3 主控 I2C 波形

       可以看出,主控这边发出的 I2C 是连续且完整的,这让我的怀疑目标转移到了 Serdes 上。

 

3.2 解决方法

       一开始怀疑是 Serdes 的问题,但是查找 Serdes 的规格书发现关于 I2C 可以设置的参数是很少的,问过 Serdes 原厂的 FAE,对方说这种现象跟 Serdes 软件没有关系,可能是硬件上有问题。于是赶紧去确认硬件,经过漫长的测试,最后才偶然发现是 Sensor 和 Serdes 间的 I2C 的 SDA 和 SCL 两根线接反了!一开始压根没有想到模组会有这种小问题,看来以后分析问题可不能大意,得从基础出发!以下是模组出错部分的原理图:

图 3.4 Sensor 模组原理图

       本篇关于模组硬件的调试就到这里了,下一期还会有关于软件的调试,敬请期待!

 

参考资料:

【1】《OV2311-1C Product-Specification-a-CSP_Version-2-04_WPI-Group.pdf》

【2】《THCV241A_Rev200_E.pdf》

【3】《THCV242.pdf》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论