最近一段时间都在用A31评估几颗5M的摄像头,包括ov5640、MT9P001、ov2710。A31下移植不同的摄像头驱动的好处在于,驱动结构规范化,采用video_device下的suddev的架构方式来处理sensor。A31下的移植主要关注几个配置文件+对硬件驱动的初始化配置即可。调试的目的是先跑起来后优化。
以下面的COMS为列,我们需要主要摄像头的以下几个电压值:
典型5M摄像头的芯片电压配置
| 摄像头型号 I2C地址 | AVDD | DVDD | IODD | Reset | PWDN |
| 三星S5k4ec 0x5a | 2.8V | 1.5V | 2.8V | ||
| MT9P001 | 2.8V | 1.8V | 2.8V | 2.8V | 2.8V |
| OV5640 0x78 | 2.8V | 1.5V | 2.8V | 2.8V | 2.8V |
| OV2710 | 3.3V | 1.5V | 1.8V | 1.5V |
对于配置文件需要关注sys_config.fex与init.sun6i.rc文件。以及对应的驱动文件。
1. 对于sys_config.fex,从硬件上要关注的是摄像头的输出、core电压。
输出数据fmt指的是Raw Bayer data还是YUV data.这个决定了配置sys_config.fex是使用A31的ISP还是Sensor自带了ISP。比如:
01.
vip_dev0_mname = "ov2710"
02.
vip_dev0_twi_id = 0
03.
vip_dev0_twi_addr = 0x6c
04.
vip_dev0_isp_used = 1
05.
vip_dev0_fmt = 1
06.
vip_dev0_stby_mode = 0
07.
vip_dev0_vflip = 0
08.
vip_dev0_hflip = 1
09.
vip_dev0_iovdd = "axp22_dldo3"
10.
vip_dev0_iovdd_vol = 2800000
11.
vip_dev0_avdd = "axp22_ldoio0"
12.
vip_dev0_avdd_vol = 2800000
13.
vip_dev0_dvdd = "axp22_eldo1"
14.
vip_dev0_dvdd_vol = 1800000
15.
vip_dev0_afvdd = ""
16.
vip_dev0_afvdd_vol = 2800000
还有一个是camera_list_para,主要用于驱动加载时的自检测使用,说明当前对应的摄像头是要被自检测的:
01.
[camera_list_para]
02.
camera_list_para_used = 1
03.
ov7670 = 0
04.
gc0308 = 0
05.
gt2005 = 0
06.
hi704 = 0
07.
sp0838 = 0
08.
mt9p001 = 0
09.
mt9m113 = 0
10.
gc2035 = 0
11.
ov2655 = 0
12.
hi253 = 0
13.
gc0307 = 0
14.
mt9d112 = 0
15.
ov5640 = 0
16.
ov5647 = 0
17.
gc2015 = 0
18.
ov2643 = 0
19.
gc0329 = 0
20.
gc0309 = 0
21.
tvp5150 = 0
22.
s5k4ec = 0
23.
ov5650_mv9335 = 0
24.
siv121d = 0
25.
ov2710 = 1
2、
完成了基础的配置文件后(主要给A31的VFE使用),剩余驱动文件
这里包括sensor的驱动和cam_detect的驱动(添加对应的detect源码,更新camera_list)
01.
__camera_list_t camera_list[MAX_CAMERA_LIST_ITEM] = {
02.
CAMERA_LIST_ITEM_INIT(ov7670, 1, 1, 0x42, 1, 0, 0, 1, 1, 0),
03.
CAMERA_LIST_ITEM_INIT(gc2035, 1, 1, 0x78, 1, 0, 0, 1, 1, 0),
04.
CAMERA_LIST_ITEM_INIT(gc0308, 1, 1, 0x42, 1, 0, 0, 1, 1, 0),
05.
CAMERA_LIST_ITEM_INIT(gt2005, 2, 1, 0x78, 0, 1, 0, 1, 1, 0),
06.
CAMERA_LIST_ITEM_INIT(hi704, 1, 1, 0x60, 1, 0, 0, 1, 1, 0),
07.
CAMERA_LIST_ITEM_INIT(sp0838, 1, 1, 0x30, 1, 0, 0, 1, 1, 0),
08.
CAMERA_LIST_ITEM_INIT(mt9m112, 1, 2, 0xba, 1, 0, 0, 1, 1, 0),
09.
CAMERA_LIST_ITEM_INIT(mt9m113, 2, 2, 0x78, 1, 0, 0, 1, 1, 0),
10.
CAMERA_LIST_ITEM_INIT(ov2655, 2, 1, 0x60, 1, 0, 0, 1, 1, 0),
11.
CAMERA_LIST_ITEM_INIT(hi253, 1, 1, 0x40, 1, 0, 0, 1, 1, 0),
12.
CAMERA_LIST_ITEM_INIT(gc0307, 1, 1, 0x42, 1, 0, 0, 1, 1, 0),
13.
.........
14.
};
3.修改init.sun6i.rc,添加insmod 加载ko驱动文件:
1.
#add mt9p001/ov2710 camera
2.
insmod /system/vendor/modules/mt9p001.ko
3.
insmod /system/vendor/modules/ov5640.ko
4.
insmod /system/vendor/modules/ov2710.ko
5.
insmod /system/vendor/modules/s5k4ec.ko
6.
insmod /system/vendor/modules/vfe_v4l2.ko
4.考虑摄像头是内置VCM还是外控VCM
一般sensor有ISP的话,支持3A就一般会是集成了内置vcm.直接由sensor来控制vcm.
而外控是指的处理器经过3A后,负责都sensor的VCM进行控制,而这些sensor不带ISP。
基本上对sensor的移植就是对以上内容的修改、配置、编码就是这些内容。
最后
以上就是单身短靴最近收集整理的关于全志A31下5M的CMOSCamera移植修改记录表的全部内容,更多相关全志A31下5M内容请搜索靠谱客的其他文章。
发表评论 取消回复