开发车载信息娱乐系统和产品的厂商面临着诸多挑战,下一代车载信息娱乐系统正以前所未有的创新速度变革驾乘体验。骁龙820A是专用的车用处理器,在连接性、图形显示、拍摄、电池续航能力及功率等方面给人以极致的体验。Qualcomm的系统化解决方案,结合了领先技术、规模和经验,支持先进车载信息娱乐系统的开发。
本文重点介绍骁龙820A上CPU和DSP在图像处理上的优势。汽车级骁龙820A处信息娱乐理器是一大亮点,它集成前沿的CPU、GPU 和DSP,帮助减少任务负载量、增强性能、降低功耗,并提升用户体验。
笔者所在公司正好有一个利用820A开发项目,主要是对820A上支持raw data数据的ov5647摄像头进行开发调试。由于ov5647摄像头使用较少,我们在开发过程中遇到了一些问题,这里小编把整个过程尽可能多的都记录下来,供大家参考。
笔者准备分成一个系列来写,这篇主要介绍ov5647的驱动移植。
对OV5647摄像头RAW数据的支持
DSP的主要功能是处理大量的音视频图像数据,摄像头无疑是这些图像数据的最大来源。笔者项目中采用ov5647摄像头模组具备五百万像素,并支持RAW格式拍摄的1/4寸的感光元件。具有极佳的弱光感光效果,并支持以每秒 60 帧录制 720p视频,或者支持以每秒 30帧拍摄1080p的视频。
ov5647的结构
下图是ov5647模组,该模组使用2组Mipi线,通过3.7V和GPIO1控制模组上三个电压转换芯片,对DVDD,AVDD和IOVDD供电,同时控制了模组上的外置晶振,从而初始化ov5647。
按照接口把ov5647的模组连接到820A处理器上,主要完成如下开发调试:
配置DTS
找到该Android版本的dtsi文件,添加ov5647的具体配置信息,在里面添加如下信息:
camera_vdddo_2v8: fixedregulator@1 {
compatible = "regulator-fixed";
regulator-name = "camera_vdddo";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
regulator-always-on;
};
&cci{
...
remote-endpoint = <&ov5647_ep>;
remote-endpoint = <&ov5647_2_ep>;
...
}
&blsp_i2c6{
...
ov5647_rear_camera:camera_rear@76 {
compatible = "ovti,ov5647";
reg = <0x76>;
enable-gpios = <&msmgpio 34 0>;
reset-gpios = <&msmgpio 35 1>;
pinctrl-names = "default";
pinctrl-0 = <&camera_rear_default>;
clocks = <&gcc GCC_CAMSS_MCLK0_CLK>;
clock-names = "xclk";
clock-frequency = <23880000>;
vdddo-supply = <&camera_vdddo_1v8>;
vdda-supply = <&camera_vdda_2v8>;
vddd-supply = <&camera_vddd_1v5>;
port {
ov5647_ep: endpoint {
clock-lanes = <1>;
data-lanes = <0 2>;
remote-endpoint = <&csiphy0_ep>;
};
};
};
...
}
按照系统要求增加和调试驱动
驱动文件放在kernel/drivers/media/i2c,参考ov5640摄像头驱动,增加初始化电压和GPIO1控制的代码,修改寄存器配置初始化参数,寄存器初始值根据datasheet设置.主要修改一下几个结构体:
reg_value ov5647_global_init_setting ,
reg_value ov5647_setting_vga,
reg_value ov5647_setting_sxga,
reg_value ov5647_setting_720p,
reg_value ov5647_setting_1080p,
ov5647_setting_full
小编以reg_value ov5647_global_init_setting为例
static struct reg_value ov5647_global_init_setting[] = {
{ 0x0100, 0x00 },
{ 0x0103, 0x01 },
// {REG_DLY,0x05},
{ 0x3035, 0x11 },
{ 0x3036, 0x69 },
{ 0x303c, 0x11 },
{ 0x3821, 0x07 },
{ 0x3820, 0x41 },
{ 0x370c, 0x0f },
{ 0x3612, 0x59 },
{ 0x3618, 0x00 },
{ 0x5000, 0x06 },
{ 0x5002, 0x40 },
{ 0x5003, 0x08 },
{ 0x5a00, 0x08 },
{ 0x3000, 0xff },
{ 0x3001, 0xff },
{ 0x3002, 0xff },
{ 0x301d, 0xf0 },
{ 0x3a18, 0x00 },
...
{ 0x3000, 0x00 },
{ 0x3001, 0x00 },
{ 0x3002, 0x00 },
{ 0x3017, 0xe0 },
{ 0x301c, 0xfc },
{ 0x3636, 0x06 },
{ 0x3016, 0x08 },
{ 0x3827, 0xec },
{ 0x3018, 0x44 },
{ 0x3035, 0x21 },
{ 0x3106, 0xf5 },
{ 0x3034, 0x1a },
{ 0x301c, 0xf8 }
};
配置config使得系统编译对应驱动
打开camera驱动以及挂在的i2c的宏,第一个是驱动相关的。
CONFIG_VIDEO_OV5647=y
CONFIG_CRYPTO_CRC32_ARM64=y
CONFIG_GPIO_PCA953X_IRQ=y
第二个是平台相关的配置,最后一个是具体硬件设计上GPIO的扩展芯片驱动,通过PCA953X芯片的GPIO扩展来驱动。