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 */ 裏,可以看到了有類似於如下的函數調用:

這裏就是根據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去調試、解決問題。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章