安卓i2c被摄像头拉死

问题描述

在生产中遇到一个问题,I2C总是被拉死,SDA脚一直为低.

解决办法

通过log信息发现是摄像头拉死的,因为摄像头和tp在一根总线上,I2C被拉死后tp就没作用,在异常情况下拔掉摄像头就好了,推断是摄像头拉死的.
然后和FAE进行交涉后,我们把摄像头的pclk降低了进行验证,暂未发现问题.

具体修改是:

我们使用的gc2145摄像头
{0xf8 , 0x83},//0x84 -> 0x83
把0xf8寄存器的值0x84降低到0x83.如果有遇到这个问题的可以尝试一下是否OK
.

拓展知识

PCLK的获取
1.PCLK是由MCLK进行分频而来…
2.PCLK是个时钟,通过寄存器只能调节它的频率什么的,它是控制像素输出的一个时钟;
3.在曝光时间的算法中需要知道PCLK的值,是因为在sensor内没有时间观念,只有频率,所以在算曝光计算时需要将所要的曝光的秒数转换为曝光的clock数,同样的Clock数,在不同的频率下代表的时间是不同的,例如同样的1000个clock在12HZ和24HZ下代表的时间就差了二倍。而PClk的值一般是以提供给sensor的MCLK除以sensor内部除频后的值,而每个sensor的除频设计方式不太相同,所以需要对照datasheet才行。
4.我解释一下pll,PC-camera芯片晶振产生时钟,pll进行倍频输出MCLK给sensor,sensor再通过pll产生合适的PCLK,一般PC-camera芯片输出的MCLK是固定的几个值,而sensor这边输出的PCLK根据调节相应的寄存器在可以输出的值在一定范围内可随意调,sensor输出PCLK和曝光是两个独立的过程,对于曝光可以设置target值进行亮度调整,如果是非SOC sensor可以改变dummy line和dummy pixel来调节帧率,对于水波纹的消除可以根据PCLK可抑制消除,这样的PCLK有约束,如果真可输出频率范围内的频率输出则可以调节dummy pixel来消除。
5.MCLK = 倍率系数*Pclk MCLK是指芯片的主时钟,由BB提供,是CCM sensor的时钟源,MCLK由sensor处理后变成传输数据所需要的PCLK,PCLK指pixel采样的时钟

猜你喜欢

转载自blog.csdn.net/arunboy/article/details/100975534
I2C