美文网首页
【Camera专题】概率性读不到id~二

【Camera专题】概率性读不到id~二

作者: c枫_撸码的日子 | 来源:发表于2019-09-30 11:00 被阅读0次

系列文章
【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问题

继续当一名咸鱼(* ̄︶ ̄)!

Stay Hungry,Stay Foolish!

相关文章

网友评论

      本文标题:【Camera专题】概率性读不到id~二

      本文链接:https://www.haomeiwen.com/subject/uhjcpctx.html