android(MTK)驱动层读取摄像头ID失败问题

        因为我当前的平台是MT6737  android7.0,就以这个平台为例子做说明。

底层驱动读不到摄像头的ID,一般我们可以从以下这几个方面做检查。

1,首先我们要去检查硬件方面,多拿几个摄像头模组来做试验。因为会存在打样模组有问题的情况,在原理图上对清楚摄像头的各个脚是否都对应上了、模组是否都扣好等。这个是硬件上的。

2,第二个要检查的就是I2C地址是否正确,如MTK平台的基本都是以7位地址的方式操作的。即是会偏移一位的。最后是要看看模组的规格书,确认器件的I2C地址。

3,第三个就要看摄像头的上、下电时序这一块。如MTK平台的,它在这个文件里实现  :mt6737_65_a_n_mp1\kernel-3.18\drivers\misc\mediatek\imgsensor\src\mt6735\camera_hw\kd_camera_hw.c。不同厂家的模组它的上下电时序是有所差别的,其实在你为系统添加摄像头的时候这个上下电时序就要加进来了。同样,这个时序也是要参考模组规格书去写的。

4,如果以上的都检查完了,都OK。那我们就要检查CMMCLK了,一般会有两路CMMCLK。前后摄像头各走一路,我们要看看自己项目原理图上是前后摄分开走mclk的还是共用一路的。我们在kd_camera_hw.c这文件里的 kdCISModulePowerOn 和    else { /* power OFF */ 里,可以看到了有类似于如下的函数调用:

android(MTK)驱动层读取摄像头ID失败问题_第1张图片

这里就是根据pinSetIdx来打开或关闭MCLK1 或者 MCLK2。还有个地方要注意的,就是:mt6737_65_a_n_mp1\vendor\mediatek\proprietary\custom\mt6735\hal\D1\imgsensor_src\cfg_setting_imgsensor.cpp 。在这个文件里有个 MINT32  getSensorMclkConnection(EDevId const eDevId) 这个函数,要看看这里有没有被写成前后摄共用MCLK了。最好是用示波器去量过,确定它是有信号输出。

5,还有就是要用示波器量一下MIPI信号,看看主控有没有输入信号,以防万一。

6,如以上都检查完了,都没问题。但还是读ID失败的话,那我们就要看一下I2C的通道是否配置正确。因为主控一般都会有好几路I2C,完成了这6项的检查基本都会找到问题了,一定要配合抓串口log去调试、解决问题。

 

你可能感兴趣的:(android驱动开发)