1. 程式人生 > >高通msm8926 camera除錯筆記

高通msm8926 camera除錯筆記

    前些天在除錯一組高通msm8926上的攝像頭,之前ov5648+imx135已正常的點亮了,但是後續需要一個mini配置版本的方案,需要相容ov2685+ov8865,於是先做好除錯的前期準備,跟攝像頭模組廠要模組spec和晶片的datasheet,先仔細閱讀一下ic的datasheet,並仔細檢視模組的打樣圖紙和模組spec,首先要確認的是ic的各路電壓是可以正常的供出,一般需要注意的就是DVDD,IOVDD,AVDD,還有STANDBY和RESET,這些管腳的連線要和主機板上相容,確保在硬體上主機板可以正常的相容攝像頭模組,我就開始被模組廠忽悠了,有一組DVDD電壓說是可以不用去供電,ic也可以正常工作,我閱讀ic的datasheet就發現不對,但是既然是模組廠已確認是可以相容的,我開始居然天真的被相信了!冋阿,善良程式猿的悲哀,太容易相信別人了,!

      模組廠提供了基本的ic驅動程式碼之後,首先需要在kernel中相容這組攝像頭,展訊去配置Camera的Kconfig和Makefile,以及sensorcfg就可以基本完成對新Camera senssor的相容,高通上處理就有些不一樣,由於目前高通平臺引入了裝置樹dts來配置核心資訊,關於裝置樹,各位童鞋可以檢視我的相關部落格-點選開啟連結去了解更多相關知識,首先是在裝置樹中配置Camera ic的i2c從地址晶片和各個控制管腳的gpio和e2prom的配置資訊,這個地方需要注意的是,模組手冊對這個從裝置地址沒有統一的寫法,有的給出8位地址,有的給出7位地址,一開始容易混淆。如果給出的是8位地址,那第8位是指Write-0或者Read-1,實際的I2C晶片地址是7位的,核心中配置的地址是真實地址,這個需要格外的注意,不然就會造成i2c不通,導致攝像頭驅動載入失敗。

   配置完相關資訊,開機進入攝像頭測試,發現攝像頭已停止,無法連線到裝置,抓取相關的核心log,發現是match id失敗,導致驅動載入不成功,這個我最開始懷疑的就是相關的電壓沒能正常起來,用電壓表,測起,發現電壓貌似正常,然後我再次懷疑是裝置的從地址有問題,跟模組廠再三確認,他們依舊說這個從地址是沒問題的,唉,這貨簡直是睜著眼睛說瞎話,眾所周知,ov的FAE非常難請來現場除錯,所以只能抄示波器自己先看看,果然示波器抓取驅動載入時的各路電壓貌似出了問題,雖然驅動上電這個過程非常的短暫,但是還是在數次的抓取中,終於成功抓到了這個開機載入驅動轉瞬即逝的上電時序波形,我再次分析一下這個載入驅動的log,log如下:

