MTK DriverOnly——Camera移植

本文详细介绍了Camera驱动的移植流程,包括原理图确认、GPIO配置、IC型号确认、代码移植等步骤,并阐述了一供与二供Camera模组的兼容方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、原理图确认

 

首先通过硬件人员或SPM获取到项目的电路原理图,观察Camera部分的电路原理图,了解Camera的总线接口以及引脚定义。

下图为Tango+3GCamera部分的电路示意图:

 


 

 

二、GPIO配置

 

   由以上原理图可知,Camera接口总共使用了17根引脚,分别为8根控制信号线、8根数据信号线和1根模组ID引脚。其中SCLSDACMRSTCMPDN以及ID引脚配置为普通GPIO口,由程序软件控制,其余引脚配置为Camera接口功能引脚,由Camera接口硬件自动控制。具体配置如下:

 


 

CAM_ID引脚配置,其实该引脚配不配置无所谓,因为当进行二供兼容时,是通过读取SensorID寄存器来判断不同的模组的,而不是通过该CAM_ID引脚电平来判断的。


 

 

三、Camera IC型号确认

 

1. 询问采购或SPM索要项目器件采购单,找到Camera的型号、规格及物料编号。

1st source

E-welly

内置摄像头,Camera Module,CMOS,2M,FF,6.5×6.5×H4.0mm,Socket 24pin,Parallel,Hynix253,Xueye,XY-2006AQ,Sherry,HE5418B1S-0P0J0,E-WELLY

E-M

Capacity shaortage

ASA2001079C1

2nd source

E-welly

内置摄像头,Camera,CMOS,2M,FF,6.5×6.5×H4.0 mm,Socket,Parallel,HI257,DC2030-3P lens,N/A,N/A,for Yaris M 2nd source,HC5592B1S-0P0J0,E-WELLY,

E-M

Capacity shaortage

ASA2001097C1

 

由上表格可以确认,Tango+3G所使用的一供Camera模组为E-Welly公司的,使用的驱动ICHynix253,所以我们驱动人员只要完成HI253的驱动移植就可以了。如果之前的项目有使用过HI253Camera驱动,则直接使用之前项目的驱动文件。如果从来没有用过该Camera驱动,则需要向FAE索要该Camera的驱动文件,一般为以下三个文件:

   image_sensor_HI253.c

   image_sensor_HI253.h

   usbvideo_attr_HI253.c

 

 

四、1st source代码移植

 

1.拷贝文件

   \mtk_6276_11a\custom\drv\YUV_sensor\目录下,新建一个文件夹,文件夹命名为Camera驱动IC的型号,即HI253,然后将image_sensor_HI253.c   image_sensor_HI253.h   usbvideo_attr_HI253.c三个文件拷贝到该目录下,并将整个目录及文件加入到ClearCase版本树中。

 

2.makefile

 

   SENSOR_TYPE =YUV

   CMOS_SENSOR =HI253

   SENSOR_ROTATE =SENSOR_ROTATE_180

   HORIZONTAL_CAMERA =FALSE

   BACKUP_SENSOR_SUPPORT =NONE 

   CMOS_SENSOR_BAK1 =NONE

 


 

3.image_sensor.h

   打开image_sensor.h文件,添加image_sensor_HI253.h头文件:


 

   添加SENSOR ID号:


ID号为Sensor ID寄存器读出来的ID号,如不知道,可向FAE询问或查阅该SensorDatasheet

 

4.image_sensor.c

   打开image_sensor.c文件,在SensorList[MAX_SENSOR_SUPPORT_NUMBER + 1]数组中,添加如下代码:

 


 

5.camera_hw.c

   打开camera_hw.c文件,添加如下定义:

 


 


 


 

 

   在函数CisModulePowerOn()中,确认DOVDD2.8VAVDD引脚为高电平DVDD1.8V


 

   并在else语句中添加如下代码,即关闭Camera时,将SCLSDA引脚设置为上拉输入:


 

6.编译下载

   使用new选项重新make整个工程,并使用TeleWeb工具下载到目标手机上,进入Camera APP,观察Camera能否正常工作。

   一般如果Camera驱动移植正确,则能正常进入Preview预览界面,按下Capture按键后,能成功拍下照片。

 

 

五、2nd source兼容

 

1.拷贝文件

   由上面采购单可知,Tango+3G使用的2nd source Camera仍是E-Welly公司的,但驱动IC型号为HI257,从以前的项目或FAE那获得以下3个文件:

   image_sensor_HI257.c

   image_sensor_HI257.h

   usbvideo_attr_HI257.c

 

   1st source步骤一样,\mtk_6276_11a\custom\drv\YUV_sensor\目录下,新建一个文件夹HI257,然后将上面3个文件拷贝到该目录下,并将整个目录及文件加入到ClearCase版本树中。

 

2.makefile

 

   BACKUP_SENSOR_SUPPORT =TRUE

   CMOS_SENSOR_BAK1 =HI257

 


 

3.image_sensor.h

   1st source,打开image_sensor.h文件,添加image_sensor_HI257.h头文件:


 

 

   添加SENSOR ID号:


ID号为Sensor ID寄存器读出来的ID号,如不知道,可向FAE询问或查阅该SensorDatasheet

 

4.image_sensor.c

    1st source,打开image_sensor.c文件,在SensorList[MAX_SENSOR_SUPPORT_NUMBER + 1]数组中,添加如下代码:

 


 

5.cal_main.c

   打开cal_main.c文件,找到CalSearchSensor()函数,在原来的判断语句if (NULL_SENSOR_ID!=SensorIdPara.FeatureValue)中增加新的判断条件如下:

 



