一.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加载的顺序改成一致。