<6>[    4.582687] synaptics_rmi4_i2c 5-0020: fwu_read_f34_queries perm:1, bl:1, display:0
<3>[    4.594144] msm_camera_power_up type 2
<3>[    4.599995] msm_camera_power_up index 1
<3>[    4.602787] msm_camera_power_up type 2
<3>[    4.608830] msm_camera_power_up index 2
<3>[    4.611622] msm_camera_power_up type 2
<3>[    4.617866] msm_camera_power_up index 3
<3>[    4.620658] msm_camera_power_up type 2
<3>[    4.630691] msm_camera_power_up index 4
<3>[    4.633482] msm_camera_power_up type 1
<3>[    4.637215] msm_camera_power_up index 5
<3>[    4.641060] msm_camera_power_up type 1
<3>[    4.644768] msm_camera_power_up:1023 gpio set val 37
<3>[    4.655759] msm_camera_power_up index 6
<3>[    4.658573] msm_camera_power_up type 1
<3>[    4.662282] msm_camera_power_up index 7
<3>[    4.666102] msm_camera_power_up type 1
<3>[    4.669857] msm_camera_power_up index 8
<3>[    4.673654] msm_camera_power_up type 1
<3>[    4.677408] msm_camera_power_up:1023 gpio set val 37
<3>[    4.693360] msm_camera_power_up index 9
<3>[    4.696151] msm_camera_power_up type 1
<3>[    4.699907] msm_camera_power_up index 10
<3>[    4.703790] msm_camera_power_up type 0
<3>[    4.718602] msm_camera_power_up index 11
<3>[    4.721480] msm_camera_power_up type 3
<3>[    4.725312] msm_camera_power_up exit
<3>[    4.728945] msm_cci_irq:852 MASTER_0 error 10000000
<3>[    4.733666] msm_cci_i2c_read:426 read_words = 0, exp words = 1
<3>[    4.739474] msm_cci_i2c_read_bytes:504 failed rc -22
<3>[    4.744398] msm_camera_cci_i2c_read: line 53 rc = -22
<3>[    4.749454] msm_sensor_match_id: ov8865_q8v18a: read id failed
<3>[    4.755249] msm_sensor_check_id:1055 match id failed rc -22
<3>[    4.760824] msm_camera_power_down:1154
<3>[    4.764581] msm_camera_power_down index 0
<3>[    4.768552] msm_camera_power_down type 3
<3>[    4.772434] msm_camera_power_down index 1
<3>[    4.776427] msm_camera_power_down type 0
<3>[    4.791392] msm_camera_power_down index 2
<3>[    4.794358] msm_camera_power_down type 1
<3>[    4.798288] msm_camera_power_down index 3
<3>[    4.802256] msm_camera_power_down type 1
<3>[    4.817189] msm_camera_power_down index 4
<3>[    4.820213] msm_camera_power_down type 1
<3>[    4.824060] msm_camera_power_down index 5
<3>[    4.828076] msm_camera_power_down type 1
<3>[    4.831959] msm_camera_power_down index 6
<3>[    4.835951] msm_camera_power_down type 1
<3>[    4.845902] msm_camera_power_down index 7
<3>[    4.848890] msm_camera_power_down type 1
<3>[    4.852773] msm_camera_power_down index 8
<3>[    4.856766] msm_camera_power_down type 2
<3>[    4.866952] msm_camera_power_down index 9
<3>[    4.869942] msm_camera_power_down type 2
<3>[    4.876452] msm_camera_power_down index 10
<3>[    4.879527] msm_camera_power_down type 2
<3>[    4.885664] msm_camera_power_down index 11
<3>[    4.888740] msm_camera_power_down type 2
<3>[    4.894707] msm_camera_power_down exit
<3>[    4.897436] msm_sensor_platform_probe ov8865_q8v18a power up failed
<4>[    4.903675] ovti,ov8865: probe of 20.qcom,camera failed with error -22
<3>[    4.910245] ov8865_init_module:158 rc -19
<3>[    4.915152] msm_sensor_platform_probe called data c0e98778
<3>[    4.919663] msm_sensor_platform_probe pdev name (null)
<3>[    4.924760] msm_sensor_get_dt_data qcom,sensor-name ov2685, rc 0
<3>[    4.930771] msm_sensor_get_dt_data qcom,cci-master 0, rc 0
<3>[    4.936217] msm_sensor_get_sub_module_index:125 src_node NULL
<3>[    4.941968] msm_sensor_get_sub_module_index:141 eeprom src_node NULL
<3>[    4.948305] msm_sensor_get_sub_module_index:169 src_node NULL
<3>[    4.954014] msm_sensor_get_sub_module_index csiphy_core[0] = 1
<3>[    4.959851] msm_sensor_get_sub_module_index csid_core[0] = 1
<3>[    4.965469] msm_sensor_get_dt_data qcom,mount-angle 90, rc 0
<3>[    4.971135] msm_sensor_get_dt_data qcom,sensor-position 1, rc 0
<3>[    4.977014] msm_sensor_get_dt_data qcom,sensor-mode 1, rc 0
<3>[    4.982594] msm_sensor_get_dt_csi_data qcom,csi-lane-assign 4320, rc 0
<3>[    4.989102] msm_sensor_get_dt_csi_data qcom,csi-lane-mask 3, rc 0
<3>[    4.995157] msm_camera_get_dt_vreg_data qcom,cam-vreg-name count 3
<3>[    5.001343] msm_camera_get_dt_vreg_data reg_name[0] = cam_vdig
<3>[    5.007136] msm_camera_get_dt_vreg_data reg_name[1] = cam_vio
<3>[    5.012892] msm_camera_get_dt_vreg_data reg_name[2] = cam_vana
<3>[    5.018704] msm_camera_get_dt_vreg_data cam_vreg[0].type = 0
<3>[    5.024322] msm_camera_get_dt_vreg_data cam_vreg[1].type = 1
<3>[    5.029987] msm_camera_get_dt_vreg_data cam_vreg[2].type = 0
<3>[    5.035608] msm_camera_get_dt_vreg_data cam_vreg[0].min_voltage = 2050000
<3>[    5.042399] msm_camera_get_dt_vreg_data cam_vreg[1].min_voltage = 2800000
<3>[    5.049196] msm_camera_get_dt_vreg_data cam_vreg[2].min_voltage = 2850000
<3>[    5.055921] msm_camera_get_dt_vreg_data cam_vreg[0].max_voltage = 2050000
<3>[    5.062713] msm_camera_get_dt_vreg_data cam_vreg[1].max_voltage = 2800000
<3>[    5.069519] msm_camera_get_dt_vreg_data cam_vreg[2].max_voltage = 2850000
<3>[    5.076233] msm_camera_get_dt_vreg_data cam_vreg[0].op_mode = 200000
<3>[    5.082592] msm_camera_get_dt_vreg_data cam_vreg[1].op_mode = 0
<3>[    5.088493] msm_camera_get_dt_vreg_data cam_vreg[2].op_mode = 80000
<3>[    5.094724] msm_camera_get_dt_power_setting_data qcom,cam-power-seq-type count -22
<3>[    5.102345] msm_sensor_get_dt_data gpio count 2
<3>[    5.106795] msm_sensor_get_dt_data gpio_array[0] = 26
<3>[    5.111860] msm_sensor_get_dt_data gpio_array[1] = 35
<3>[    5.116863] msm_camera_get_dt_gpio_req_tbl cam_gpio_req_tbl[0].gpio = 26
<3>[    5.123565] msm_camera_get_dt_gpio_req_tbl cam_gpio_req_tbl[1].gpio = 35
<3>[    5.130249] msm_camera_get_dt_gpio_req_tbl cam_gpio_req_tbl[0].flags = 1
<3>[    5.136909] msm_camera_get_dt_gpio_req_tbl cam_gpio_req_tbl[1].flags = 0
<3>[    5.143617] msm_camera_get_dt_gpio_req_tbl cam_gpio_req_tbl[0].label = CAMIF_MCLK
<3>[    5.151082] msm_camera_get_dt_gpio_req_tbl cam_gpio_req_tbl[1].label = CAM_STANDBY
<3>[    5.158640] msm_camera_get_dt_gpio_set_tbl cam_gpio_set_tbl[0].gpio = 35
<3>[    5.165295] msm_camera_get_dt_gpio_set_tbl cam_gpio_set_tbl[1].gpio = 35
<3>[    5.172003] msm_camera_get_dt_gpio_set_tbl cam_gpio_set_tbl[0].flags = 0
<3>[    5.178684] msm_camera_get_dt_gpio_set_tbl cam_gpio_set_tbl[1].flags = 2
<3>[    5.185349] msm_camera_get_dt_gpio_set_tbl cam_gpio_set_tbl[0].delay = 1000
<3>[    5.192312] msm_camera_get_dt_gpio_set_tbl cam_gpio_set_tbl[1].delay = 4000
<3>[    5.199265] msm_camera_init_gpio_pin_tbl qcom,gpio-reset 35
<3>[    5.204797] msm_sensor_get_dt_actuator_data qcom,actuator-cam-name 0, rc -22
<3>[    5.211848] msm_sensor_get_dt_data:291 slave addr 78 sensor reg 300a id 2685
<3>[    5.218878] msm_sensor_get_dt_data qcom,misc_regulator (null), rc -22
<3>[    5.225280] msm_camera_power_up:959
<3>[    5.228782] msm_camera_power_up index 0
<3>[    5.232568] msm_camera_power_up type 2
<3>[    5.240940] msm_camera_power_up index 1
<3>[    5.243731] msm_camera_power_up type 2
<3>[    5.250775] msm_camera_power_up index 2
<3>[    5.253566] msm_camera_power_up type 2
<3>[    5.263427] msm_camera_power_up index 3
<3>[    5.266218] msm_camera_power_up type 1
<3>[    5.269976] msm_camera_power_up:1023 gpio set val 35
<3>[    5.280925] msm_camera_power_up index 4
<3>[    5.283716] msm_camera_power_up type 1
<3>[    5.287473] msm_camera_power_up:1023 gpio set val 35
<3>[    5.298422] msm_camera_power_up index 5
<3>[    5.301212] msm_camera_power_up type 0
<3>[    5.325996] msm_camera_power_up index 6
<3>[    5.328812] msm_camera_power_up type 3
<3>[    5.332624] msm_camera_power_up exit
<3>[    5.427310] msm_cci_i2c_read: wait_for_completion_interruptible_timeout 410
<3>[    5.527309] msm_cci_flush_queue:106 wait timeout
<3>[    5.530899] msm_cci_i2c_read_bytes:504 failed rc -110
<3>[    5.535916] msm_camera_cci_i2c_read: line 53 rc = -110
<3>[    5.541063] msm_sensor_match_id: ov2685: read id failed
<3>[    5.546247] msm_sensor_check_id:1055 match id failed rc -110
<3>[    5.551911] msm_camera_power_down:1154
<3>[    5.555665] msm_camera_power_down index 0
<3>[    5.559638] msm_camera_power_down type 3
<3>[    5.563521] msm_camera_power_down index 1
<3>[    5.567571] msm_camera_power_down type 0
<3>[    5.592458] msm_camera_power_down index 2
<3>[    5.595424] msm_camera_power_down type 1
<5>[    5.599370] fwu_start_reflash: Start of reflash process
  仔細分析log,發現i2c地址應該是有問題,報著試試的態度,對地址進行了移位,轉換成認為的真實地址,編譯程式碼發現,還是無法開啟裝置,仔細檢查原理圖和打樣圖紙,讓硬體把dvdd將上拉電阻接到一個PMIC的控制腳上,我想按照datasheet的上電時序再來一遍,編譯燒寫檔案,懷著忐忑的心情開啟攝像頭,居然亮了,著實激動了一把,我擦,坑爹的模組廠,差點害我放棄點亮這顆攝像頭了!

    後攝還是無法開啟攝像頭,參考上電時序和電路原理圖,將STANDBYf飛線到主機板上一個不用gpio,我按照上電時序修改poweron程式碼,也正常點亮了--至此,已基本完成了在高通msm8926上對ov2685+ov8865的相容!

