最新MTK平台camera(摄像头)学习教程重点讲义资料.doc

上传人:1595****071 文档编号:35392620 上传时间:2022-08-21 格式:DOC 页数:47 大小:2.23MB
返回 下载 相关 举报
最新MTK平台camera(摄像头)学习教程重点讲义资料.doc_第1页
第1页 / 共47页
最新MTK平台camera(摄像头)学习教程重点讲义资料.doc_第2页
第2页 / 共47页
点击查看更多>>
资源描述

《最新MTK平台camera(摄像头)学习教程重点讲义资料.doc》由会员分享,可在线阅读,更多相关《最新MTK平台camera(摄像头)学习教程重点讲义资料.doc(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateMTK平台camera(摄像头)学习教程重点讲义资料Camera Driver analysis in the platform of MTKContents一、 手机 CAMERA 的物理结构: . - 4 -二、 CAMERA 的成像原理: . - 4 -三、 CAMERA 常见的数据输出格式:. - 5 -四、 阅读 CAMERA 的规格书(以 TRULY 模组

2、 OV5647_RAW 为例): . - 6 -五、 CAMERA 的硬件原理图及引脚 . - 7 - 1、 电源部分:. - 7 - 2、 SENSOR INPUT 部分: . - 7 - 3、 SENSOR OUTPUT 部分: . - 7 - 4、 I2C 部分:SCL,I2C 时钟信号线和 SDA,I2C 数据信号线。 . - 7 -六、 MTK 平台 CAMERA 驱动架构: . - 8 -七、 MTK 平台 CAMERA 相关代码文件(以下代码均为 MTK6575 平台): . - 9 - 1、 CAMERASENSOR 驱动相关文件 . - 9 - 2、 SENSOR ID 和一

3、些枚举类型的定义 . - 9 - 3、 SENSOR 供电 . - 9 - 4、 KERNEL SPACE 的 SENSORLIST,IMGSENSOR 模块注册 . - 9 - 5、 USER SPACE 的 SENSORLIST,向用户空间提供支持的 SENSORLIST . - 10 - 6、 SENSOR 效果调整的接口 . - 10 -八、 CAMERA 模块驱动、设备与总线结构: . - 11 - A) 驱动的注册: . - 11 - B) 设备的注册: . - 11 - C) 总线的匹配: . - 12 -九、 CAMERA 驱动工作流程: . - 13 -十、 CAMERA 驱

4、动添加、调试流程:. - 17 -Ghong ConfidentialRevision 0.1-Feb.14 2012- 3 -2012 Ghong inc.-Camera Driver analysis in the platform of MTKPreliminary Information一、 手机 Camera 的物理结构:FPC: Flexible Printed Circuit 可挠性印刷电路板Sensor:图象传感器IR:红外滤波片Holder:基座Lens:镜头二、 Camera 的成像原理:景物通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为

5、模拟的电信号,经过 A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过 IO 接口传输到 CPU 中处理,通过 LCD 就可以看到图像了。Ghong ConfidentialRevision 0.1-Feb.14 2012- 4 -2012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Information图像传感器(SENSOR)是一种半导体芯片,其表面包含有几十万到几百万的光电二极管。光电二极管受到光照射时,就会产生电荷。目前的 SENSOR 类型有两种:CC

6、D(Charge Couple Device), 电荷耦合器件,它是目前高像素类 sensor 中比较成熟的成像器件,是以一行为单位的电流信号。CMOS(Complementary Metal Oxide Semiconductor),互补金属氧化物半导体。CMOS的信号是以点为单位的电荷信号,更为敏感,速度也更快,更为省电。ISP 的性能是决定影像流畅的关键,JPEG encoder 的性能也是关键指标之一。而 JPEGencoder 又分为硬件 JPEG 压缩方式,和软件 RGB 压缩方式。DSP 控制芯片的作用是:将感光芯片获取的数据及时快速地传到 baseband 中并刷新感光芯片,因

7、此控制芯片的好坏,直接决定画面品质(比如色彩饱和度、清晰度)与流畅度。三、 Camera 常见的数据输出格式:常见的数据输出格式有:Rawdata 格式、YUV 格式、RGB 格式。RGB 格式:采用这种编码方法,每种颜色都可用三个变量来表示红色、绿色以及蓝色的强度。每一个像素有三原色 R 红色、G 绿色、B 蓝色组成。YUV 格式:其中“Y”表示明亮度(Luminance 或 Luma),就是灰阶值;而“U”和“V”表示色度(Chrominance 或 Chroma),是描述影像色彩及饱和度,用于指定像素的颜色。RAW DATA 格式:是 CCD 或 CMOS 在将光信号转换为电信号时的电平

