高通msm8926 camera调试笔记
http://blog.csdn.net/fantasyhujian/article/details/38943639?utm_source=tuicool
前些天在调试一组高通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调试笔记相关推荐
- 高通平台Camera调试移植入门
camera基本代码架构 1.上层应用和HAL层交互,高通平台在HAL层里实现自己的一套管理策略.在kenrel中实现sensor的底层驱动.最核心的sensor端的底层设置.ISP效果相关代码单独进 ...
- 高通平台camera客观项测试之解析力均匀性
[高通平台camera客观项测试之解析力&均匀性] 一.IMatest界面 二.使用步骤 1.测解析力 举例说明,这里使用的是8M摄像头 需要拍摄的图卡:SFR解析力卡 数据:一般要读取中心 ...
- 高通平台Camera 框架简介
接触高通平台camera不长时间,了解的不够深入,下面个人所了解内容的是基于高通平台的camera,有的地方能描述不一定会很清楚,以后会慢慢补充! 一 框架介绍 Package -> Framw ...
- 高通平台camera 移植过程
1 camera基本代码架构 高通平台对于camera的代码组织,大体上还是遵循Android的框架:即上层应用和HAL层交互,高通平台在HAL层里面实现自己的一套管理策略:在kernel中实现se ...
- Android 10 高通 AF fullsweep 调试 指南
高通 AF tuning中的fullsweep 调试 指南 此操作的目的是为了确认马达工作 减少不必要的争议 开启 fullsweep & AF log adb root adb remoun ...
- linux 下camera调试笔记【转】
转自:https://blog.csdn.net/kevinx_xu/article/details/8801931 linux camera调试 2011-10-23 10:43:37| 分类: ...
- android lcd调试 高通平台lcd调试深入分析总结(mipi和rgb接口)
各位网友:最近发现我这篇文章转载的到处都是,有的则以原创存在,转载时请注明出处,还有文中错误的地方请指正!谢谢合作. 一:点亮lcd in kernel 其实点亮lcd很简单必须保证以后几个步骤正确: ...
- 高通平台camera客观项测试之色彩偏差白平衡饱和度
高通camera测试项之色彩篇 一.色彩还原度,饱和度,白平衡测试 二.使用步骤 1.拍图. 2.打开Imatest选择"ColorCheck"选项,导入图片后选择ROI 3.选定 ...
- 高通MSM8255 GPS 调试分析
没事做整理一下GPS的流程,也算给自己一个交代. 1.硬件抽象层: 高通MSM的硬件层代码在:hardware/qcom/gps/loc_api下,高通的GPS集成在baseband侧,与Modem部 ...
- 高通MSM8255 GPS 调试分析Android系统之Broadcom GPS 移植
http://blog.csdn.net/dwyane_zhang/article/details/6775738 没事做整理一下GPS的流程,也算给自己一个交代. 1.硬件抽象层: 高通MSM的硬件 ...
最新文章
- 重磅!单目深度估计方法:算法梳理与代码实现
- 【祝贺】norains同志在这里开《Windows CE大排档》书友会
- P7044-[MCOI-03]括号【组合数学】
- UVA 10635——Prince and Princess
- php自动按天清空库存,swoole+PHP实现自动取消订单,还原库存等操作
- 扫描仪twain驱动是什么_建湖扫描仪卡纸一般多少钱
- python导入模块中的对象_详解Python项目开发时自定义模块中对象的导入和使用
- Atitit 健康减肥与软件健康减肥的总结 attilax著 1. 几大最佳实践减肥行为	1 1.1. 控制饮食分量用小碗 小盘子 小餐具	1 1.2. 软件如何减肥,控制资源占有率,比如体积 打包
- 地理信息系统(汤国安)重点整理与推导(第三章)
- RS-485接口详解
- R语言常用的绘图参数
- 路由器技术彻底解决路由器IP地址冲突问题
- 类似于android短信校验码的demo
- 硬盘安装linux系统步骤分区,Linux系统“分区”方法再谈安装!(一)
- _3_body_标签
- 手把手教你Photoshop蒙版的使用(二)
- 浅谈NLM非局部均值滤波
- 计算机应用基础商娟叶,探究混合式学习在中职计算机基础教学中的设计与应用...
- 服务器搭建网站:出现503是什么意思?怎么排查?
- 创新的边界——记MAD Catz的倒闭