Camera驱动Review
Copyright of土麦2014shuwdy@163.com
2014-5-4
一:硬件相关
1. Camera 模组的组成和工作原理:
镜头(lens),传感器(Sensor),镜像信号处理器(ISP)
1.1 镜头:将对景物生成光学图像,并且投射到图像传感器的表面上
1.2 传感器
Sensor将从lens上传导过来的光线转换为电信号,并通过IC内部的AD转换器转成电信号,最后将该信号送给ISP,还原影像。表面含有几十万到几百万的光电二极管,光电二极管受到光照将产生电荷,输出Raw data:
1.3 镜像信号处理器
对Raw data进行加工处理,然后以相应的IO接口输出给主机端:
1.4 Camera 原理
景物(scene)通过镜头(lens)生成光学图像,投射到图像传感
器(sensor)表面上,然后转为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(ISP)中加工处理,然后以相应的IO接口输出给主机端,最后手机端可以预览,拍照(Jpeg编码)和录像(video编码。
2. 高通平台端Camera模块组成
其中Microprocessor 负责对整个Camera应用的控制:
它可以从RAM获取被QDSP处理过的数据它可以访问MDP(Mobile Display Processor)要求图像在LCD上更新。
也可以通过串行接口控制Image Sensor。
最后,它能控制QDSP处理图像的过程。
CAMIF&VFE:
CAMIF由QDSP控制,主要实现高通芯片与camera的电气连接。
VFE(Video Front End) 通过CAMIF接收Sensor输入的数据,转换成编码器可以接受的格式。
Video Core: 由QDSP控制,主要为一些应用提供复杂算法。
MDP : 显示处理器,由Microprocessor控制, 用于实现与LCD显示相关的功能。
3. 数据流
VFE接收到数据后对数据的处理流程:
4. RGB&YUV色彩空间
RGB 色彩模式使用RGB模型,为图像中每一个像素的RGB分量分配一个0~255范围内的强度值。RGB图像只使用三种颜色,就可以使它们按照不同的比例混合,在屏幕上重现16777216种颜色
YUV: Y指亮度,U和V表示两个色度信号,它的特点是亮度和色度信号是分离的。
YUV<->RGB:
二:驱动软件相关
1. 在Kconfig 中加入配置信息:
在Makefile中添加编译命令:
2. 模块加载:
3. 注册i2c设备
4. Sensor_Probe函数的实现
第一部分:主要实现芯片的端口配置和Device ID 的确认:
4.1 其中rc = i2c_add_driver(&hi256_i2c_driver)完成i2c driver的注册:
4.2 hi256_probe_init_gpio(info) 中通过调用
gpio_request()和gpio_tlmm_config完成了对通用I/O端口的初始化和配置
4.3 hi256_power_on_seq()实现了Sensor的启动
对应的启动时序图:
4.4 static void hi256_power_off_seq()实现了Sensor的关闭:
对应的关闭时序图:
4.5 hi256_read_model_id() 读取了模组的ID:
第二部分 主要完成初始化和配置:
4.6 hi256_sensor_open_init() 通过调用
hi256_power_on_seq() 和hi256_sensor_setting()完成了Sensor的打开和设置
4.7 hi256_sensor_config()通过不同的cfgtype分别调用了以下主要函数进行配置:
case CFG_SET_MODE: hi256_set_sensor_mode 模式配置
case CFG_SET_EFFECT: hi256_set_effect 效果配置
case CFG_SET_BRIGHTNESS: hi256_set_brightness
case CFG_SET_CONTRAST: hi256_set_contrast
case CFG_SET_EXPOSURE_MODE: hi256_set_exposure_mode
case CFG_SET_SATURATION: hi256_set_saturation
case CFG_SET_SHARPNESS: hi256_set_sharpness
……
5. hi256_i2c_probe 的实现:
其中hi256_init_client的实现如下:
hi256_sysfs_add的实现如下:
Reference:
About Camera Driver
高通Camera Driver的调试小结
503Camera实现
……
Thanks!