请把Camera hold住 - Android高通平台调试Camera驱动全纪录

项目比较紧,3周内把一个带有外置ISP,MIPI数据通信,800万像素的camera从无驱动到实现客户全部需求。

1日 搭平台,建环境,编译内核,烧写代码。

我是一直在Window下搭个虚拟机登服务器搞开发的,对Linux系统环境实在无爱,每每一到项目刚开始要搭环境了,内心总有点排斥,过程就比较纠结,看来以后还是要搞个linux真机玩玩。

2日 编写camera驱动大致框架,配置GPIO,I2C,MIPI,电压,时钟等。
很少能碰到FAE只给硬件手册,没有Linux和Android驱动的。因为是camera sensor外接ISP芯片,杯具就发生了。整个系统是这样,高通平台的开发板,自己写驱动来控制ISP芯片,ISP芯片与camera sensor封装在一起,ISP控制sensor,实质就是sensor写寄存器。

            
  开始写驱动了,说好听的那是站在巨人的肩膀上借鉴别的驱动,说难听的就是照葫芦画瓢,反正再改下Kconfig, Makefile,这驱动框架就算是有了。
  对驱动开发而言,前期的主要工作应该就是配置GPIO口和芯片上电时序了。

        
每个特定平台在操作GPIO,电压,时钟上都会有自己的一套内核API封装实现,只要能看懂会用这些API即可。配置完后,须在驱动初始化函数里,正确设置芯片的上电时序,确保芯片硬件上能正常工作起来。

3日 编写I2C通信的封装函数,调试CPU与ISP间的I2C通信

对于一些成熟方案,上面的工作完成顺利的话,驱动就差不多了。。很可惜,这块ISP芯片在提升800万camera性能的同时,并没有给我带来足够多的技术支持,只能说,成也ISP,败也ISP,解决方案全都自己来吧。万里长征第一道坎便是I2C。

I2C通信本身要注意两点,

1) SDA第9位ACK位为低时说明从设备有响应。

2) Slave address

芯片手册对这个从设备地址没有统一的写法,有的给出8位地址,有的给出7位地址,一开始容易混淆。如果给出的是8位地址,那第8位是指Write- 0或者Read-1,实际的I2C芯片地址是7位的。Linux源码里struct i2c_board_info的板基信息应填写7位I2C地址,另外,I2C芯片地址可以通过开发板shell环境下$ ls /sys/bus/i2c/devices/ 查看。举个例子,

