系列文章
【Camera专题】I2C不通或地址读错总结
【Camera专题】概率性读不到id~二
上一篇文章总结了很多读不到id的经验,本文添加一下新的经验,遇到这样的问题都可以从这2篇文章中获取解决思路!
1.顺序影响
平台:qcom-429
上篇文章也讲过这个顺序的影响,是前后id的读取顺序和otp的加载顺序不一致,导致概率性读不到id的。
但是最近调试429新平台时,高通在点亮gc8034时,也遇到概率性读不到id的情况。后来和他们沟通,是两个sensor上电相互影响了。
//ov8856
<CameraModuleConfig>
···
<SensorName>ov8856</SensorName>
···
</CameraModuleConfig>
//gc8034
<CameraModuleConfig>
···
<SensorName>gc8034</SensorName>
···
</CameraModuleConfig>
按照高通的意思是,ov8856先上电,会影响到gc8034的上电,导致gc8034读不到id!
换一下顺序就可以了。
2.OTP上电影响
平台:8909
这个平台配OTP上电时序是在kernel的dtsi文件里配置的,
高通的文档配置如下:

qcom,cam-power-seq-cfg-val代表了上电时序,1表示拉高或者供电!
这里的上电时序:
dvdd拉高->avdd拉高->io拉高->设置mclk为24M->reset脚拉高->standby脚拉高
但是这里并没有配置下电时序,如果你跟踪源码,你会发现,
下电时序就是把qcom,cam-power-seq-cfg-va倒过来执行一遍。
下电时序是:
standby脚拉高->reset脚拉高->设置mclk为24M->io拉高->avdd拉高->dvdd拉高
这就有问题了,下电时相应的脚没有被拉低!
怎么优化呢?
以reset为例子吧,我们只讲一个脚,其他的类似!
eeprom0: qcom,eeprom@5a {
···
qcom,cam-power-seq-type =
"sensor_vreg","sensor_vreg","sensor_gpio", "sensor_gpio","sensor_gpio","sensor_clk";
qcom,cam-power-seq-val =
"cam_vdig",
"cam_vio",
"sensor_gpio_standby",
"sensor_gpio_reset",
"sensor_gpio_reset",
"sensor_cam_mclk";
qcom,cam-power-seq-cfg-val = <1 1 1 0 1 24000000>;
qcom,cam-power-seq-delay = <10 10 10 10 10 5>;
···
};
我们这里关键的点在哪里呢?
"sensor_gpio_reset",->0先拉低
"sensor_gpio_reset",->1在拉高
因此,
qcom,cam-power-seq-cfg-val = <1 1 1 0 1 24000000>;
这个配置对应的上电时序:
dvdd拉高->io拉高->reset脚拉低->reset脚拉高->standby脚拉高->设置mclk为24M
下电的时候,是反过来执行的,
下电时序为:
设置mclk为24M-standby脚拉高->reset脚拉高->reset脚拉低->io拉高->dvdd拉高
最终,reset脚会被拉低,这样reset脚就没问题了!
因此,概率性读不到id问题也可能跟这个有关系!
因为我们前后摄供电都是用的同一路供电,挂在相同的i2c总线上。
前摄 OTP下电是时候,如果reset脚还是一直拉高着,i2c总线会觉得前摄还在工作,
这时候代码跑到后摄otp上电了,就可能会导致i2c地址读错或者read_id failed!
3.高温条件影响
平台:8909
现象:放在高温箱里一段时间,拿出来第一次开机,点击camera,报错无法启动摄像头!
原因:
从log中看,kernel层读id是没有问题,出问题在于,user层 getNumberOfCameras cameraCount:0。
根源就是温度太高,cpu为了冷却下来,主动降频,反应变慢,hal层去读取sensor 的probe状态时,超时了,
MSM-SENSOR-INIT msm_sensor_wait_for_probe_done:53,导致获取摄像头数量为0.
kernel
<3>[ 28.940422] MSM-SENSOR-INIT msm_sensor_wait_for_probe_done:53 msm_sensor_wait_for_probe_done:53 wait timeout
user space
02-21 17:31:17.881 3094 3094 I CameraController: camera open failed,getNumberOfCameras cameraCount:0
解决方法:
static int msm_sensor_wait_for_probe_done(struct msm_sensor_init_t *s_init)
{
int rc;
--int tm = 10000;
++int tm = 20000;//延长超时时间
}
以上就是工作中遇到的 读不到id或者打不开camera问题。
继续当一名咸鱼(* ̄︶ ̄)!
网友评论