8、高低的原始记 录,单纯地将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。支持 YUV/RGB 格式的模组,一般会在模组上集成 ISP(Image Single Processor),经过A/D 转换过的原始数据经过 ISP 处理生成 YUV 标准格式传到 BB。一般来说,这种设计适 用于低像素 Camera 的要求,会在主板上省去一个 DSP,可降低成本。在调试过程中,YUV/RGB 格式的摄像头,其所有参数都可在 kernel 层通过寄存器来控制。调试一般由 sensor的原厂支持。支持 RawData 格式的模组,由于感光区域的需求,不会再模组内集成 ISP

9、 以最大程度 的增大感光区域的面积,提高照片质量。模组把原始的数字信号传给 BB 上的 DSP 进行处 理,MTK 自带的 DSP 一般包含 ISP、JPEG encoder、和 DSP 控制芯片。在调试的时候图像的效果需要 MTK 在 HAL 层的参数进行支持。Ghong ConfidentialRevision 0.1-Feb.14 2012- 5 -2012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Information四、 阅读 Camera 的规格书(以 Truly 模组 OV5647_Ra

10、w 为例):Ghong ConfidentialRevision 0.1-Feb.14 2012- 6 -2012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Information五、 Camera 的硬件原理图及引脚(以 W19S 项目 MainCameraOV5647 为例):从上面可看出,连接 Camera 的 30 根 Pin 脚可大致分为以下几类:1、 电源部分:a) VCAMD 就是 DVDD 数字供电,主要给 ISP 供电,由于 RAWDATA 格式 的 sensor 其 ISP 是在 B

11、B 端,所以将其引脚将其 NC。从上面的规格书上 可以看出 DVDD 是内部 BB 端供电。模组已将其 NC 掉了; b) VCAM_IO 就是 VDDIO 数字 IO 电源主要给 I2C 部分供电; c) VCAMA 就是 AVDD 模拟供电,主要给感光区和 ADC 部分供电; d) VCAM_AF 是对 Camera 自动对焦马达的供电。 2、 Sensor Input 部分:a) Reset 信号,用于复位、初始化。 b) Standby/PowerDown 信号,用于进入待机模式,降低功耗。 c) Mclk,即 MasterClock 信号,是由 BB 端提供。 3、 Sensor O

12、utPut 部分:a) Pclk,即 PixelClock 信号,由 MCLK 分频得到,作为外部时钟控制图像 传输帧率 b) HSYNC,行同步信号,其上升沿表示新一列行图像数据的开始。 c) VSYNC,帧同步信号,其下降沿表示新的一帧图片的开始。 d) D0-D9 一共 10 根数据线(8/10 根等); 4、 I2C 部分:SCL,I2C 时钟信号线和 SDA,I2C 数据信号线。Ghong ConfidentialRevision 0.1-Feb.14 2012- 7 -2012 Ghong inc.Camera Driver analysis in the platform of

13、MTKPreliminary Information六、 MTK 平台 Camera 驱动架构:上图的架构相信大家都有了一定的了解,android 将系统大致分为应用层、库文件和硬件抽象层、Linux 内核三层。在底层的内核空间,Camera 的 driver 将其驱动起来以后,将硬件驱动的接口交给硬件抽象层(hal:Hardware Abstraction Layer),android 上层的 Camera 应用程序在 android 实时系统中的虚拟机中,加载 android 留给 Camera 公用的一些库文件,调用硬件抽象层(hal)的接口来控制 Camera硬件来实现功能。当然,如果

14、是 Raw 模式的 Camera,还需要在硬件抽象层(hal)调用一些参数来控制 Camera 的效果。Ghong ConfidentialRevision 0.1-Feb.14 2012- 8 -2012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Information七、 MTK 平台 Camera 相关代码文件(以下代码均为 MTK6575 平台):1、 CameraSensor 驱动相关文件kernel-3.10/drivers/misc/mediatek/imgsensor/src/platf

15、orm/2、 Sensor ID 和一些枚举类型的定义vendor/mediatek/proprietary/custom/common/kernel/imgsensor/inc/kd_imgsensor.h3、 Sensor 供电kernel-3.10/drivers/misc/mediatek/mach/platform/project/camera/camera/kd_camera_hw.c4、 Kernel Space 的 SensorList,imgsensor 模块注册kernel-3.10/drivers/misc/mediatek/imgsensor/src/platform/