static struct i2c_board_info msm_camera_boardinfo[] __initdata = {
 {
  I2C_BOARD_INFO("ov8820", 0x78 >> 1),
 },

4日 FAE现场支持

FAE过来了,就确认了一件事,没有现成驱动了,我彻底死心了。后来还发现一个规律,只要FAE来现场那就意味着啥都搞不出来了。。几个人汇聚思想还不如一个人静下心来研究。不过他们此行至少留下一份重要的资料-ISP芯片指令序列,camera所有功能的实现就靠它了。

5日 调通I2C

I2C的调通具有里程碑式的意义,它不仅标志着硬件性能正常开启,更为后来璀璨绚烂的camera世界奠定了坚实的基础。。

有段时间卡在I2C 通信上,给ISP芯片0x3c写入开启芯片命令0xf0成功,但是再发送其他命令全部失败。

分析现象,I2C总线已经可以通信了,问题只能是在ISP芯片上,于是,查电路图,抄家伙起来把电路板上的电和时钟全部再量一遍。。

    

结果发现,有一路来自自动对焦马达的电压只有1.7V,没有达到要求,驱动里没有把它的GPIO拉高,导致芯片无法正常开启工作。

6日 编写预览驱动,测量MIPI数据

根据葵花宝典里的ISP指令序列,在Linux驱动里和Android高通抽象层里填写相关代码,便可实现预览功能。不过很不幸,光靠那两下子预览 还是出不来的。开启预览程序时,用示波器量MIPI总线上的图像数据,能够得到理想的MIPI波形,说明底层驱动的预览功能OK,问题在于高通平台的 CAMIF VFE上,于是,翻阅高通的技术资料,学习添加VFE的一些配置。

7日 配置VFE,点亮预览

预览的成功具有划时代的意义,它不仅标志着camera模块在整个Android系统架构中的成型,更为后来的拍照,录像,图像效果等功能奠定了坚 实的基础。预览的出现,意味着我不用再回答那些类似像“camera亮没”之类的只注重表面现象的问题,从那一刻起,我仿佛站上了另一个高度,有种梦回汉 唐的感觉。。

    

8日 健壮代码,编写拍照功能,对焦功能

至此,整个camera模块从上层应用到底层驱动已全部打通,接下来就可以见神杀神,见佛杀佛了。。

9日 编写白平衡,色彩效果,场景模式,ISO,防震,闪光灯等功能

这年头码农伤不起啊!就按葵花宝典上的ISP指令序列往里使劲填充。

10日 登陆服务器提交代码

时间: 2024-10-21 14:14:54

请把Camera hold住 - Android高通平台调试Camera驱动全纪录的相关文章

教你去除开机root字样(酷派大神F2、酷派高通平台手机)

有必要再一次强调:刷机有风险,需慎重! 首先说说酷派高通平台去除root字样的方法:         给酷派手机刷过机的朋友是否会遇到这样的问题--酷派手机root之后每次在开机的时候在屏幕下方都会出现"root"的字样,这个字样是任何卡刷.线刷都无法去除的印记,它的作用并不是提示用户已经获取root权限.而是以此来提示售后点这台机子是root过的,这样的话机子很有可能就会丧失保修资格.虽然酷派说root后也有保修,不过真正到了售后那里...呵呵~(如此的音容笑貌,自己体会) 此去除r

最新的高通平台驱动开发参考文档

花了很多大功夫才得到这最新的高通平台驱动开发参考文档,毕竟完整的文档比较难找,同时也希望能帮到大家,现在无偿分享,希望志同道合的人能够一起学习,这文档我上传到闯客网技术论坛,更多高通芯片的资料都有,有兴趣的小伙伴可以到上面下载,同时这是我们的高通交流群:613377058,让我们一起同行下载地址:https://bbs.usoftchina.com/thread-199500-1-1.html 简介目录最新的高通平台驱动开发参考文档第1章 前言? ?? ???31.1 文档目的及开发背景? ??

做高通平台安卓驱动感言

第二次写这类博客,之前还是求职期间写的面试之类的经历. 不知不觉做驱动再过2个月就3年了,可以说这3年学习到的很多,老大或者同事们的指教,针对性通过百度等搜索等,还有就是自己一边工作一边自己研究到的.知识,解决问题的能力也是慢慢积累起来的.这二年多来一直在做驱动,由开始开始接触调试LCD TP等等,每次会重复做事,但是自己学习到的也很多,学会分析关键问题,掌握一些驱动调试方法,其实调试驱动来说一个printk真的够了,再强大不过了,调试过高通modem侧代码后发现kernel是多么好调试.再调试

高通平台故障分析总结

Paging Cycle in GSM refer to https://qualcomm-cdmatech-support.my.salesforce.com/50130000000Sh0L?retURL=%2Fui%2Fsolution%2FSolutionBrowserPage%3Fcid%3D02n30000000DYIn Question: What is a paging cycle ? How do we determine the value of the paging cycl

高通平台常用缩写

高通的MSM是mobile station modems . 移动基带处理器.带基带的手机处理器. QRD就是高通参考设计(Qualcomm Reference Design) PBL:APPS PBL(Application Primary Boot Loader),主引导加载程序 RPM:Resource Power Manager,资源电源管理器 RPM(Resource Power Manager)是高通MSM平台另外加的一块芯片,虽然与AP芯片打包在一起,但其是一个独立的ARM Cor

高通平台抓取ramdump文件

准备版本文件 准备一个具有root权限的版本,该版本需要保留symbols文件夹 将版本刷入手机中,并开机正常. 刷入debugpolicy 将手机连接到Ubuntu电脑上,确定adb可以正常获取设备 执行代码中的 python vendor/xiaomi/securebootsigner/Qualcomm/tools/debugpolicy.py 执行脚本完成后,手机会自动重启 开启手机的download模式 待手机重启完毕后,执行如下的命令(注意:每次重新启动手机后,都需要执行该操作) ad

分享高通平台刷版本简单的一个shell脚本

#!/bin/shadb wait-for-deviceadb reboot bootloaderecho "start download"wait 5sudo fastboot flash boot boot.imgecho "\n"sudo fastboot flash system system.imgecho "\n"sudo fastboot flash userdata userdata.imgecho "\n"s

Android : 高通平台Camera调试

相关平台信息:[SDM845/670] 1.AF调试部分 (1)通过属性控制: --AF Log控制--setprop persist.vendor.camera.logInfoMask 0x8000000 //AF info level log setprop persist.vendor.camera.logVerboseMask 0x8000000 //AF verbose level log --禁用深度焦点指示--setprop persist.vendor.camera.af.dep

Hold住你的时间

时间是这个世界上,最宝贵的财富.每个人都应该知道,但是回想自己每天的时间,却发现做的事寥寥无几,我们的时间从哪溜走了?? [时间都是怎么浪费的] 以下是你必须要知道的真相 1.平均每八分钟会受到一次打扰 2.平均每次打扰用时大约是五分钟,总共大约四小时. 3.如果你让自己一天做一件事情,你会花一整天去做: 4.如果你让自己一天做二十件事情,则会完成七至八件甚至更多. 5.一年之中,你真正在做有价值的事情的时间不会超过九十天. 6.三年前,如果你好好的规划一下你的人生和时间: 7.你能够取得一定是