【Camera专题】I2C不通或地址读错总结

一.I2C地址不通

平台:高通 msm8909(wear2001)
最近遇到I2C地址不通问题,通信失败,导致摄像头无法点亮。
分析方法:
1.硬件层面

  • 确认硬件是否有问题,我们遇到模组厂给的sensor,dvdd和avdd本身短路了,导致打不开。
  • 我们有遇到一开始能用,后来就突然用不了,开机有时候读得到id,有时候读不到id,开机启动后,即使开机读id没问题,启动时偶尔也读不到id,用手折弯fpc或者按压金手指的位置,预览界面就卡死,id也读不到,需要重新插拔才行。
    原因:按压时fpc短路了,fpc有问题
  • 模组受压,有些机器,我们发现松一下螺丝,重新开关机I2C通信就正常了,和硬件确认,FPS或者某个地方受压了,导致I2C读不通,这个经验很重要。

2.软件层面

  • 检查软件上电时许是否符合规格书[data sheet]的要求
    上电时序
  • 检查i2c地址是否有冲突:比如2颗sensor的地址都为0x2c,这就有问题了。

二I2C地址读错总结

最近遇到一个比较奇葩的问题:
我们kernel层加了后摄的otp后,会出现某些机器概率性前摄ID读错问题,otp读出来的数据也全是0。
dtsi文件关于otp的修改

eeprom0: qcom,eeprom@5a {
        cell-index = <0>;
        reg = <0x5A>;
        qcom,eeprom-name = "sunwin_s5k4h7";
        compatible = "qcom,eeprom";
        qcom,slave-addr = <0x5A>;
        qcom,cci-master = <0>;
        qcom,num-blocks = <2>;

        qcom,page0 = <1 0x0A02 2 0x15 1 1>;/*set the page21 of otp*/
        qcom,poll0 = <0 0x0 1 0x0 1 1>;
        qcom,mem0 = <0 0x0 1 0x0 1 1>;
    
        qcom,page1 = <1 0x0A00 2 0x0100 2 1>;/*OTP enable and read start*/
        qcom,poll1 = <0 0x0 1 0x0 1 1>;
        qcom,mem1 = <60 0x0A04 2 0x0000 2 1>;

        cam_vio-supply = <&pm8916_l10>;
        cam_vaf-supply = <&pm8916_l11>;
···
}

报错log如下:

//id读错
	Line 1875: <3>[   12.086195] msm_sensor_match_id: sensor_id_reg_addr=300b: 
	Line 1876: <3>[   12.086206] msm_sensor_match_id: read id: 0x274 expected id 0x5675:
	Line 1877: <3>[   12.086214] msm_sensor_match_id chip id 274 does not match 5675
//otp读错
<3>[    1.470158] memory_data[0] = 0x0
<3>[    1.470179] memory_data[1] = 0x0
<3>[    1.470188] memory_data[2] = 0x0
<3>[    1.470197] memory_data[3] = 0x0
<3>[    1.470206] memory_data[4] = 0x0
<3>[    1.470215] memory_data[5] = 0x0
<3>[    1.470223] memory_data[6] = 0x0
<3>[    1.470233] memory_data[7] = 0x0
<3>[    1.470242] memory_data[8] = 0x0
<3>[    1.470251] memory_data[9] = 0x0
<3>[    1.470260] memory_data[10] = 0x0
···
<3>[    1.470260] memory_data[256] = 0x0

分析:
在这里插入图片描述
在这里插入图片描述

i2c通信时ok的,但是就是读错了,肯定是读到某个地址的值了,所以id没读对,移除dtsi后摄的otp修改,
就能读对。
可以确认的是加了后摄的otp导致的。
需要注意的是,otp是烧录在sensor里面的,也同样和camera一样要上的,上电时序和camera一致,
因此在读取前摄的时候,读错成了后摄的地址,导致读成0x274.
解决:
vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/module/sensor_init.c

-  "ov5675_back",
-  "s5k4h7",\
+  "s5k4h7",\
+  "ov5675_back",

把camera加载的顺序和otp加载的顺序改成一致。

Stay hungry,Stay foolish!

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值