16、kd_sensorlist.hGhong ConfidentialRevision 0.1-Feb.14 2012- 9 -2012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Information5、 User Space 的 SensorList,向用户空间提供支持的 SensorListvendor/mediatek/proprietary/custom/platform/hal/D1(D2)/imgsensor_src/sensorlist.cpp6、 Sensor 效果调整的接口Ghong C

17、onfidentialRevision 0.1-Feb.14 2012- 10 -2012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Information八、 Camera 模块驱动、设备与总线结构:一般在 Linux 设备驱动模型中,我们只需要关心总线、设备、驱动这三个实体。总线会充当红娘对加载于其上的设备与驱动进行配对,对于 Camera 模块也不例外,下面从总线、设备、驱动的角度来分析 Camera 模块驱动的注册、匹配与加载过程。a) 驱动的注册:在(customcommonkernelimg

18、sensorsrcKd_sensorlist.c)CAMERA_HW_i2C_init 这个函数里通过 Platform_driver_register(&g_stCAMERA_HW_Driver)把 Camera 模块驱动注册 到 Platform 总线上。而 g_stCAMERA_HW_Driver 是对结构体 Platform_driver 这个结构体的填充。(KernelincludelinuxPlatform_device.h)Platform_driver 这个结构体包含 Probe()、Remove()等函数来完成驱动的填充。b) 设备的注册:对 platform_device

19、的定义通常在 BSP 的板级文件:(kernelarchshboardsmach-ap325rxaSetup.c)中实现,在板级文件中,将 platform_device归纳为一个数组,最终通过 platform_add_device()函数统一注册:Ghong ConfidentialRevision 0.1-Feb.14 2012- 11 -2012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Informationc) 总线的匹配:既 然 是 驱 动 Platform_device 那 对 应 的

20、设 备 必 然 是 挂 载 Platform 总 线 上 的Platform_device,Platform 总线是 Linux 系统提供的一种机制,不同于 I2C、I2S 等总线,它 是一种虚拟的总线。Linux 系统为 Platform 总线定义了一个 bus_type 的实例 Platform_bus_type:(Kerneldriversbaseplatform.c)Platform 总线通过 platform_match 这个成员函数来确定 platform_device 与 platform_driver 如何进行匹配:Ghong ConfidentialRevision 0.1-

21、Feb.14 2012- 12 -2012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Information九、 Camera 驱动工作流程:下载Capture下载PreviewPower On 参数为拍照 参数为预 做准备 览做准备PowerOffIICINITReset软件ResetPDN读ID判断是否连接到需要的Sensor从上图可以清晰的了解到 Camera 的一个工作流程主要分为这么七步:1. 打开 Camera Power LDO,让 Camera 有能量保证。 2. 打开 IIC,设置 P

22、DN 引脚,使 Camera 退出出 Standby 模式,按照要求让 Reset 脚 做一个复位动作。 3. 读一下 sensor 的版本 ID,这样可以让你确认是否连接上你想要的 sensor。 4. 对 Sensor 进行初始化下载最基本的参数让 Sensor 工作起来,可能包括软复位。 5. 下载 preview 的参数,为预览动作准备。 6. 下载 Capture 的参数,为拍照动作准备。 7. 设置 PDN 引脚,使 Sensor 进入 Standby 模式,或者关掉 LDO 等动作,退出 Camera。 我们都知道,Linux 内核是通过模块的机制来加载设备驱动的,那么接下来我们

23、就从设备模块加载的角度来看下 Camera 工作流程的驱动代码是如何工作的。在-alpsmediatekcustomcommonkernelimgsensorsrckd_sensorlist.c 中可以看到:module_init(CAMERA_HW_i2C_init);module_exit(CAMERA_HW_i2C_exit);在这里 Linux 内核加载和卸载 Camera 模块。Ghong ConfidentialRevision 0.1-Feb.14 2012- 13 -2012 Ghong inc.Camera Driver analysis in the platform of

24、 MTKPreliminary Informationstatic struct platform_driver g_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

25、_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 设备操作的接口留给上层进 行调用:Ghong ConfidentialRevision 0.1-Feb.14 2012- 14 -2

