MTK平台camera摄像头调试教程.docx
- 文档编号:27337895
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:36
- 大小:1.23MB
MTK平台camera摄像头调试教程.docx
《MTK平台camera摄像头调试教程.docx》由会员分享,可在线阅读,更多相关《MTK平台camera摄像头调试教程.docx(36页珍藏版)》请在冰豆网上搜索。
MTK平台camera摄像头调试教程
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
MTK平台CAMERA驱动浅析
CameraDriveranalysisintheplatformofMTK
DocumentNumber:
Preliminary(Released)Information
Revision:
0.1
ReleaseDate:
GhongConfidential
Revision0.1-Feb.142012
-1-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
RevisionHistory
Revision
Date(dd/mm/yyyy)
Author
Comments
0.1
14/02/2012
GuoqingZhang
DraftVersion
GhongConfidential
Revision0.1-Feb.142012
-2-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
Contents
一、
.
-
二、
.
-
三、
.
-
四、
.
-
五、
.
-
、
.
-
、
.
-
、.
-
、.
-
六、
.
-
七、
.
-
、
.
-
、
.
-
、
.
-
、
.
-
、
.
-
、
.
-
八、
.
-
)
.
-
)
.
-
)
.
-
九、
.
-
十、
.
-
GhongConfidential
Revision0.1-Feb.142012
-3-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
一、手机Camera的物理结构:
FPC:
FlexiblePrintedCircuit可挠性印刷电路板
Sensor:
图象传感器
IR:
红外滤波片
Holder:
基座
Lens:
镜头
二、Camera的成像原理:
景物通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为模
拟的电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片
(DSP)中加工处理,再通过IO接口传输到CPU中处理,通过LCD就可以看到图像了。
GhongConfidential
Revision0.1-Feb.142012
-4-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
图像传感器(SENSOR)是一种半导体芯片,其表面包含有几十万到几百万的光电二极
管。
光电二极管受到光照射时,就会产生电荷。
目前的SENSOR类型有两种:
CCD(ChargeCoupleDevice),电荷耦合器件,它是目前高像素类sensor中比较成熟
的成像器件,是以一行为单位的电流信号。
CMOS(ComplementaryMetalOxideSemiconductor),互补金属氧化物半导体。
CMOS
的信号是以点为单位的电荷信号,更为敏感,速度也更快,更为省电。
ISP的性能是决定影像流畅的关键,JPEGencoder的性能也是关键指标之一。
而JPEG
encoder又分为硬件JPEG压缩方式,和软件RGB压缩方式。
DSP控制芯片的作用是:
将感光芯片获取的数据及时快速地传到baseband中并刷新感
光芯片,因此控制芯片的好坏,直接决定画面品质(比如色彩饱和度、清晰度)与流畅度。
三、Camera常见的数据输出格式:
常见的数据输出格式有:
Rawdata格式、YUV格式、RGB格式。
RGB格式:
采用这种编码方法,每种颜色都可用三个变量来表示红色、绿色以及蓝色
的强度。
每一个像素有三原色R红色、G绿色、B蓝色组成。
YUV格式:
其中“Y”表示明亮度(Luminance或Luma),就是灰阶值;而“U”和“V”表示色度
(Chrominance或Chroma),是描述影像色彩及饱和度,用于指定像素的颜色。
RAWDATA格式:
是CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理
而得到的。
支持YUV/RGB格式的模组,一般会在模组上集成ISP(ImageSingleProcessor),经过
A/D转换过的原始数据经过ISP处理生成YUV标准格式传到BB。
一般来说,这种设计适用于低像素Camera的要求,会在主板上省去一个DSP,可降低成本。
在调试过程中,
YUV/RGB格式的摄像头,其所有参数都可在kernel层通过寄存器来控制。
调试一般由sensor
的原厂支持。
支持RawData格式的模组,由于感光区域的需求,不会再模组内集成ISP以最大程度的增大感光区域的面积,提高照片质量。
模组把原始的数字信号传给BB上的DSP进行处理,MTK自带的DSP一般包含ISP、JPEGencoder、和DSP控制芯片。
在调试的时候图像
的效果需要MTK在HAL层的参数进行支持。
GhongConfidential
Revision0.1-Feb.142012
-5-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
四、阅读Camera的规格书(以Truly模组OV5647_Raw为例):
GhongConfidential
Revision0.1-Feb.142012
-6-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
五、Camera的硬件原理图及引脚
(以W19S项目MainCameraOV5647为例):
从上面可看出,连接Camera的30根Pin脚可大致分为以下几类:
1、电源部分:
a)VCAMD就是DVDD数字供电,主要给ISP供电,由于RAWDATA格式的sensor其ISP是在BB端,所以将其引脚将其NC。
从上面的规格书上可以看出DVDD是内部BB端供电。
模组已将其NC掉了;
b)VCAM_IO就是VDDIO数字IO电源主要给I2C部分供电;
c)VCAMA就是AVDD模拟供电,主要给感光区和ADC部分供电;
d)VCAM_AF是对Camera自动对焦马达的供电。
2、SensorInput部分:
a)Reset信号,用于复位、初始化。
b)Standby/PowerDown信号,用于进入待机模式,降低功耗。
c)Mclk,即MasterClock信号,是由BB端提供。
3、SensorOutPut部分:
a)Pclk,即PixelClock信号,由MCLK分频得到,作为外部时钟控制图像传输帧率
b)HSYNC,行同步信号,其上升沿表示新一列行图像数据的开始。
c)VSYNC,帧同步信号,其下降沿表示新的一帧图片的开始。
d)D0-D9一共10根数据线(8/10根等);
4、I2C部分:
SCL,I2C时钟信号线和SDA,I2C数据信号线。
GhongConfidential
Revision0.1-Feb.142012
-7-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
六、MTK平台Camera驱动架构:
上图的架构相信大家都有了一定的了解,android将系统大致分为应用层、库文件和硬
件抽象层、Linux内核三层。
在底层的内核空间,Camera的driver将其驱动起来以后,将硬
件驱动的接口交给硬件抽象层,android上层的Camera应用程序在android实时系统中的虚
拟机中,加载android留给Camera公用的一些库文件,调用硬件抽象层的接口来控制Camera
硬件来实现功能。
当然,如果是Raw模式的Camera,还需要在硬件抽象层调用一些参数来
控制Camera的效果。
GhongConfidential
Revision0.1-Feb.142012
-8-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
七、MTK平台Camera相关代码文件(以下代码均为MTK6575平台):
1、CameraSensor驱动相关文件
2、SensorID和一些枚举类型的定义
3、Sensor供电
4、KernelSpace的SensorList,imgsensor模块注册
GhongConfidential
Revision0.1-Feb.142012
-9-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
5、UserSpace的SensorList,向用户空间提供支持的SensorList
6、Sensor效果调整的接口
GhongConfidential
Revision0.1-Feb.142012
-10-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
八、Camera模块驱动、设备与总线结构:
一般在Linux设备驱动模型中,我们只需要关心总线、设备、驱动这三个实体。
总线会
充当红娘对加载于其上的设备与驱动进行配对,对于Camera模块也不例外,下面从总线、
设备、驱动的角度来分析Camera模块驱动的注册、匹配与加载过程。
a)驱动的注册:
在(\custom\common\kernel\imgsensor\src\Kd_sensorlist.c)CAMERA_HW_i2C_init这个
函数里通过Platform_driver_register(&g_stCAMERA_HW_Driver)把Camera模块驱动注册到Platform总线上。
而g_stCAMERA_HW_Driver是对结构体Platform_driver这个结构体的
填充。
(Kernel\include\linux\Platform_device.h)
Platform_driver这个结构体包含Probe()、Remove()等函数来完成驱动的填充。
b)设备的注册:
对platform_device的定义通常在BSP的板级文件:
(kernel\arch\sh\boards\mach-ap325rxa\Setup.c)中实现,在板级文件中,将platform_device
归纳为一个数组,最终通过platform_add_device()函数统一注册:
GhongConfidential
Revision0.1-Feb.142012
-11-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
c)总线的匹配:
既然是驱动Platform_device那对应的设备必然是挂载Platform总线上的
Platform_device,Platform总线是Linux系统提供的一种机制,不同于I2C、I2S等总线,它是一种虚拟的总线。
Linux系统为Platform总线定义了一个bus_type的实例Platform_bus_type:
(Kernel\drivers\base\platform.c)
Platform总线通过platform_match这个成员函数来确定platform_device与platform_driver如
何进行匹配:
GhongConfidential
Revision0.1-Feb.142012
-12-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
九、Camera驱动工作流程:
下载Capture下载Preview
PowerOn参数为拍照
参数为预览做准备做准备
Power
Off
IIC
INIT
Reset
软件Reset
PDN
读ID
判断是否连
接到需要的
Sensor
从上图可以清晰的了解到Camera的一个工作流程主要分为这么七步:
1.打开CameraPowerLDO,让Camera有能量保证。
2.打开IIC,设置PDN引脚,使Camera退出出Standby模式,按照要求让Reset脚
做一个复位动作。
3.读一下sensor的版本ID,这样可以让你确认是否连接上你想要的sensor。
4.对Sensor进行初始化下载最基本的参数让Sensor工作起来,可能包括软复位。
5.下载preview的参数,为预览动作准备。
6.下载Capture的参数,为拍照动作准备。
7.设置PDN引脚,使Sensor进入Standby模式,或者关掉LDO等动作,退出Camera。
我们都知道,Linux内核是通过模块的机制来加载设备驱动的,那么接下来我们就从设
备模块加载的角度来看下Camera工作流程的驱动代码是如何工作的。
在-alps\mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.c中可以看到:
module_init(CAMERA_HW_i2C_init);
module_exit(CAMERA_HW_i2C_exit);
在这里Linux内核加载和卸载Camera模块。
GhongConfidential
Revision0.1-Feb.142012
-13-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
staticstructplatform_driverg_stCAMERA_HW_Driver={
.probe=CAMERA_HW_probe,
.remove=CAMERA_HW_remove,
.suspend=CAMERA_HW_suspend,
.resume=CAMERA_HW_resume,
.driver={
.name="image_sensor",
.owner=THIS_MODULE,
}
};
Camera模块初始化开始向总线注册驱动,在Platform_driver的成员函数.probe()中,通
过i2c_add_driver(&CAMERA_HW_i2c_driver)向I2C申请,而CAMERA_HW_i2c_driver这
个结构体里填充的是将Camera作为一个字符设备在I2C上进行注册:
在RegisterCAMERA_HWCharDrv()中
cdev_init(g_pCAMERA_HW_CharDrv,&g_stCAMERA_HW_fops);对设备进行初始化,并将
g_stCAMERA_HW_fops这个文件操作函数作为上层对Camera设备操作的接口留给上层进行调用:
GhongConfidential
Revision0.1-Feb.142012
-14-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
其中成员函数open()只是初始化一个原子变量留给系统调用。
ioctl()才是整个Camera
驱动的入口:
CAMERA_HW_Ioctl()是上层文件操作系统操作底层硬件的方法,它先对Camera需要的
Buffer做一个初始化,然后建立对Cameraopen、getinfo等操作的接口:
通过判断Sensor状态的逻辑值来进行具体的操作,对于这个值的定义在:
Mediatek\custom\common\kernel\imgsensor\inc\Kd_imgsensor.h中
GhongConfidential
Revision0.1-Feb.142012
-15-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
在KdSetDriver()中通过判断name和ID匹配具体型号的sensor的驱动,判断它是主摄还是次摄,并对它进行初始化:
通过NAME和ID匹配完成后会将PSENSOR_FUNCTION_STRUCT*pfFunc这个结构体匹配到具体型号的驱动代码中:
到这里,整个Camera驱动从总线注册到完成具体sensor的初始化的流程就完成了,
CAMERA_HW_Ioctl()中其他的ioctl操作函数最后都会在$sensor$_sensor.c中实现。
GhongConfidential
Revision0.1-Feb.142012
-16-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
十、Camera驱动添加、调试流程:
1、修改系统配置文件ProjectConfig.mk:
-alps\mediatek\config\$project$\ProjectConfig.mk
GhongConfidential
Revision0.1-Feb.142012
-17-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
2、检查、配置供电文件:
-alps\mediatek\custom\$project$\Kernel\Camera\Camera\kd_camera_hw.c
Camera供电流程(以3M前摄MT9V114+5M后摄OV5647为例):
其实在kd_camera_hw.c中只有一个函数kdCISModulePowerOn(),在这个函数中需要注意的是通过GPIO口控制PDN和RST引脚的时候,对于其相关的
定义,由其在切换平台的时候。
例如MT6573和MT6575的定义顺序就不同。
GhongConfidential
Revision0.1-Feb.142012
-18-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryInformation
3、添加Camera驱动(以ov5647为例):
创建SensorFuncOV5647这样一个数据结构
SENSOR_FUNCTION_STRUCTSensorFuncOV5647=
{OV5647Open,
OV5647GetInfo,
OV5647GetResolution,
OV5647FeatureControl,
OV5647Control,OV5647Close};
GhongConfidential
Revision0.1-Feb.142012
-19-
Ⓒ2012Ghonginc.
CameraDriveranalysisintheplatformofMTK
PreliminaryIn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MTK 平台 camera 摄像头 调试 教程
![提示](https://static.bdocx.com/images/bang_tan.gif)