一、原理图确认
首先通过硬件人员或SPM获取到项目的电路原理图,观察Camera部分的电路原理图,了解Camera的总线接口以及引脚定义。
下图为Tango+3GCamera部分的电路示意图:
二、GPIO配置
由以上原理图可知,Camera接口总共使用了17根引脚,分别为8根控制信号线、8根数据信号线和1根模组ID引脚。其中SCL、SDA、CMRST、CMPDN以及ID引脚配置为普通GPIO口,由程序软件控制,其余引脚配置为Camera接口功能引脚,由Camera接口硬件自动控制。具体配置如下:
CAM_ID引脚配置,其实该引脚配不配置无所谓,因为当进行二供兼容时,是通过读取Sensor的ID寄存器来判断不同的模组的,而不是通过该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公司的,使用的驱动IC为Hynix253,所以我们驱动人员只要完成HI253的驱动移植就可以了。如果之前的项目有使用过HI253的Camera驱动,则直接使用之前项目的驱动文件。如果从来没有用过该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询问或查阅该Sensor的Datasheet。
4.image_sensor.c
打开image_sensor.c文件,在SensorList[MAX_SENSOR_SUPPORT_NUMBER + 1]数组中,添加如下代码:
5.camera_hw.c
打开camera_hw.c文件,添加如下定义:
在函数CisModulePowerOn()中,确认DOVDD为2.8V,AVDD引脚为高电平,DVDD为1.8V:
并在else语句中添加如下代码,即关闭Camera时,将SCL和SDA引脚设置为上拉输入:
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询问或查阅该Sensor的Datasheet。
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模块;
(2)Camera ID读取失败,或读出来的ID号与宏定义的ID号不匹配,请使用TRACE32跟踪调试;
(3)如果对同一手机、同一软件版本,更换了不同Camera模组,即使软件代码兼容这两款Camera,也无法正常预览,必须要对FAT进行格式化后,才能正常预览。
2.预览时镜像、拍照后镜像、预览和拍照同时镜像:
(1)可以通过修改makefile中的SENSOR_ROTATE = SENSOR_ROTATE_180或SENSOR_ROTATE_0来查看效果;
(2)可以通过修改Sensor的相关寄存器来解决,具体修噶内容请联系FAE。
3.预览时旋转90度、拍照后旋转90度、预览和拍照同时旋转90度:
(1)可以通过修改makefile中的SENSOR_ROTATE = SENSOR_ROTATE_90或SENSOR_ROTATE_270来查看效果;
(2)询问MML硬件工程师,Camera模组的摆放方向,一般Camera模组厂商提供的结构图纸中,Sensor都有一个基准方向,该基准用一个小人图像来表示,所以应确保小人竖直站立的方向为正方向,具体Camera摆放的位置请参考以下附件。如果Camera摆放方向错误,则需要联系SPM商讨解决方案。如果从软件上解决,则需要联系MTK MML软件工程师,修改HAL层代码来解决该问题。
<<手机摄像头成像设计规则0718.pdf>>
4. Camera Performance问题:
建议联系FAE工程师到现场调试解决问题,如预览水波纹、拍照曝光强度太高、颜色对比度太深等等。