26、012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Information其中成员函数 open()只是初始化一个原子变量留给系统调用。ioctl()才是整个 Camera驱动的入口:CAMERA_HW_Ioctl()是上层文件操作系统操作底层硬件的方法,它先对 Camera 需要的Buffer 做一个初始化,然后建立对 Cameraopen、getinfo 等操作的接口:通过判断 Sensor 状态的逻辑值来进行具体的操作,对于这个值的定义在:Mediatekcustomcommonkernelimgs

27、ensorincKd_imgsensor.h 中Ghong ConfidentialRevision 0.1-Feb.14 2012- 15 -2012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Information在 KdSetDriver()中通过判断 name 和 ID 匹配具体型号的 sensor 的驱动,判断它是主摄还 是次摄,并对它进行初始化:通过 NAME 和 ID 匹配完成后会将 PSENSOR_FUNCTION_STRUCT *pfFunc 这个结构体匹 配到具体型号的驱动代码中:k

28、ernel-3.10/drivers/misc/mediatek/imgsensor/src/platform/kd_camera_hw.c到这里,整个 Camera 驱动从总线注册到完成具体 sensor 的初始化的流程就完成了,CAMERA_HW_Ioctl()中其他的 ioctl 操作函数最后都会在$sensor$_sensor.c 中实现。Ghong ConfidentialRevision 0.1-Feb.14 2012- 16 -2012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Infor

29、mation十、 Camera 驱动添加、调试流程:1、 修改系统配置文件 ProjectConfig.mk:-alpsmediatekconfig$project$ProjectConfig.mk Ghong ConfidentialRevision 0.1-Feb.14 2012- 17 -2012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Information2、 检查、配置供电文件:(-alpsmediatekcustom$project$KernelCameraCamerakd_camera

30、_hw.c)kernel-3.10/drivers/misc/mediatek/mach/platform/project/camera/camera/kd_camera_hw.hCamera 供电流程(以 3M 前摄 MT9V114+5M 后摄 OV5647 为例):其实在 kd_camera_hw.c 中只有一个函数 kdCISModulePowerOn(),在这个 函数中需要注意的是通过 GPIO 口控制 PDN 和 RST 引脚的时候,对于其相关的定义,由其在切换平台的时候。例如 MT6573 和 MT6575 的定义顺序就不同。Ghong ConfidentialRevision 0

31、.1-Feb.14 2012- 18 -2012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Information3、 添加 Camera 驱动(以 ov5647 为例):创建 SensorFuncOV5647 这样一个数据结构SENSOR_FUNCTION_STRUCT SensorFuncOV5647= OV5647Open, OV5647GetInfo, OV5647GetResolution, OV5647FeatureControl, OV5647Control, OV5647Close; G

32、hong ConfidentialRevision 0.1-Feb.14 2012- 19 -2012 Ghong inc.Camera Driver analysis in the platform of MTKPreliminary Informationa) OV5647Open 初始化操作就是对 SensorIC 中寄存器的操作,调试主要由 IC 原厂支持。Open 函数结束后返回 ERROR_NONE 表示初始化成功,可以正常使用。b) OV5647GetInfo UINT32 OV5647GetInfo(MSDK_SCENARIO_ID_ENUM ScenarioId,MSDK_S

33、ENSOR_INFO_STRUCT *pSensorInfo,MSDK_SENSOR_CONFIG_STRUCT *pSensorConfigData)第一个参数 ScenarioId 来自于 MSDK_SCENARIO_ID_ENUM 这个数组,在kd_imgsensor_define.h 中是这样定义的:#define MSDK_SCENARIO_ID_ENUMACDK_SCENARIO_ID_ENUMtypedef enumACDK_SCENARIO_ID_CAMERA_PREVIEW=0,ACDK_SCENARIO_ID_VIDEO_PREVIEW,ACDK_SCENARIO_ID_VIDEO_CAPTURE_MPEG4,ACDK_SCENARIO_ID_CAMERA_CAPTURE_JPEG,ACDK_SCENARIO_ID_CAMERA_CAPTURE_MEM,ACDK_SCENARIO_ID_CAMERA_BURST_CAPTURE_JPEG,ACDK_SCENARIO_ID_VIDEO_DECODE_MPEG4,ACDK_SCENARIO_ID_VIDEO_DECODE_H263,ACDK_SCENARIO_ID_VIDEO_DECODE_H264,ACDK_SCENARIO_ID_VIDEO_DECODE_WMV78

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 成人自考

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