6.
编译下载

   仍然使用new选项重新make整个工程,并使用TeleWeb工具下载到目标手机上,手机硬件换上2nd source Camera,开机进入Camera APP,观察Camera能否正常工作。

   

 

六、常见问题分析

 

1. Camera无法进入Preview预览界面,显示“Failedto preview”:

   1)有可能Camera模组没有插好,接触不良,请重新安装一下Camera模块;

   2Camera ID读取失败,或读出来的ID号与宏定义的ID号不匹配,请使用TRACE32跟踪调试;

   3)如果对同一手机、同一软件版本,更换了不同Camera模组,即使软件代码兼容这两款Camera,也无法正常预览,必须要对FAT进行格式化后,才能正常预览。

 

2.预览时镜像、拍照后镜像、预览和拍照同时镜像:

   1)可以通过修改makefile中的SENSOR_ROTATE = SENSOR_ROTATE_180SENSOR_ROTATE_0来查看效果;

   2)可以通过修改Sensor的相关寄存器来解决,具体修噶内容请联系FAE

 

3.预览时旋转90度、拍照后旋转90度、预览和拍照同时旋转90度:

   1)可以通过修改makefile中的SENSOR_ROTATE = SENSOR_ROTATE_90SENSOR_ROTATE_270来查看效果;

   2)询问MML硬件工程师,Camera模组的摆放方向,一般Camera模组厂商提供的结构图纸中,Sensor都有一个基准方向,该基准用一个小人图像来表示,所以应确保小人竖直站立的方向为正方向,具体Camera摆放的位置请参考以下附件。如果Camera摆放方向错误,则需要联系SPM商讨解决方案。如果从软件上解决,则需要联系MTK MML软件工程师,修改HAL层代码来解决该问题。

<<手机摄像头成像设计规则0718.pdf>>

 

4. Camera Performance问题:

   建议联系FAE工程师到现场调试解决问题,如预览水波纹、拍照曝光强度太高、颜色对比度太深等等。

### MTK Camera 驱动移植概述 MTK(MediaTek)Camera驱动移植涉及多个层次的配置和修改,主要包括 HAL 层、Kernel 层以及项目配置文件的调整。以下是关于如何将 MTK 相机功能成功移植到特定平台或设备的关键点: #### 1. **HAL 层配置** 在 HAL 层面,主要通过 `camera_custom_feature_table.cpp` 文件定义支持的功能组合。例如,在 MT6877 平台中,可以通过如下方式设置功能组合[^1]: ```cpp #define MTK_FEATURE_COMBINATION_SINGLE \ (MTK_FEATURE_FB | MTK_FEATURE_ZSD | TP_FEATURE_YFT_3RD_TESTDEMO) ``` 此部分用于指定相机模块所需的支持特性集合。 #### 2. **Kernel 驱动层配置** 对于 Kernel 驱动层面,需要确保对应的传感器驱动被正确添加至内核路径下。通常情况下,这些驱动位于以下目录结构中[^2][^3]: - `drivers/misc/mediatek/imgsensor/src/common/v1/` 具体操作包括但不限于新增目标硬件所使用的图像传感器驱动文件,比如 GC2375 和 SP2509 的 MIPI 原始数据接口实现: ```bash drivers/misc/mediatek/imgsensor/src/common/v1/gc2375_mipi_raw.c drivers/misc/mediatek/imgsensor/src/common/v1/sp2509_mipi_raw.c ``` 同时需注意更新 Makefile 及 Kconfig 文件以包含新引入的驱动组件。 #### 3. **项目级配置** 为了适配具体的前后置摄像头型号,还需要编辑项目的全局配置文件 `ProjectConfig.mk` 来指明主次摄像头的具体类型及其关联的 kernel driver 名称[^3]: ```makefile CUSTOM_HAL_IMGSENSOR=sp5507_mipi_raw CUSTOM_HAL_MAIN_IMGSENSOR=sp5507_mipi_raw # 后摄像头 CUSTOM_HAL_SUB_IMGSENSOR=sp2509_mipi_raw # 前摄像头 CUSTOM_KERNEL_IMGSENSOR=sp5507_mipi_raw CUSTOM_KERNEL_MAIN_IMGSENSOR=sp5507_mipi_raw # 后摄像头 CUSTOM_KERNEL_SUB_IMGSENSOR=sp2509_mipi_raw # 前摄像头 ``` 以上设定明确了不同场景下的默认传感器选型逻辑,并同步告知编译工具链哪些 kernel modules 应当参与构建过程[^4]. #### 4. **测试验证流程** 完成上述步骤之后,建议执行全面的功能性和稳定性测试来确认整个迁移工作的有效性。这可能涉及到静态图片质量评估、动态视频录制性能分析等多个维度考量。 --- ### 示例代码片段展示 下面给出一段简单的脚本用来检查当前系统是否加载了预期中的 imgsensor module: ```python import os def check_loaded_modules(module_name): with open('/proc/modules', 'r') as f: content = f.read() if module_name in content: return True return False if __name__ == "__main__": main_sensor = "sp5507_mipi_raw" sub_sensor = "sp2509_mipi_raw" result_main = check_loaded_modules(main_sensor) result_sub = check_loaded_modules(sub_sensor) print(f"Main Sensor Loaded: {result_main}") print(f"Sub Sensor Loaded: {result_sub}") ``` 该 Python 脚本能帮助快速诊断是否存在未正常挂载的情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何小龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值