得出的除錯經驗給大家分享一下:

1 Camera驅動載入失敗的原因大部分就是i2c和電壓不對,請確保這些是正常配置的。

2.仔細分析核心的除錯log,在關鍵的地方加除錯資訊,善用示波器和電壓表等輔助除錯裝置,分析失敗的根本原因

3 嚴格按照spec和datasheet,當然要確保你的資料是正確的,不要輕易的相信別人的資訊,特別是調試出現問題的時候,你需要逐步去排除各種可能的錯誤

  希望這些能幫到那些正在痛苦除錯的程式猿,大家共勉!

相關推薦

msm8926 camera除錯筆記

    前些天在除錯一組高通msm8926上的攝像頭,之前ov5648+imx135已正常的點亮了,但是後續需要一個mini配置版本的方案,需要相容ov2685+ov8865,於是先做好除錯的前期準備,跟攝像頭模組廠要模組spec和晶片的datasheet,先仔細閱讀一下i

平臺Camera錄影過程-- 資料流淺析

             Camera錄影的時候,採用了MediaRecorder,這裡是對Camera錄製過程中資料的流向做一個簡單的程式碼跟讀和分析,這邊是基於高通平臺,Android4.4原始碼:   &n

平臺Camera框架部分淺談--Camera C/S 的init流程

       瞭解的不夠深入,應用功能實現後,再回頭細看Camera框架時,還是有些地方沒能連通,在網上也找了一些文章結合程式碼來分析,不過能力有限,甚是痛苦。而且由於平臺不同,程式碼的具體流程還是有區別。       下

