项目比较紧,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日 登陆服务器提交代码

Android高通平台调试Camera驱动全纪录的更多相关文章

  1. 高通平台启动log概述(PBL log、sbl1 log、kernel log)【转】

    本文转自:https://blog.csdn.net/RadianceBlau/article/details/78416776?utm_source=blogxgwz9 高通平台启动log概述(PB ...

  2. Android:高通平台性能调试

    1.GPU / CPU 信息打印脚本 gpu_cpu_info.bat @echo off echo "==================GPU====================== ...

  3. 高通平台手机开发之LCD

    4.1. LCD 参考文档: 1) 80-NA157-174_E_DSI_Programing_Guide_B-Family_Android_Devices.pdf 2) 80-NN766-1_A_L ...

  4. 高通平台点亮LCD个人总结

    点击打开链接 高通平台LCD模块大致分为两部分:KERNEL和LK.在进行点屏之前,应该认真查看LCD原理图,弄清楚LCD亮屏需要满足的条件和上电时序,同时可以跟LCD IC原厂拿到初始化代码. 首先 ...

  5. 高通平台如何避免误入FFBM模式

    前面两篇博客分别介绍了通过fastboot和QFIL工具退出FFBM模式的方法.虽然售后的同学可以这么指导用户做恢复,但步骤多操作也麻烦,且属于事后处理,如果大面积高概率地出现,会严重影响用户体验.这 ...

  6. 高通平台读写nv总结

    一,引言      1. 什么是NV       高通平台的NV,保存了系统运行过程中各个模块可能用到的一些参数值,它是以单个文件的形式保存在EFS中,但用户是不能随意访问的,只能通过QXDM来进行读 ...

  7. 高通平台读写nv总结【转】

    本文转载自:https://blog.csdn.net/suofeng12345/article/details/52713993 一,引言      1. 什么是NV       高通平台的NV,保 ...

  8. 高通平台打开 dynamic debug方法【学习笔记】

    一.首先在内核的配置文件添加如下的配置: CONFIG_DEBUG_FS=y CONFIG_DYNAMIC_DEBUG=y 二.找到自己平台对应的 device/qcom/xxxx/init.targ ...

  9. 高通平台获取secure boot,串号等状态

    adb shell下 运行./system/bin/r address 其中address对应各个flag参数的地址,具体如下: 无法打开/dev/mem节点(没有该节点),这时只需在内核配置中选上C ...

随机推荐

  1. 1.关于QT中json数据处理和密码md5加密

     新建一个Qt空项目 17Json.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += widgets gui MyWidget ...

  2. Servlet之Response对象

    下面的方法可用于在 Servlet 程序中设置 HTTP 响应报头.这些方法通过HttpServletResponse 对象可用. 1    String encodeRedirectURL(Stri ...

  3. 一个iOS6系统bug+一个iOS7系统bug

    先看实际工作中遇到的两个bug:(1)iPhone Qzone有一个导航栏背景随着页面滑动而渐变的体验,当页面滑动到一定距离时,会改变导航栏上title文本的颜色,但是有一个莫名其妙的bug,如下:

  4. Editorial Board 、co-editor、ediitor、editor-in-chief的区别

    昨天更新掘金APP-IOS之后发现一个比较严重的Bug,联系管理者报告了Bug,中途发现掘金的发布功能需要申请成为co-editor才行. 那么这里科普一下这几个名词: Editorial Board ...

  5. (NO.00005)iOS实现炸弹人游戏(九):游戏主角(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上篇介绍了游戏主角的初始化方法,下面我们一次来实现主角的其他方 ...

  6. mac os X下的updatedb

    unix或linux下使用locate指令在其数据库中查询文件,使用updatedb可以 更新locate的数据库.而在mac os X下却找不到updated这个程序.使用 man locate查看 ...

  7. (七十四)iOS8之前使socket可以后台运行的方法

    对于使用socket通信的应用程序,常常希望App位于后台时仍然可以进行网络通信,这在iOS8和以后的版本是被默认允许的,socket可以直接在后台运行,而对于iOS8之前的版本就不行,需要进行两步设 ...

  8. 【Vbox】centos虚拟机安装usb网卡驱动

    前面安装增强pack之后 usb设备是可以识别了,但是无法正常使用,应该是无线网卡驱动没有的原因. 查看usb设备 os:centos6.6 内核:2.6.32-504.el6.x86_64 [roo ...

  9. Unity插件 - MeshEditor(二) 模型网格编辑器(高级)

    源码已上传至github,并持续更新,链接请看底部.(本帖跟随github持续更新) 继先前的一篇MeshEditor之后,MeshEditor第二版发布,这次在先前的基础上加入了为模型新增顶点以及删 ...

  10. XML跨平台,你懂的

    XML跨平台,你懂的 [引子]       90后小妹,问我,"都说XML跨平台,偶真的,不理解.XML语言的这大优势,倒是深深记在脑海里了."      当然,偶立马应声答到,& ...