camera 总结简述

camera ISP算法,常用调试工具如下:

光源箱、MacBeth色卡(MCC)、MCC模板、ISO12233分辨率卡、ISO12233-2014倾斜边缘色卡、Kodak Q-14灰度卡、实用图像QA-77反射分辨率卡、透明OECF10000:1背光灯色卡、DNP5100K背光灯、LV光源(5000K 到5500K色温下,4到14.5 LV)、照度计、中性密度(ND)滤镜、ND滤镜套件、磨砂柔光镜、ND 滤镜和磨砂柔光镜底座和支架、带钳可调支架等。

ISP Tunning:

ADRC、ABF34、RNR、ACE、AEC、 ASF、AWB、黑电平、CAC、通道均衡、色度抑制、CCM、校正缺陷像素、去马赛克、Gamma、GIC2、GTM、HDR、镜头光源阴影控制、LTM、MCE、PDAF、SCE、SNR、HNR、WNR、强化线条边缘清晰度并消除点状噪点等。

camera框架 (框架目录可以看我的另外一篇文章)

camera chi初始化与数据交互流程(HAL3,CHI overrride Module),pipeline配置自定义Usecase,如NodesList、Link、Range、Formats,调试如:pipeline配置ZSL快照、MFNR多帧降噪(排查Blend、Postfilter等)

debug ZSL, MFNR, MFSR, QCFA 数据配置,捕获接口信息分析PublishPerFrameSensorMetaData等信息修复异常配置(熟悉多个数据格式切换流程).

普通异常:修复sensor i2cFrequency模式配置异常与通信主频异常,ISP数据帧连接异常、CHIUSECASE 排查双摄情况(MultiCameraIdRole、LowPowerMode等)、自动对焦排查遥感稳定性、场景切换、平移检测等。

双摄pipeline数据异常排查、双摄帧速率异常修复、修复PipelineDelay丢帧、sensor device crash 或应用crash 、预览卡屏、黑屏、画面延迟(时钟排查)等。

从业以来参与camera项目有5个以上,编译过的camera项目代码版本也比较多,简历中有部分描述。

从事camera相关工作有几年了,简单总结了部分调试细节。

camera调试部分操作

修改对应arm类型配置信息,生成库映射

vendor: sensor_libs中配置Bayer、YUV设备参数,修改目录如mm-camera中的modules生成对应的lib。

kernel配置sensor(需要对应kernel平台,360度摄像头需要特别声明dtsi),配置目录如kernel/arch/arm/boot/dts; kernel/drivers/media/platform/../sensor;kernel/arch/arm/configs/target_defconfig

库目录控制vendor/.../proprietary/common/config/device-vendor.mk

传感器名称在sensor_init中声明sensor_libs[]中添加。

独立管脚配置:.dtsi中配置cam_suspend的GPIO号,目录如devicetree/bindings/media/video;kernel/arch/arm/boot/dts;配置相应的cci_suspend,不用pinctrl可在.dtsi中的GPIO节点添加GPIO配置(gpio-req-tbl-label),

按顺序配置cam_clk:clock = clock_gcc; clock-names = "cam_src_clk", "cam_clk";

PMIC句柄配置: vdig,vana,vio,vaf。

初始化

sensor_init_params中声明modes_supported配置2D,3D模式,position配置font,back,sensor_mount_angle等

sensor数据输出Bayer或yuv数据(format),根据连接模式实现MIPI数据传输或并联(connection_mode:SENSOR_MIPI_CSI )。raw_output设定输出数据大小。

Bayer设备配置(camera_id,slave_addr,.addr_type, power_setting_array 等)

sensor_id_info 配置寄存器地址,

sensor_power_setting配置上电/掉电时序(根据size_down配置逻辑),通过power_setting配置独立的GPIO/CLK/VREG通信情况(seq_val、delay等)

sensor_lib_out_info_t配置输出格式,x_output,y_output,消隐,op_pixel_clk(MIPI DDR),mode 等。

根据sensor厂商参数配置ISP相关的参数,曝光行数上限等,根据MIPI CSI2协议传输图像数据,根据芯片配置DPHY,基本有通道编号,启用双摄连等接情况,CSID硬件索引,lane_cnt数据量控制等,可以通过android设备camss_phy0_csi0phytimer_clk查看执行情况,分析DDR_CLK 工作频率,时钟周期持续时间,settle_cnt配置处理数据流传输模式容错。

计算数据速率(吞吐量):根据MIPI DDR时钟工作频率与激活的数据通道数计算得到数据吞吐量,影响因素如水平或垂直消隐,数据类型、虚拟像素、线数、内存使用情况等。

配置CSI_RAW相关参数,设定虚拟通道和数据类型

寄存器:init_reg_setting i2c_reg_setting 配置独立Node寄存器操控图像效果,配置分辨率,曝光度等。

MIPI开启执行周期(简述:Sot[LP11-LP01-LP00],Eot[LP00-LP11]),clk和通道配置start_reg_array[]

CCI运行速度配置sensor_slave_info,CCI频率值可计算定制。

配置目标设备kernel/arch/arm/boot/dts子文件的sensor-mtp.dtsi制定AF驱动,cci配置cell-index、actuator-src等配置对应的PMIC设备树节点,配置对应的GPIO pin,在sensors/actuator_libs添加对应的驱动文件,actuator_driver_ctrl_t触发i2c打开对应的lib

PMIC IC制定led_flash的功耗范围值,vendor中led_flash目录实现modules层闪光灯接口与kernel目录中sensor/flash映射,在kernel/arch/boot中配置对应平台中camera-sensor-mtp.dtsi,配置devicetree中的soc节点led_flash, &i2c中的led_flash0,配置驱动和GPIO gpio-flash-en 等。

kernel中提供i2c_driver接口实现probe函数,cci操控提供函数platform_driver实现probe函数,通过fctrl设定flash_i2c_client实现func_tbl操控驱动设备(flash_get_subdev_id,flash_led_config,flash_led_init等)。

led_init 的时候声明addr_type=CAMERA_I2C_BYTE_ADDR

部分设备使用EEPROM配置sensor校准,在modules/sensors/eeprom/中定义,同样在sensor-mtp.dtsi中添加。在devicetree/bindings中添加cci配置EEPROM对应的eeprom-name和slave-addr、GPIO,在mudule中定义lib_func_ptr实现func的校准函数

sensor/includes/sensor_lib.h可自定义修改sensor_slave_info、sensor_res_cfg_table_t、sensor_power_setting_array、camera_csid_lut_params等

业绩:1.修复led关闭PWM功能缺失需要添加gpio控制。

2.检测dtsi配置csid-sd-index、csiphy-sd-index与lib中构造的编号是否一致

3.dtsi节点唯一,CLK_LOOKUP时钟源对应dtsi节点,dtsi文件中cell-index与sensor_slave_info数组中camera_id一致,根据sensor设备规格设定上电掉电逻辑,部分硬件不能适配I2C速度模式,验证cci寄存器日志,通过更改i2c_freq_mode来更改i2c速度(i2c_freq_mode)。

4.SOF异常SOF freeze排查 mct/bus/mct_bus.c mct_bus_sof_thread_run

5.VFE溢出MIPI的数据排查与修复(kernel/drivers/media/platform/.../ispif)

6.开启csid排查MIPI数据丢失,修复错误堆栈。

 

你可能感兴趣的:(camera 总结简述)