文档章节

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

s
 sflfqx
发布于 2014/11/05 15:42
字数 1390
阅读 378
收藏 10

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


本文转载自:http://blog.csdn.net/qianjin0703/article/details/6738490

s
粉丝 42
博文 202
码字总数 0
作品 0
深圳
高级程序员
私信 提问
Android Camera 架构简析2

l 应用框架层 Camera框架层将应用与底层的实现隔离开来,实现了一套Android定义的对上对下接口规范,方便应用及底层硬件的开发和移植。这一层对上以Java类的形式包装出android.hardware.Came...

Jerikc
2012/09/03
0
0
高通Android平台硬件调试之Camera篇

1、Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信号,经过A/D(模数转...

ds1130071727
2018/05/07
0
0
Qualcomm Camera基础

高通将android的camera模块重新修改了一下,与原生的方式存在一些差异。这里将前段时间学习的一些零散知识进行一下总结,便于以后查阅。 1.整个模块主要巡行三个主线程:control、config及f...

sflfqx
2014/10/31
0
0
android camera(1)--- 高通平camera基本架构

1 camera基本代码架构 高通平台对于camera的代码组织,大体上还是遵循Android的框架:即上层应用和HAL层交互,高通平台在HAL层里面实现自己的一套管理策略;在kernel中实现sensor的底层驱动。...

天王盖地虎626
01/22
0
0
Qualcomm平台camera调试移植入门

1 camera基本代码架构 高通平台对于camera的代码组织,大体上还是遵循Android的框架:即上层应用和HAL层交互,高通平台在HAL层里面实现自己的一套管理策略; 在kernel中实现sensor的底层驱动...

sflfqx
2014/11/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式场景下如何保证消息队列实现最终一致性

考虑一个分布式场景中一个常见的场景:服务A执行某个数据库操作成功后,会发送一条消息到消息队列,现在希望只有数据库操作执行成功才发送这条消息。下面是一些常见的作法: 1. 先执行数据库...

中关村的老男孩
30分钟前
4
0
招银网络面试题、考点、知识点总结(Java岗)

java基础 全是基础不用多说肯定考的多,尤其是招银 OOP特性/java语言特性:封装、继承、多态 多态具体的表现:多态应用举例、如何调用父类方法(super)、重写和重载(重写父类方法的规则、构...

戎码益深
35分钟前
2
0
Mybatis深入源码分析之SQLSession一级缓存原理分析

源码分析图

须臾之余
39分钟前
2
0
成年人社交中的10个潜规则

前阵子我建议大家有空的时候,一定要去看《红楼梦》这本书。 原因就是从这本书,可以学习到很多很多人情世故,人情世故在学校里,老师几乎都不会教,所以我们只能靠自己去学。 只有自己去学了...

ZhangLG
41分钟前
4
0
在PyCharm中使用Pylint

简介 pylint是一个用于检查python代码中的错误,尝试强制执行编码标准的工具。它还可以查找某些类型错误,可以建议如何重构特定块的建议,并可以向您提供有关代码复杂性的详细信息。 官网:w...

哼_哼
41分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部