camera驱动概述
1 概述
camera模块是经常进行调试修改的模块,所以熟悉camera的工作流程以及工作原理将会大大的提供工作效率,但对于整个android系统camera是个十分复杂的模块,下面只是对camera的驱动加载进行分析。
2 名词释义
2.1 四个供电
- a) VCAMD 就是DVDD数字供电,DVDD电压用CAMERA_POWER_VCAM_D表示;
- b) VCAM_IO 就是 VDDIO 数字 IO 电源主要给 I2C 部分供电,VDDIO 电压用CAMERA_POWER_VCAM_D2表示;
- c) VCAMA 就是 AVDD 模拟供电,AVDD 电压用CAMERA_POWER_VCAM_A表示;
- d) VCAM_AF 是对 Camera 自动对焦马达的供电,DVDD电压用CAMERA_POWER_VCAM_A2表示。
2.2 Sensor Input 部分
- a) Reset 信号,用于复位、初始化。
- b) Standby/PowerDown 信号,用于进入待机模式,降低功耗。
- c) Mclk,即 MasterClock 信号,是由 BB 端提供。
2.3 Sensor OutPut 部分
- a) Pclk,即 PixelClock 信号,由 MCLK 分频得到,作为外部时钟控制图像 传输帧率;
- b) HSYNC,行同步信号,其上升沿表示新一列行图像数据的开始;
- c) VSYNC,帧同步信号,其下降沿表示新的一帧图片的开始;
- d) D0-D9 一共 10 根数据线(8/10 根等)。
2.4 I2C 部分
Camera也是挂载在I2C总线上的设备,主要利用I2C总线对寄存器进行一些读写,与其他该做在I2C总线上的设备一样,这部分就两根线SCL和SDA:
- SCL,I2C 时钟信号线和
- SDA,I2C 数据信号线。
3 Camera基本架构
上图的架构相信大家都有了一定的了解,android 将系统大致分为应用层、库文件和硬件抽象层、Linux 内核三层。在底层的内核空间,Camera 的 driver 将其驱动起来以后,将硬件驱动的接口交给硬件抽象层,android 上层的 Camera 应用程序在 android 实时系统中的虚拟机中,加载 android 留给 Camera 公用的一些库文件,调用硬件抽象层的接口来控制 Camera硬件来实现功能。当然,如果是 Raw 模式的 Camera,还需要在硬件抽象层调用一些参数来控制 Camera 的效果。Kernel 部分主要有两块:一块是image sensor 驱动,负责具体型号的sensor 的id 检测,上电,以及在preview,capture,初始化,3A 等等功能设定时的寄存器配置。另一块是isp driver,通过DMA 将sensor 数据流上传。HAL 层这边主要分3 块,一块是imageio,主要是数据buffer 上传的pipe。一块是drv,包含imgsensor 和isp 的hal 层控制。最后是feature io,包含各种3A 等性能配置。
4 总结
我们简单地了解Camera相关名词,后面我们将一起来分析camera驱动模块加载,总线、设备、驱动之间的联系。因本人是刚开始写博客,不足之处,还望海涵。另外特别期待大家一起进行技术交流。