RK开发板(四)imx415 bring-up 本篇主要内容一、基础知识1. D-PHY和CSI2简介2. RK平台ISP简介1VICAP / RKCIF、STDIF2VPSS3CIF3. RK平台Camera到ISP链路示意图二. 设备树配置一、基础知识1. D-PHY和CSI2简介✔️MIPIMobal Industry Process Interface - 移动行业处理接口为构建一套移动设备接口的统一规范MIPI之下制定了许多标准协议其中CSI和DSI分别针对移动设备摄像头和屏幕显示这些属于MIPI协议层✔️MIPI D-PHY和C-PHYMIPI物理层总线协议是其中较为常见的两种✔️CSICamera Serial Interface - 摄像头串行接口由MIPI联盟制定的摄像头接口标准工作于摄像头与SOC的控制器之间包含了CSI-2和CSI-3这两个实现上的最大区别在于物理层不同CSI3要求用的是MPHYCSI2用的是CPHY和DPHY。在开发板上sensor出图链路中DPHY主要处理的是sensor输出的最原始的高速差分电信号得到可用比特流CSI-2将比特流按协议封装成图像数据流RAW图后续再经过ISP处理输出人眼可见的清晰图像当然这部分流程还需要经过复杂的图像调试2. RK平台ISP简介1VICAP / RKCIF、STDIF✔️VICAP - Video Input Capture Process瑞芯微SOC的视频采集IP,在设备树里可能写成CIF(rkcif)。链路中主要就是对接上一小节提到的经过CSI-2封装后的RAW数据将数据通过DMA写到内存完成RAW数据的Capture后再接入ISP。驱动层是基于v4l2 / media框架实现。✔️VICAP并不是直接链接到ISP而是需要通过虚拟桥接节点STDIF接到ISP的虚拟输入端rkisp_vir0最后才会真正到达ISP实体单元做真正的图像处理曝光、白平衡、对焦等等的复杂处理图像处理的主要模块就是下面的VPSS了。2VPSS✔️VPSS - Video Processing Sub System 视频处理子系统) 是可⼀路或多路输出的图像处理模块包含mirror(⽔平镜像、cover/mosaic(视频遮挡/⻢赛克)、(crop)视频裁剪、 (scl)缩放、 (aspt)边缘填充、 flip(垂直镜像)等功能。3CIF✔️CIFcmos image sensor实际上就是指的sensorRK平台可支持多种接口的sensor如MIPI接口、LVDS接口DVP接口等。对接ISP都需要经过VICAP在原厂设备树里也定义了对应的节点如rkcif_mipi_lvdsrkcif_dvprkcif就是vicap前面已解释以上大致就是从sensor出发到用户层出图像这一链路涉及的节点3. RK平台Camera到ISP链路示意图二. 设备树配置✔️实际上sensor的适配往往需要我们调试ISP由于cmos的物理光学特性理论上不同的cmos对环境和光敏感程度不同因此需要ISP针对性的标定参数才能将其转化为色彩准确、低噪、高动态范围的人眼可见图像。在sensor原厂亦或是相关半导体原厂都会由专门的ISP tunner工程师调试也依赖相关设备和专业实验室。非相关从业人员ISP tunner的工作也高度依赖原厂sensor 原厂、ISP平台方、模组厂的经验和支持实际上瑞芯微ISP tunner也不对个人开放据相关从业大佬说rk给企业调试都不能旁观只能说专业的事由专业的人做。✔️本节内容只是适配好imx415驱动使用的是原厂调试好的参数没有isp tunner的过程实际就是只做到前面所讲的链路能通一般这一步称为sensor的bring-up阶段。i2c3{statusokay;pinctrl-0i2c3m1_pins;imx415_0:imx415_01a{compatiblesony,imx415;reg0x1a;clockscru CLK_MIPI0_OUT2IO;clock-namesxvclk;reset-gpiosgpio4 RK_PA0 GPIO_ACTIVE_LOW;power-gpiosgpio4 RK_PA2 GPIO_ACTIVE_HIGH;pinctrl-namesdefault;pinctrl-0cam_clk0_pins;rockchip,camera-module-index0;rockchip,camera-module-facingback;rockchip,camera-module-namedefault;rockchip,camera-module-lens-namedefault;port{imx415_out0:endpoint{remote-endpointcsi_dphy_input0;// sensor - mipi物理总线data-lanes1234;};};};};// sensor - mipi物理总线 - mipi csi-2协议层csi2_dphy0{statusokay;ports{#address-cells1;#size-cells0;port0{reg0;#address-cells1;#size-cells0;csi_dphy_input0:endpoint1{reg1;remote-endpointimx415_out0;data-lanes1234;};};port1{reg1;#address-cells1;#size-cells0;csidphy0_out:endpoint0{reg0;remote-endpointmipi0_csi2_input;};};};};// sensor - mipi物理总线 - mipi csi-2协议层 - vicap(cif_mipi_in0)mipi0_csi2{statusokay;ports{#address-cells1;#size-cells0;port0{reg0;#address-cells1;#size-cells0;mipi0_csi2_input:endpoint1{reg1;remote-endpointcsidphy0_out;};};port1{reg1;#address-cells1;#size-cells0;mipi0_csi2_output:endpoint0{reg0;remote-endpointcif_mipi_in0;};};};};rkcif{statusokay;};rkcif_mipi_lvds{statusokay;port{cif_mipi_in0:endpoint{remote-endpointmipi0_csi2_output;};};};//sensor - mipi物理总线 - mipi csi-2协议层 - vicap(cif_mipi_in0) - stditf虚拟接口 - isp_vir0rkcif_mipi_lvds_sditf{statusokay;port{mipi_lvds_sditf:endpoint{remote-endpointisp_vir0;};};};rkisp_vir0{statusokay;port{#address-cells1;#size-cells0;isp_vir0:endpoint0{reg0;remote-endpointmipi_lvds_sditf;};};};rkisp_vir0_sditf{statusokay;};rkcif_mmu{statusokay;};rkisp{statusokay;};rkisp_mmu{statusokay;};rkaiisp{statusokay;};rkaiisp_mmu{statusokay;};rkaiisp_vir0{statusokay;};✔️关于imx415的不同帧率驱动可见以下文档 《RV1126B三imx415不同帧率驱动调试》本文为笔者调试imx415的60-120fps驱动所整理。