android lcd除錯 平臺lcd除錯深入分析總結(mipi和rgb介面)

    各位網友:最近發現我這篇文章轉載的到處都是,有的則以原創存在,轉載時請註明出處,還有文中錯誤的地方請指正!謝謝合作。      下面點lk方法適用於8660,8064。當然qrd則沒有那麼複雜。 一:點亮lcd in kernel 其實點亮lcd很簡單必須保證以後幾個步驟正確: 1:確認Lcd資訊所

MSM8909 CAMERA TUNING 基礎

轉載自:http://blog.chinaunix.net/uid-7213935-id-5750641.html 一. 重要概念:1.色溫所謂色溫,簡而言之,就是定量地以開爾文溫度(K)來表示色彩。英國著名物理學家開爾文認為,假定某一黑體物質,能夠將落在其上的所有熱量吸

平臺音訊除錯常見問題點歸納

以下是關於高通音訊除錯中遇到的一些常見問題點歸納,僅供參考,如有錯誤,請指正! 1、Audio EC-VOIP 軟體主要需要設定EC_REF(echo reference 訊號),在Audio HAL的platform.c中,確保VOIP所經過的程式碼通路呼

平臺 Camera基礎

1. 設定攝像頭方向 2. 開啟執行緒與預覽執行緒  3. 設定引數 4. Camera外設按鍵 5. 自動對焦

