MTK_camera驱动流程总结_pei
MTK_驱动总结文档
MTK_驱动总结文档G616 驱动文档总结在/mediatek/custom下会有好多重名的文件,在不同的文件夹里,最终会编译哪个文件是根据目录的优先级来判断brighter89_evdo_jb2 > mt6589 > xxmon也就是说如果brighter89_evdo_jb2 ,mt6589 , xxmon 同时存在一文件,最终编译的会是brighter89_evdo_jb2目录下的文件也可以通过/mediatek/custom/out/开判断,此文件时最终编译的文件运行/mediatek/dct/。
选择文件/mediatek/custom/brighter89_evdo_jb2/kernel/dct/dct /Edit,打开后可以修改GPIO的模式,上拉,下拉,输入,输出修改后点击“Save”和“Gen Code”重新编译:./makeMtk brighter89_evdo_jb2 codegen ./makeMtk brighter89_evdo_jb2 new pl lk kernel ./makeMtk brighter89_evdo_jb2 bootimage提交时替换bw/custom/project/g616/mediate/custom/brighter89_evdo_jb2/kernel/dct/dct修改CUSTOM_LK_LCM=hx8389b_qhd_dsi_vdoBOOT_LOGO=qhd //根据屏的分辨率CUSTOM_KERNEL_LCM=hx8389b_qhd_dsi_vdo LCM_HEIGHT=960 LCM_WIDTH=540/mediatek/custom/xxmon/kernel/lcm目录名与下hx8389b_qhd_dsi_vdo名字相同,目录下为驱动文件在/mediatek/custom/xxmon/kernel/lcm/mt65xx_lcm_下添加要添加的屏#if defined(HX8389B_QHD_DSI_VDO) &hx8389b_qhd_dsi_vdo_lcm_drv, #endif下修改CUSTOM_HAL_IMGSENSOR=ov5648_mipi_raw hi257_yuv //前后camera CUSTOM_HAL_MAIN_IMGSENSOR=ov5648_mipi_rawCUSTOM_HAL_SUB_IMGSENSOR=hi257_yuvCUSTOM_KERNEL_IMGSENSOR=ov5648_mipi_raw hi257_yuv //前后camera CUSTOM_KERNEL_MAIN_IMGSENSOR=ov5648_mipi_raw CUSTOM_KERNEL_SUB_IMGSENSOR=hi257_yuv驱动要添加的文件:/mediatek/custom/xxmon/kernel/imgsensor/ov5648_mipi _raw /mediatek/custom/xxmon/hal/imgsensor/ ov5648_mipi_raw//hi257前camera同理/mediatek/custom/xxmon/hal/imgsensor/src/ #if defined(OV5648_MIPI_RAW)RAW_INFO(OV5648MIPI_SENSOR_ID, SENSOR_DRVNAME_OV5648_MIPI_RAW, NULL), #endif /mediatek/custom/xxmon/kernel/imgsensor/src/ kd_ #if defined(OV5648_MIPI_RAW) {OV5648MIPI_SENSOR_ID,SENSOR_DRVNAME_OV5648_MIPI_RAW,OV5648MIPISensorInit}, #endifCamera电所在文件:/mediatek/custom/brighter89_evdo_jb2/kernel/camera/ camera/kd_camera_ 核心驱动文件:/mediatek/custom/xxmon/kernel/imgsensor/src /kd_ 如果修改HAL层参数编译命令如下:./makeMtk -t brighter89_evdo_jb2 mm mediatek/platform/mt6589/hardware/camera/下修改: CUSTOM_HAL_LENS=dw9714afCUSTOM_HAL_MAIN_LENS=dw9714af CUSTOM_KERNEL_LENS=dw9714afCUSTOM_KERNEL_MAIN_LENS=dw9714af添加对应的文件夹和驱动文件/G616/mediatek/custom/xxmon/kernel/lens/dw9714af/ M config/mt6589/M custom/brighter89_evdo_jb2/hal/lens/src/ M custom/xxmon/hal/inc/camera_custom_A custom/xxmon/hal/lens/dw9714af/lens_para_ M custom/xxmon/hal/lens/src/ A custom/xxmon/kernel/lens/dw9714af/ A custom/xxmon/kernel/lens/inc/M platform/mt6589/hardware/camera/core/featureio/drv/ lens/mcu_下修改:CUSTOM_KERNEL_FLASHLIGHT=constant_flashlight CUSTOM_HAL_FLASHLIGHT=constant_flashlight驱动核心:/mediatek/custom/xxmon/kernel/flashlight/src/kd_/mediatek/custom/xxmon/kernel/flashlight/constant_f lashlight/leds_G616用的bd7710gwl driver IC,leds_会有相应的更改,文件修改都放到bw目录下 HAL tunning 文件:mediatek/custom/brighter89_evdo_jb2/hal/camera/came ra/flash_tuning_下修改:CUSTOM_KERNEL_TOUCHPANEL=ft5336驱动文件:mediatek/custom/xxmon/kernel/touchpanel/ft5336/ft53 36_/home/chenjian/CJ_WORK/code/G616/mediatek/custom/br ighter89_evdo_jb2/kernel/touchpanel/ft5336/tpd_cust om_下修改:CUSTOM_KERNEL_ACCELEROMETER=lis3dh CUSTOM_KERNEL_ALSPS=tmd2772驱动文件:/mediatek/custom/xxmon/kernel/accelerometer/lis3dh/ //gsensor 配置I2c和Gsensor 的position/mediatek/custom/brighter89_evdo_jb2/kernel/acceler ometer/lis3dh/cust_ static struct acc_hw cust_acc_hw = { .i2c_num = 3,.direction = 6, //chenjian 20XX-12-26 modify gsensor position.power_id = MT65XX_POWER_NONE, /*!< LDO is not used */ .power_vol= VOL_DEFAULT, /*!< LDO is not used */.firlen = 0, //old value 16 /*!< don't enable low pass fileter */ };/mediatek/custom/xxmon/kernel/alsps/tmd2772/ //psensor light sensor 配置I2c和 light sensor上报数据/mediatek/custom/brighter89_evdo_jb2/kernel/alsps/t md2772/cust_.als_level = { 4, 40, 80, 120, 160, 240, 400, 800, 1200, 1600, 20XX, 3000, 5000, 8000, 65535}, .als_value = {0,20, 60, 100, 150, 240, 400, 600, 1000, 1500, 20XX,3000, 5000, 8000, 10000, 10000},配置xls/mediatek/build/tools/emigen/MT6589/MemoryDeviceLis t_都是MTK release的,需要添加的memory要在MemoryDeviceList_表里,且名字与/mediatek/custom/brighter89_evdo_jb2/preloader/inc/ custom_名字需一样如H9TP32A8JDBCPR_KGM 需和MemoryDeviceList_表的名字一样 #define BOARD_ID MT6589_EVB#define CS_PART_NUMBER[0] SD7DP28C_4G#define CS_PART_NUMBER[1] H9TP32A8JDBCPR_KGM Memory兼容:向下添加即可#define CS_PART_NUMBER[2] #define CS_PART_NUMBER[3] ….….9.音频参数硬件同事,通过工具修改,导出文件,替换如下目录/mediatek/custom/brighter89_evdo_jb2/cgen/inc/。
MTK平台camera(摄像头)调试教程
MTK 平台 CAMERA 驱动浅析Camera Driver analysis in the platform of MTKDocument Number:Preliminary (Released) InformationRevision:0.1Release Date:Ghong Confidential Revision 0.1-Feb.14 2012- 1 -Ⓒ2012 Ghong inc.Revision HistoryRevision Date (dd/mm/yyyy)Author Comments0.114/02/2012Guoqing Zhang Draft VersionGhong Confidential Revision 0.1-Feb.14 2012- 2 -Ⓒ2012 Ghong inc.Contents一、.-二、.-三、.-四、.-五、.-、.-、.-、.-、.-六、.-七、.-、.-、.-、.-、.-、.-、.-八、.-).-).-).-九、.-十、.-Ghong Confidential Revision 0.1-Feb.14 2012- 3 -Ⓒ2012 Ghong inc.一、手机Camera的物理结构:FPC: Flexible Printed Circuit 可挠性印刷电路板Sensor:图象传感器IR:红外滤波片Holder:基座Lens:镜头二、Camera的成像原理:景物通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为模拟的电信号,经过 A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过 IO 接口传输到 CPU 中处理,通过 LCD 就可以看到图像了。
Ghong Confidential Revision 0.1-Feb.14 2012- 4 -百度文库 - 让每个人平等地提升自我Ⓒ2012 Ghong inc.图像传感器(SENSOR)是一种半导体芯片,其表面包含有几十万到几百万的光电二极管。
MTK平台camera(摄像头)调试教程要点
Contents一、手机CAMERA的物理结构:........................................................................................ - 4 -二、 CAMERA 的成像原理: ................................................................................................. - 4 -三、 CAMERA 常见的数据输出格式:.................................................................................. - 5 -四、阅读CAMERA的规格书(以TRULY模组OV5647_RAW为例):........................... - 6 -五、 CAMERA 的硬件原理图及引脚 ..................................................................................... - 7 -1、电源部分:.................................................................................................................... - 7 -2、 S ENSOR I NPUT部分:................................................................................................... - 7 -3、 S ENSOR O UT P UT部分:............................................................................................... - 7 -4、 I2C 部分:SCL,I2C时钟信号线和SDA,I2C数据信号线。
MTK平台Camera驱动
基于MTK平台Camera驱动简介软件开发部:John.WangCamera的硬件架构ARM Image signalCMOS Sensorprocessor& resizerMemoryImage encodeLCD软件开发部:John.WangCamera模块硬件在手机上的基本架构有三种(一)Baseband控制LCD+Sensor.Baseband控制LCD,在Camera模式下Backend IC控制LCD进行各种操作。
Camera模块硬件在手机上的基本架构有三种(二)Baseband控制LCD+Backend IC,Backend IC控制Sensor。
Camera模块硬件在手机上的基本架构有三种(三)Baseband控制Backend IC,并且在非Camera模式下Baseband控制LCD,在Camera模式下Backend IC控制LCD进行各种操作。
Camera 接口信号sensor MTK cameraVCAMA, VCAMDCMDAT0~7CMVREFCMHREFCMMCLKCMPCLKCMPDNCMRSTSCLKSDACamera 接口信号signal descriptionCMVREF CMOS sensor vertical reference signal input CMHREF CMOS sensor horizontal reference signal input SCLK IIC interface clock signalSDA IIC interface data signalCMMCLK CMOS sensor master clock output CMPCLK CMOS sensor pixel clock intputCMPDN CMOS sensor power down control CMRST CMOS sensor reset signal outputVCAMA Camera module analog powerVCAMD Camera module digital powerCMDAT0~7Camera data busIIC时序控制Camera interface时序控制Camera程序架构软件开发部:John.WangCamera程序架构MMI taskCamera APP:控制应用程序逻辑,Camera的状态机,包括了preview,capture,exit等各种状态控制。
MTK平台camera(摄像头)调试教程
MTK 平台 CAMERA 驱动浅析Camera Driver analysis in the platform of MTKDocument Number:Preliminary (Released) InformationRevision:0.1Release Date:Ghong Confidential Revision 0.1-Feb.14 2012- 1 -Ⓒ2012 Ghong inc.Revision HistoryRevision Date (dd/mm/yyyy)Author Comments0.114/02/2012Guoqing Zhang Draft VersionGhong Confidential Revision 0.1-Feb.14 2012- 2 -Ⓒ2012 Ghong inc.Contents一、.-二、.-三、.-四、.-五、.-、.-、.-、.-、.-六、.-七、.-、.-、.-、.-、.-、.-、.-八、.-).-).-).-九、.-十、.-Ghong Confidential Revision 0.1-Feb.14 2012- 3 -Ⓒ2012 Ghong inc.一、手机Camera的物理结构:FPC: Flexible Printed Circuit 可挠性印刷电路板Sensor:图象传感器IR:红外滤波片Holder:基座Lens:镜头二、Camera的成像原理:景物通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为模拟的电信号,经过 A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过 IO 接口传输到 CPU 中处理,通过 LCD 就可以看到图像了。
Ghong Confidential Revision 0.1-Feb.14 2012- 4 -百度文库 - 让每个人平等地提升自我Ⓒ2012 Ghong inc.图像传感器(SENSOR)是一种半导体芯片,其表面包含有几十万到几百万的光电二极管。
MTK_camera驱动流程总结_pei
Camera驱动流程总结范军君junjun.fan@目录1,Camera架构及流程简析2,初始化过程camera id检测3,Camera上电流程4,Camera打开流程Camera架构及流程简析MTK平台camera架构:Kernel部分主要有两块:一块是image sensor驱动,负责具体型号的sensor的id检测,上电,以及在preview,capture,初始化,3A等等功能设定时的寄存器配置。
另一块是isp driver,通过DMA将sensor数据流上传。
本篇主要介绍image sensor驱动的流程。
HAL层这边主要分3块,一块是imageio,主要是数据buffer上传的pipe。
一块是drv,包含imgsensor和isp的hal层控制。
最后是feature io,包含各种3A等性能配置。
本篇对HAL涉入不深,只在分析开机过程的id检测时会分析hal层的控制,属于第二块。
流程简析:主要发生在两个时间点:开机过程中camera的动作以及打开应用时camera的动作。
开机时,camera完成了sensor框架的初始化,id检测,以及上下电操作。
打开应用时,camera会有上电,完成寄存器的初始配置,向上层传送基本参数及配置信息,以及preview和capture模式循环。
初始化过程camera id检测代码分析:=>alps/mediatek/custom/common/kernel/imgsensor/kd_sensorlist.cmodule_init说明这段code在kernel初始化,也就是手机开机时运行。
在模块初始化函数中,注册一个i2c device,同时注册了一个platform driver注意driver name,匹配platform device需要名字一致。
Platform总线为虚拟总线,注册platform driver主要目的是隔离上下层,增强代码的可移植性。
MTK camera上电流程分析
MTK camera上电流程分析上电相关文件:Mediatek/custom/vanzo89_wet_jb2/kernel/camera/camera/kd_camera_hw.cMediatek/custom/vanzo89_wet_jb2/kernel/camera/camera/kd_camera_hw.hMediate/custom/common/kernel/imgsensor/src/kd_sensorlist.cMediate/custom/common/kernel/imgsensor/src/kd_sensorlist.h注:本文档以mt89_v10_vanzo_test项目为例MTK开机过程中会去检查当前项目(手机上烧录的当前软件)所有在Projectconfig.mk中配置过的camera sensor,如下:CUSTOM_HAL_IMGSENSOR=imx111_mipi_raw ov9724_mipi_rawCUSTOM_KERNEL_IMGSENSOR=imx111_mipi_raw ov9724_mipi_raw也就是说在开机的时候,系统会自动去detect这两颗camera sensor是否都能正常通信,主要是通过读sensor的id来判断的。
具体是调用下面的函数来开始检查之旅的:==========mediate/custom/common/kernel/imgsensor/src/kd_sensorlist.c================这个函数先是调用kdGetSensorInitFuncList(&pSensorList)获取系统配置的kdSensorList [],这个数组在mediatek/custom/common/kernel/imgsensor/src/kd_sensorlist.h中定义的,该数组也是我们加入新的型号sensor时需要改动的一个地方,如果你不把你新加入的sensor放进这个数组,系统也不会知道你配置过这个sensor。
MTK平台camera(摄像头)调试教程
Contents一、手机CAMERA的物理结构:........................................................................................ - 4 -二、 CAMERA 的成像原理: ................................................................................................. - 4 -三、 CAMERA 常见的数据输出格式:.................................................................................. - 5 -四、阅读CAMERA的规格书(以TRULY模组OV5647_RAW为例):........................... - 6 -五、 CAMERA 的硬件原理图及引脚 ..................................................................................... - 7 -1、电源部分:.................................................................................................................... - 7 -2、 S ENSOR I NPUT部分:................................................................................................... - 7 -3、 S ENSOR O UT P UT部分:............................................................................................... - 7 -4、 I2C 部分:SCL,I2C时钟信号线和SDA,I2C数据信号线。
MTK驱动调试相关总结
MTK驱动调试相关总结 2010-12-14 Ver:1.11 SIM卡2 T卡3 FLASH4 按键KEY5 IO配置6 ADC配置7 EINT配置8 FM驱动9 BT驱动10 TOUCHSCEEN驱动11 LCM驱动12 Sensor驱动13 背光灯、按键灯、振动器、PWM14 跑马灯15 移动传感器、四方传感器16 MP4、3GP播放17 音量参数、EQ参数、音频功放开关18 SMS、电话本等容量设置19 耳机插入、拔出检查、耳机按键处理20 充电器或USB插入、拔出检查、识别21 RF 配置22参考文档附录默认系统平台为MT6253,code版本:09B.W10.12.MP。
版本变更记录:Andy 2010.12.10 Ver:1.0Andy 2010-12-14 Ver:1.11 SIM卡F910(MT6253)SIM卡插槽与系统SIM卡号映射关系drv\src\switchControl_al.c// andy 2010.05.31 SIM卡插槽映射 __DRV_DUAL_SIM_INVERSE__//kal_bool sim_physicalSlotChanged;#ifdef __DRV_DUAL_SIM_INVERSE__kal_bool sim_physicalSlotChanged = KAL_TRUE ;#elsekal_bool sim_physicalSlotChanged = KAL_FALSE;#endif定制支持的SIM电压:Customer_sim_voltage_support.c/* For customer define ME support voltage of SIM *//* For 1.8V Tech. ME use ME_18V_30V *//* For 3.0V ONLY ME use ME_30V_ONLY *//* For 1.8V ONLY ME use ME_18V_ONLY */#define SIM_VOLTAGE_SUPPORT ME_18V_30Vsim_env SIM_GetCurrentEnv(void){(SIM_VOLTAGE_SUPPORT);return}MT6253的“4.3 SIM Interface”,介绍了SIM卡接口的情况。
MTK软件培训课程(三)MTK驱动架构分析精品PPT课件
MTK软件培训课程(三) 2005.11
Camera程序架构
MMI Task
Camera MMI
MDI Camera
GDI
MEDIA Task
Camera Driver
LCD Interface
HW- (LCM, ISP, MT6218, MT6219...)
Camera程序架构
MMI task
Camera APP:控制应用程序逻辑 MDI:应用程序接口层,直接操作Camera feature GDI: 处理Multi-layer,实现OSD
Media task
调用Camera驱动程序的接口层 Camera Driver
控制Camera Backend IC,Sensor以及LCD硬件
除了Camera模块外,Idle screen和Media Player 等也使用GDI。
GDI和pixtel_UI的关系
GDI的实现
使用GDI_HANDLE,gdi_handle来操作 GDI对象,GDI的对象可以是layer,gif, jpeg等。 GDI函数返回一个GDI_RESULT GDI函数使用互斥来保护,进入GDI函数 时调用GDI_ENTER_CRITICAL_SECTION()退 出函数时调用GDI_EXIT_CRITICAL_SECTION()
Graphics Device Interface
MTK的画图功能有两套体系,一套是 pixtel的体系,另一套是GDI。Pixtel的体 系比较老,它只能画单层的图像,如果 你想进行图像叠加,只能自己写程序来 实现。而GDI体系由于有硬件的支持,它 可以处理最多4个层数据的叠加,有很强 的表现能力。
Prview的状态机
MTK驱动架构分析及驱动调试指引
Camera MMI程序分析(3/3)
Camera MMI仅控制应用逻辑,而避免去涉及 照相机驱动的细节。比如说进入preview过程, Camera MMI仅仅是向MDI接口模块发送一个 Preview的请求,并将自己的数据结构传给MDI 层,再由MDI层向Media task层发送请求,并最 终调用到驱动程序来控制芯片实现preview。 MMI不关心不同的芯片如何去进入preview。 OSD是通过GDI层来绘制的,因为GDI支持最 大4层的图像叠加(6228平台可支持6层GDI)
Camera MMI程序分析(2/3)
Exit Preview
Capture
Capture Contshot Capture C来自untdownCancel
Capture Burstshot
Save Done
Save
Save Burstshot Burst Save Confirm Save Confirm
Media Task总结
总结
充分了解Media Task的作用和工作流程以后, 就可以理顺从Camera应用程序到底层程序的 整个流程和逻辑,无论是应用程序还是驱动 程序编程都会变得非常的轻松。 Media Task是可扩展可更改的,所有的代码 都是开放的,我们也可以订制一些自己的东 西。比如在200万像素拍照时出现了内存不 足问题,我们就修改了对文件的操作方法。
GDI简介(Graphics Device Interface)
MTK的画图功能有两套体系,一套是 pixtel的体系,另一套是GDI。Pixtel的体 系比较老,它最开始是用来处理单层图 像的简单接口,pixtel体系也是基于GDI 基础上封装出来的。而GDI体系由于有硬 件的支持,它可以处理最多4个层数据的 叠加,有很强的表现能力。 硬件支持有:DMA的传输,图片硬件解 码,以及2D加速器等。
MTK平台camera(摄像头)调试教程解读
Contents一、手机CAMERA的物理结构:........................................................................................ - 4 -二、 CAMERA 的成像原理: ................................................................................................. - 4 -三、 CAMERA 常见的数据输出格式:.................................................................................. - 5 -四、阅读CAMERA的规格书(以TRULY模组OV5647_RAW为例):........................... - 6 -五、 CAMERA 的硬件原理图及引脚 ..................................................................................... - 7 -1、电源部分:.................................................................................................................... - 7 -2、 S ENSOR I NPUT部分:................................................................................................... - 7 -3、 S ENSOR O UT P UT部分:............................................................................................... - 7 -4、 I2C 部分:SCL,I2C时钟信号线和SDA,I2C数据信号线。
camera驱动交流(高通平台)
下设置参数的,MCTL_COMPID_STATSPROC涉及较多的VFE操作比较复杂, 我们此次只针对YUV的sensor进行讲解。Let’s go SENSOR_SET_AUTO_FOCUS再通过sensor_client_set_params这个接口 调度到 \vendor\qcom\proprietary\mm-camera\server\hardware\sensor\o v5640\ ov5640_u.c
然后代码通过 C/S 架构走向
Then 进入HAL层 /hardware/qcom/camera/QualcommCamera2.cpp
/hardware/qcom/camera/QcameraHWI.cpp
status_t QCameraHardwareInterface::autoFocus() { …
然后调用
/hardware/qcom/camera/mm-camera-interface/QCameraHWI.cpp
这个将调用系统调用open的方法,打开设备节点dev/video0(后置相 机),/dev/video2(前置相机),这个顺序是和内核在启动的是和 video的注册顺序相关的。 那么这个节点是在哪儿注册的呢? /kernel/drivers/media/video/msm/msm.c msm_cam_dev_init 这个函数会对节点注册
2.3 相机的控制过程(以自动对焦为例):
Then autofocus 将调用
由于 Camera.java 实现了 FocusManager.Listener 接口,所以 mListener.autoFocus()的实现在 Camera.java 中
随后代码对焦走向 framework 层 走向 JNI
最新MTK-camera上电流程分析
M T K-c a m e r a上电流程分析MTK camera上电流程分析上电相关文件:Mediatek/custom/vanzo89_wet_jb2/kernel/camera/camera/kd_camera_hw.c Mediatek/custom/vanzo89_wet_jb2/kernel/camera/camera/kd_camera_hw.h Mediate/custom/common/kernel/imgsensor/src/kd_sensorlist.cMediate/custom/common/kernel/imgsensor/src/kd_sensorlist.h注:本文档以mt89_v10_vanzo_test项目为例MTK开机过程中会去检查当前项目(手机上烧录的当前软件)所有在Projectconfig.mk中配置过的camera sensor,如下:CUSTOM_HAL_IMGSENSOR=imx111_mipi_raw ov9724_mipi_rawCUSTOM_KERNEL_IMGSENSOR=imx111_mipi_raw ov9724_mipi_raw也就是说在开机的时候,系统会自动去detect这两颗camera sensor是否都能正常通信,主要是通过读sensor的id来判断的。
具体是调用下面的函数来开始检查之旅的:==========mediate/custom/common/kernel/imgsensor/src/kd_sensorlist.c======= =========这个函数先是调用kdGetSensorInitFuncList(&pSensorList)获取系统配置的kdSensorList [],这个数组在mediatek/custom/common/kernel/imgsensor/src/kd_sensorlist.h中定义的,该数组也是我们加入新的型号sensor时需要改动的一个地方,如果你不把你新加入的sensor放进这个数组,系统也不会知道你配置过这个sensor。
MTK平台驱动调试笔记
分类:LINUX一、【一】调试串口的设置驱动的调式过程经常需要通过trace工具看log的,trace前需要修改手机串口,有以下三种方法设置串口1 通过手机进入工程模式设置2 修改代码,修改Nvram_user_config.c中的NVRAM_EF_PORT_SETTING_DEFAULT[]3.通过META工具修改在连上meta:左上角选中NVRAM Editor,在跳出的对话框里选择other LID,再选择NVRAM_EF_PORT_SETTING_LID,接下来read from nvram,对话框右边就会出现串口的设置情况,对调tst_port_ps(输入0)和ps_port(输入99)的值,二【【二】关于gpio口Gpio的初始化在文件gpio_drv.c里,可以用MTK提供的工具配置也可以用代码在程序里直接操作,二者的选择要看有没有定义宏__CUST_NEW__工具初始化时要注意配置codegen.dws,该文件里配置的只是对gpio口的初始化,并不是所有的gpio口都要设置成工作时的模式,尤其是当作时钟和蓝牙部分的gpiio口,初始化时就设置成工作模式的话会造成电机电流过大的。
代码初始化时DRV_WriteReg()、DRV_Reg对gpio口寄存器操作,分别定义gpio口的模式,和方向(0:输入;1:输出),对单个gpio口操作用到以下函数(以gpio25为例):GPIO_ModeSetup(25, 0);设置GPIO25为模式0GPIO_InitIO(1,25);初始化GPIO25方向为输出GPIO_WriteIO(0, 25 );设值GPIO25输入低电平0三、【三】键盘设置1)键盘定义Keypad_def.c如果定义CUST_NEW,工具中的键盘定义对应在改文件里的KEYPAD_MAPPING(keypad_drv.h);2)硬件键盘定义与软件mmi键盘的对应nKeyPadMap[](Keybrd.c)3)工程模式键盘测试函数EntryFMKeypadTest()修改键盘测试时界面显示的键的名称1. 做好上面的第一第二两步2. FactoryModeSrc.c开始部分定义添加的键所要显示的名称,值,分别应用到keypad_layout[](确定要显示的位置),keypad_value[]3.在EntryFMKeypadTest()函数中的数组IdleScreenDigits[]里添加要显示的键4)如果要设置一个键不管在什么界面下都起作用的话(如手电筒开关或则其他需求)就需要在键盘的事件响应函数static voidKeyEventHandler(KEYBRD_MESSAGE *eventKey)里设置,根据键值条用相应的响应函数,不过该函数及时在锁屏状态下也会执行的,需要根据需要添加条件语句四、关于LCDlcm背光驱动分为两种控制方式:1. pwm这个是通过调占空比来调节亮度的持续信号;2. PFM这个是通过脉冲的个数来控制LCM背光亮度。
MTK的驱动和MMI经验总结
MTK的驱动和MMI经验总结1.Windows必须安装在C盘,否则会出现modis编译问题。
2.语言和输入法移植2.1资源修改–这是我们需要修改的,2.2开始MTK已经帮你做好了。
2.1.1在mcu\plutommi\Customer\CustResource\PLUTO_MMI\ref_list.txt中添加新语言的字符串资源。
2.1.2用MCT工具生成新的字库,需要注意的是Language ID必须和ref_list.txt中一致。
2.1.3输入法资源包括Zi、T9和CStar。
2.1.3.1Zia.新建mcu\vendor\inputmethod\ZI\project\PROJECTNAME\v?_official\目录。
b.将第三方提供的Zi文件拷贝到该目录。
c.将所有ZI8DatXX.c文件扩展名改成.h文件,并将其包含到IMEResZi.h中。
d.将输入资源添加到mtk_gIMELDBArray 数组中。
e.上面步骤,第三方可能已经提供IMEResZi.h文件。
如果提供了就不用这些步骤了。
2.1.3.2T9将代码放到下面目录:mcu\vendor\inputmethod\T9\project\PROJECTNAME\v?_official\移植比较麻烦,具体参考:SOP_T9_Input_Method_Resource_Generation_07A.pdfSOP_T9_Input_Method_Resource_Generation_08B.pdfSOP_T9_Input_Method_Resource_Generation_09BV2.pdf2.1.3.3CStar不说了2.2SSC有几个文件需要修改。
a.mcu\ \plutommi\mmi\SSC\SSCInc\SSCStringHandle.h:增加新的SSC码,需要和ref_list.txt、FontRes.c中的一致。
#define SSC_AUTO "*#0000#"#define SSC_SCHINESE "*#0086#"#define SSC_TCHINESE "*#0886#"#define SSC_ENGLISH "*#0044#"#define SSC_DEFAULT "*#0044#"#define SSC_SPANISH "*#0034#"//添加你的SSC码//#define SSC_XXXXX "*#00XX#"2.3mcu\ \plutommi\mmi\SSC\SSCInc\SSCStringHandle.c:将新的SSC码加入到ssc_table2表中。
驱动移植
MTK Camera(OV13850)驱动移植一、驱动源码包结构拿到的驱动源码包解压后得到hal和kernel两个目录文件,源码目录结构如下所示13850-6592-driver-10-28.7z|--hal| |--camera_AE_PLineTable_ov13850mipiraw.h| |--camera_calibration_cam_cal.cpp| |--camera_flicker_para_ov13850mipiraw.cpp| |--camera_info_ov13850mipiraw.h| |--camera_isp_lsc_ov13850mipiraw.h| |--camera_isp_pca_ov13850mipiraw.h| |--camera_isp_regs_ov13850mipiraw.h| |--camera_tsf_data_ov13850mipiraw.h| |--camera_tsf_para_ov13850mipiraw.h| |--camera_tuning_para_ov13850mipiraw.cpp| |--config.ftbl.ov13850_mipi_raw.h|--kernel| |--ov13850mipiraw_Camera_Sensor_para.h| |--ov13850mipiraw_CameraCustomized.h| |--ov13850mipiraw_Sensor.c| |--ov13850mipiraw_Sensor.h二、ov13850驱动移植记录1、kernelSensor:∙在mediatek\custom\common\kernel\imgsensor\目录下增加ov13850_mipi_raw文件夹,把驱动源码kernel目录中所有文件copy进来。
∙修改mediatek\custom\common\kernel\imgsensor\inc\kd_imgsensor.h文件,增加ov13850 SENSOR_ID和SENSOR_DRVNAME定义[cpp]view plaincopy1.#define OV13850_SENSOR_ID 0xD8502.#define SENSOR_DRVNAME_OV13850_MIPI_RAW "ov13850mipiraw"∙修改mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.h增加OV13850_MIPI_RAW_SensorInit函数声明[cpp]view plaincopy1.UINT32 OV13850_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc); 在kdSensorList数组中增加OV13850配置[cpp]view plaincopy1.ACDK_KD_SENSOR_INIT_FUNCTION_STRUCT kdSensorList[MAX_NUM_OF_SUPPORT_SENSOR+1] =2.{3....4.#if defined(OV13850_MIPI_RAW)5. {OV13850_SENSOR_ID, SENSOR_DRVNAME_OV13850_MIPI_RAW, OV13850_MIPI_RAW_SensorInit},6.#endif7....8.}在mediatek\custom\wind92_wet_tdd\kernel\camera\camera\kd_camera_hw.c里,增加对OV13850的供电配置,参考OV12830和datasheet。
camera驱动移植归纳
camera驱动移植归纳.改camera主过程篇,这局部我感受即便做工程和做学识的差异最显明的地方了,即便能够有的地方确乎能够不懂,然而你要懂得你要改什么。
其恳挚改2440和还是2450的抉择上徘徊了久久,不懂获得底该改哪一个。
最后还是定夺改2440的,终究这个过程大局部都是在C语言的环境下编写的,不像2450的许多的调用了VC的函数,有的看也看不懂,闹心。
我的信念也是师姐告诉我的,先把没用的剔除。
不过这个真的是好用,要否则乱七八糟的,其他的函数存在可能还总是报错什么的,总之先简后繁。
不说了,还是先看看翔实的修正过程吧。
这里先要说一下,这个camera大局的厉行流程是按照2440的来改的。
2450比这个要混杂,用到了两个线程,2440的只用到了一个,因而按照2440的来改还是比拟容易的。
率先虚构地址的分配,这个地方不是太懂,不过既然在2450平台上运行,这局部就都要用2450的,这个地方揭示了一些问题,即便我在把2450的这局部并未曾彻底的移植到2440的过程上去,这个是导致我尔后图像有时能够揭示,有时又不能揭示的重要起因。
其次即便camera的初始化了,这个初始化重要是指ARM储藏器举行初始化。
这分为几个局部,先是CamGpioInit,CAM_IF_Reset。
这两个局部全面能够用2450的这个无须修改就能够。
随后是clock的设臵,重要在camif..h里有定义和设臵。
然后即便Camera_Module_Reset,这块我吃了大亏了,因为当时全面按照2450的过程,未曾琢磨复位的问题,导致调iic走了弯路,这个尔后再谈。
在CamInit里有几个要当心的的问题,率先是递交参数时,应准确递交preview和code得储藏器地址。
其次要当心这里有个参数CICOTRGFMT里的(CAM_FLIP_XXXXX<<14),这个能够扼制预览和输出图像的正反,以及90度的回旋。
9650的初始化在iic篇在翔实解释。
MTK手机平台下camera的设置方案
cam_set_param_req_hdlr()
camera_operation_setting()
yuv_operation_setting()[camera_yuv_process_v2.c--2475]
imagesetting
(注: image_sensor_func相关函数的注册,在image_sensor_gc0309.c)
当需要显示时,调用preview函数,使所有参数开始生效
生效:
mdi_camera_preview_start()
mdi_camera_preview_start_internal()
media_cam_preview()
cam_send_preview_req()
(MSG)
cam_preview_req_hdlr()
camera_preview_process()[camera_process_v2.c--]
yuv_preview_process()[camera_yuv_process_v2.c--2223]
yuv_image_setting()[camera_yuv_process_v2.c--2881]
image_sensor_func->yuv_sensor_setting
生效:
mdi_camera_power_on()
media_cam_power_up()[发送MSG_ID_MEDIA_CAM_POWER_UP_REQ消息]
(MSG)
cam_power_up_req_hdlr()
image_sensor_func->sensor_init()[camera_process_v2.c]
mmicamerarescamerac总设置窗口cameramenuc各种处理函用于记录设置值当需要显示时调用preview函数使所有参数开始生效生效
MTK平台camera(摄像头)调试教程
MTK 平台 CAMERA 驱动浅析Camera Driver analysis in the platform of MTKDocument Number:Preliminary (Released) InformationRevision:0.1Release Date:Ghong Confidential Revision 0.1-Feb.14 2012- 1 -Ⓒ2012 Ghong inc.Revision HistoryRevision Date (dd/mm/yyyy)Author Comments0.114/02/2012Guoqing Zhang Draft VersionGhong Confidential Revision 0.1-Feb.14 2012- 2 -Contents一、手机CAMERA的物理结构:........................................................................................ - 4 -二、 CAMERA 的成像原理: ................................................................................................. - 4 -三、 CAMERA 常见的数据输出格式:.................................................................................. - 5 -四、阅读CAMERA的规格书(以TRULY模组OV5647_RAW为例):........................... - 6 -五、 CAMERA 的硬件原理图及引脚 ..................................................................................... - 7 -1、电源部分:.................................................................................................................... - 7 -2、 S ENSOR I NPUT部分:................................................................................................... - 7 -3、 S ENSOR O UT P UT部分:............................................................................................... - 7 -4、 I2C 部分:SCL,I2C时钟信号线和SDA,I2C数据信号线。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Camera驱动流程总结范军君junjun.fan@目录1,Camera架构及流程简析2,初始化过程camera id检测3,Camera上电流程4,Camera打开流程Camera架构及流程简析MTK平台camera架构:Kernel部分主要有两块:一块是image sensor驱动,负责具体型号的sensor的id检测,上电,以及在preview,capture,初始化,3A等等功能设定时的寄存器配置。
另一块是isp driver,通过DMA将sensor数据流上传。
本篇主要介绍image sensor驱动的流程。
HAL层这边主要分3块,一块是imageio,主要是数据buffer上传的pipe。
一块是drv,包含imgsensor和isp的hal层控制。
最后是feature io,包含各种3A等性能配置。
本篇对HAL涉入不深,只在分析开机过程的id检测时会分析hal层的控制,属于第二块。
流程简析:主要发生在两个时间点:开机过程中camera的动作以及打开应用时camera的动作。
开机时,camera完成了sensor框架的初始化,id检测,以及上下电操作。
打开应用时,camera会有上电,完成寄存器的初始配置,向上层传送基本参数及配置信息,以及preview和capture模式循环。
初始化过程camera id检测代码分析:=>alps/mediatek/custom/common/kernel/imgsensor/kd_sensorlist.cmodule_init说明这段code在kernel初始化,也就是手机开机时运行。
在模块初始化函数中,注册一个i2c device,同时注册了一个platform driver注意driver name,匹配platform device需要名字一致。
Platform总线为虚拟总线,注册platform driver主要目的是隔离上下层,增强代码的可移植性。
alps/mediatek/platform/mt6582/kernel/core/mt_dev.cmtk平台用到的platform devicej基本都在这个文件中注册,这样device和driver就能匹配上了。
在platform probe中注册i2c driver和之前的i2c device匹配本页已使用福昕阅读器进行编辑。
福昕软件(C)2005-2009,版权所有,仅供试用。
配置i2c clock,注册一个字符设备。
一般驱动中注册字符设备,多是利用字符设备的fops 与上层交互,特别是ioctl.这些就是具体的fopsopen只是用来计数目前打开camera的数量,所以主要的交互功能要靠ioctl来完成这个函数很重要,沟通上下层,提供接口。
这边的Command用幻字定义,可以保持cmd 的唯一性,并具备可读性。
Command可带不定长参数。
下面是switch case,通过ioctl传下来的参数选择调用分支支持的command 汇总,包括camera 开机过程中上电,id 检测以及imagesensor 的参数获取KDIMGSENSORIOC_X_SET_DRIVER 和KDIMGSENSORIOC_T_CHECK_IS_ALIVE 这两个func 在开机初始化检测id 会被hal 层调用。
=>mediatek/platform/mt6582/hardware/camera/core/drv/imgsensor/imgsensor_drv.cpp impSearchSensor 在开机过程中被调用,用于检测id ,匹配main/sub imagesensor本页已使用福昕阅读器进行编辑。
福昕软件(C)2005-2009,版权所有,仅供试用。
GetSensooInitFuncList这个函数主要为了获得下表包含了id,name和一些方法的调用,因为在driver层有相似的架构,放在后面分析具体过程。
=>impSearchSensorHal层开始探测sensor,应为有两颗sensor,外层循环两次内层循环根据上面的sensor列表来,最大支持兼容16颗sensor,hal层特效,如果没有整合特定imagesensor的hal层代码,这边会直接退出。
getCameraDefault调用很重要,hal层camera的所有特效参数,包括3A,shading都在这边设定。
getCameraDefault通过之前的Sensorlist来连接特定imagesensor的具体实现。
下表是2675的特效参数获取函数。
获取各项特项参数=>impSearchSensorIoctl向驱动层下command,注意下下传的id就是目前正在检测的imgsensor的id.终于又回到了kd_sensorlist.c这个文件下层的ioctl接口现在的情况是,针对main sensor,hal层遍历上层的sensor列表,然后call下层的kdSetDriver. kdGetSensorList这个函数似曾相识。
这个函数很有意思,用了指向指针的指针作为参数。
有兴趣可以思考下不直接使用普通指针的原因,涉及堆栈和编译器对函数传参的处理。
指向结构体的指针,最后一个成员很重要,是一个函数指针,其参数是函数指针的结构体指针。
上层传下来的id参数解析成两部分g_invokeSocketIdx区分目前正在匹配的是main还是sub,drvIdx是sensor列表的序列号。
Hal层和driver层的sensor list应该在顺序上保持一致。
函数指针的结构体指针,这些函数对应了具体imagesensor的操作,看如何挂接上具体sensor。
还是由sensorlist为函数指针赋值,挂接具体SensorInit2675的SensorInit实现,主要是为pfFunc这个函数指针的结构体指针赋值,这样我们就实现了驱动代码的分离,hal层只需调用Sensorlist.c这样一个虚拟设备的驱动,就可以和具体的Sensor Driver通信。
这样的做法与platform driver的设计思想一致,在lcm,传感器等驱动中也多有体现。
到这一步,hal层在做Search sensor时的第一步命令的set driver的目的已经很清晰,就是为了挂接正在遍历的sensor的具体接口。
回到Hal层,还是Search sensor的这个函数对于正在遍历的这颗sensor,已经挂街上具体的底层驱动接口了,那么下达check id的真正指令。
底层的ioctl接口第一步是上电Power on,这块稍后会有具体分析。
这块code,就是读id了,调用之前挂接的具体sensor的Feature control,并带参。
2675的具体feature control,诸多功能通过switch罗列在这边。
读id一般在开机和打开sensor时做,读之前软件reset sensor,保证所读取的id的正确性。
Ov一般都用300A和300B这两个register保存id。
读到id后和预先设定的ID作比较如果一致,那么我们就找到了匹配到了要找的sensor,因为有前后摄,所以这样的动作要做两。
这边还有个问题被忽略了,读id是通过i2c通信,各家sensor的i2c addr显然都不一样。
imagesensor因为采取了驱动代码的分层设计,i2c device的注册时放在sensorlist中的,在module init的时候已经注册,也指定了i2c addr为0xfe。
那怎么和不同的sensor通信的呢实际的i2c通信前,对i2c addr重新赋值,kd_Sensorlist.c中的0xfe只是为了应付注册。
读完id并没有结束,因为现在还在手机开机初始化阶段,并不是打开camera应用,我们check完id,一定要给sensor下电匹配上id后又回到了hal层,id不对的ioctl的return err<0.HAL代码匹配上的sensor则继续下传cmd,获取一些sensor的信息和配置,流程与之前的id检测类似,不展开。
这边预留了一个extra id的接口,主要用于区分同型号不同模组厂的sensor,通过读取指定寄存器中厂商烧录的value来做二次id判断,以兼容不同厂商的sensor,此处为空.当然extra id也完全可以只在driver层添加,加在初次id检测后即可。
close仅为历史遗留代码,无实际作用。
开机过程中的ID检测流程已全部给出,总结一下:●HAL层运行Search sensor这个线程●HAL层遍历sensorlist并挂接HAL层性能如3A等一些参数获取的接口●HAL层下达setDriver的cmd,并下传正在遍历的sensor在sensorlist列表中的id●Driver层根据这个id,挂接Driver层sensorlist中对应的Sensor和具体Sensor底层操作接口●HAL层对正在遍历的sensor下达check id的指令●Driver层为对应sensor上电,通过i2c读取预存在寄存器中的sensor id●比较读取结果,不匹配,return error,继续遍历。
●匹配,HAL层下达其他指令收集sensor信息●下电Camera上电流程Camera的供电和相关引脚电源部分:VCAMD就是DVDD数字供电,主要给ISP供电,如果是RAWDATA格式的sensor其ISP是在BB端,所以将其引脚将其NC;VCAM_IO就是VDDIO数字IO电源主要给I2C部分供电;VCAMA就是AVDD模拟供电,主要给感光区和ADC部分供电;VCAM_AF是对Camera自动对焦马达的供电引脚部分:Reset引脚和powerdown引脚代码部分:Camera在初始化和打开的时候均有上电动作,这边以初始化部分的代码分析这块流程。
之前没有详细分析的上电代码。
kdCISModulePowerOn这个函数的实现在kd_camera_hw.c里面=>kd_camera_hw.c这个文件是MTK专门用于sensor上电时序管理的文件,各个sensor的上电均在这边实现。
首先是引脚定义,包括模式和引脚的极性这边pinSetIdx可以反过来,这样就变成默认打开前摄了,现在是rear camera优先上电的具体时序应该参考各个sensor的datasheet,下面是ov2675的上电时序图看图,首先使能pdn引脚然后开电,dovdd->avdd->dvddPower off,使能reset这边的开电顺序是有些问题的,按spec应该先D2再A再D,A2是供给AF的,属于马达部分,先后无所谓。