CAMERA 除錯

Camera sensor bring up 2016年08月12日 13:14:19 tamell5555 閱讀數:4083 標籤: android 眾所周知,camera在我們生活中應用十分廣泛,在未來智慧硬體社會,camera就是裝置的眼睛,它的

Camera 驅動除錯要點(一)

本文主要介紹QCOM camera除錯的重要引數; (1)Lane_assign 和lane_mask    現在攝像頭基本都是mipi介面型別,因為前後攝都對應到平臺這邊不同的mipi介面,相應的資料lane需要一一對應;   lane assign:   lan

Android平臺硬體除錯Camera

Camera工作流程圖Camera的成像原理可以簡單概括如下:景物(SCENE)通過鏡頭(LENS)生成的光學影象投射到影象感測器(Sensor)表面上,然後轉為電訊號,經過A/D(模數轉換)轉換後變為數字影象訊號,再送到數字訊號處理晶片(DSP)中加工處理,再通過IO介面傳輸到CPU中處理,通過DISPLA

攝像頭除錯(OV8856)

http://blog.chinaunix.net/uid-7213935-id-5749314.html 一.硬體分析 在除錯的時候,一定要拿到電路圖,模組規格書,SENSOR IC datasheet。 下面是主 camera 電路圖: 由上面電路圖我們看樣看出,此模組有以下主要線路: 1.

linux-uart筆記

概述 驅動: drivers/tty/serial/ msm_serial_hs_lite.c: 低速版本, 裝置樹內容配置為compatible = "qcom,msm-lsuart-v14"; msm_serial_hs.c: 高速版本,  裝置樹內容配置為com

camera模組驅動指南資料介紹

本資料提供了攝像機感測器和相關模組的驅動程式開發指南,並描述瞭如何在MSM 8909、MSM 8916、MSM 8992、MSM 8994和MSM8x36 Android平臺。 攝像機感測器框架包括以下元件的配置: Sensor CSIPHY CSID Camera Co

平臺新增或者移植一個完整的camera

OV8865 1、kernel部分: A、kernel_driver: 把驅動檔案ov8865_qtech_f8865ac.c 放到kernel/drivers/media/platform/msm/camera_v2/sensor/目錄下 B、kernel_dt

Camera驅動分析【轉】

1、Sensor slave配置 結構體msm_camera_sensor_slave_info定義在media/msm_cam_sensor.h中: struct msm_camera_sensor_slave_info { char sensor_name[32];

數字影象處理筆記(八):頻域濾波銳化影象

1 - 引言 在筆記(七)中,我們通過衰減影象的傅立葉變換的高頻成分來平滑物件,因為邊緣和其他灰度的急劇變化與高頻分量有關,所以影象的銳化可在頻域通過高通濾波來實現。 一個高通濾波器是從給定的低通濾波器用下式得到:

camera如何匹配I2C匯流排

1、dts配置 cci: qcom,[email protected] { compatible = "qcom,cci"; ... pinctrl-names = "cci_default

820(msm8996)camera hal原始碼分析

之前閱讀過高通的camera的v4l2的driver,和video codec的driver,還沒有分享出原始碼架構圖。現在首先先分享出camera hal的原始碼架構圖吧,高通的hal可以使用hal1和hal3. 一,在hardware/qcom/camera下是高通的c

平臺中gpio簡單操作和除錯

        做底層驅動免不了gpio打交道,所以對其操作和除錯進行了一下簡單的梳理 一、gpio的除錯方法         在Linux下,通過sysfs,獲取gpio狀態,也可以操作gpio。 1、獲取gpio狀態         cd /sys/kerne

Camera框架--資料流淺談01

    本文重點:stagefrightRecorder.cpp    OMXCodec.cpp   MPEG4Writer.cpp  CameraSource.cpp 之間的呼叫關係 =======================