首页 > 其他分享 >RK3588-Camera:MIPI-CSI调试之通路解析

RK3588-Camera:MIPI-CSI调试之通路解析

时间:2023-06-08 19:06:09浏览次数:41  
标签:csi2 MIPI RK3588 camera isp mipi endpoint CSI 节点

一、简介

  • 本文介绍RK3588平台的Camera:MIPI-CSI调试之通路解析
  • MIPI联盟,即移动产业处理器接口(Mobile Industry Processor Interface 简称MIPI)联盟。MIPI(移动产业处理器接口)是 MIPI联盟发起的为移动应用处理器制定的开放标准和一个规范。
    目的是把手机内部的接口如摄像头、显示屏接口、射频/基带接口等标准化,从而减少手机设计的复杂程度和增加设计灵活性。
  • CSI & DSI
    • CSI ( Camera Serial Interface ):摄像头接口
    • DSI

二、 名词解释:

  • ISP
  • VICAP( Video capture ):视频捕获单元

三、RK3588 的camera通路:

多sensor支持:

  • 单路硬件isp最多支持4路复用,isp复用情况支持分辨率如下:
  • 2路复用:最大分辨率3840x2160,dts对应配置2路rkisp_vir设备。
  • 3路或4路复用:最大分辨率2560x1536,dts对应配置3或4路rkisp_vir设备。
  • 硬件支持最多采集7路sensor:6mipi + 1dvp,多sensor软件通路如下:

下图是RK3588 camera连接链路示意图,可以支持7路camera。

RK3588-Camera:MIPI-CSI调试之通路解析_数据

四、 链路解析:

RK3588-Camera:MIPI-CSI调试之通路解析_数据_02

  • 图中:mipi camera2---> csi2_dphy1
  • 对应节点:imx415 ---> csi2_dphy0
  • 链接关系:sensor---> csi2 dphy---->mipi csi host--->vicap
  • 实线链路解析: Camera sensor ---> dphy ---> 通过mipi_csi2模块解析mipi协议---> vicap ( rkcif节点代表vicap )
  • 虚线链路解析:vicap ---> rkcif_mipi_lvds2_sditf ---> isp
    每个vicap节点与isp的链接关系,通过对应虚拟出的XXX_sditf来指明链接关系。

五、RK3588硬件通路框图

RK3588-Camera:MIPI-CSI调试之通路解析_数据_03

  • rk3588支持2个isp硬件,每个isp设备可虚拟出多个虚拟节点,软件上通过回读的方式,依次从ddr读取每一路的图像数据进isp处理。对于多摄方案,建议将数据流平均分配到两个isp上。
  • 回读:指数据经过vicap采集到ddr,应用获取到数据后,将buffer地址推送给isp,isp再从ddr获取图像数据。

六、详细解析:

  1. imx415 : Camera sensor
  2. csi2_dphy0 : rk3588支持2个dphy硬件,这里我们称之为dphy0_hw/dphy1_hw ,,两个dphy硬件都可以工作在full mode 和split mode两种模式下。

当使用dphy0_hw:

  • full mode:节点名称使用csi2_dphy0,最多支持4 lane。 当dphy0_hw使用full mode时,链路需要按照csi2_dphy1这条链路来配置,但是节点名称csi2_dphy1需要修改为csi2_dphy0,软件上是通过phy的序号来区分phy使用的模式。
  • split mode:拆分成2个phy使用,分别为csi2_dphy1(使用0/1 lane)、csi2_dphy2(使用2/3 lane),每个phy最多支持2 lane。

当使用dphy1_hw:

  • full mode:节点名称使用csi2_dphy3,最多支持4 lane。 当dphy1_hw使用full mode时,链路需要按照csi2_dphy4这条链路来配置,但是节点名称csi2_dphy4需要修改为csi2_dphy3,软件上是通过phy的序号来区分phy使用的模式。
  • split mode:拆分成2个phy使用,分别为csi2_dphy4(使用0/1 lane)、csi2_dphy5(使用2/3 lane),每个phy最多支持2 lane。
  1. dcphy: rk3588支持两个dcphy,节点名称分别为csi2_dcphy0/csi2_dcphy1。每个dcphy硬件支持RX/TX同时使用,对于camera输入使用的是RX。支持DPHY/CPHY协议复用;需要注意的是同一个dcphy的TX/RX只能同时使用DPHY或同时使用CPHY。其他dcphy参数请查阅rk3588数据手册。
  2. 使用上述mipi phy节点,需要把对应的物理节点配置上。 (csi2_dcphy0_hw/csi2_dcphy1_hw/csi2_dphy0_hw/csi2_dphy1_hw)
  3. 每个mipi phy都需要一个csi2模块来解析mipi协议,节点名称分别为mipi0_csi2~mipi5_csi2。
  4. rk3588所有camera数据都需要通过vicap,再链接到isp。rk3588仅支持一个vicap硬件,这个vicap支持同时输入6路mipi phy,及一路dvp数据,所以我们将vicap分化成rkcif_mipi_lvds~rkcif_mipi_lvds5、rkcif_dvp等7个节点,各个节点的绑定关系需要严格按照框图的节点序号配置。
  5. 每个vicap节点与isp的链接关系,通过对应虚拟出的XXX_sditf来指明链接关系。
  6. rk3588支持2个isp硬件,每个isp设备可虚拟出多个虚拟节点,软件上通过回读的方式,依次从ddr读取每一路的图像数据进isp处理。对于多摄方案,建议将数据流平均分配到两个isp上。
  7. 直通与回读模式: •直通:指数据经过vicap采集,直接发送给isp处理,不存储到ddr。需要注意的是hdr直通时,只有短帧是真正的直通,长帧需要存在ddr,isp再从ddr读取。
    •回读:指数据经过vicap采集到ddr,应用获取到数据后,将buffer地址推送给isp,isp再从ddr获取图像数据。
    •在dts配置时,一个isp硬件,如果只配置一个虚拟节点,默认使用直通模式,如果配置了多个虚拟节点默认使用回读模式。

七、单路Camera的dts配置说明:( 以imx415摄像头为例 )

  • 案例场景:这里使用的是csi2_dphy0的单路camera配置:
  • 链路配置: imx415 —> csi2_dphy0 —> mipi2_csi2 —> rkcif_mipi_lvds2—>rkcif_mipi_lvds2_sditf —>rkisp0_vir2
&i2c3 {
	status = "okay";

	imx415: imx415@1a {
		status = "okay";
		compatible = "sony,imx415";
		reg = <0x1a>;
		clocks = <&cru CLK_MIPI_CAMARAOUT_M3>;
		clock-names = "xvclk";
		pinctrl-names = "default";
		pinctrl-0 = <&mipim0_camera3_clk>;
		power-domains = <&power RK3588_PD_VI>;
		pwdn-gpios = <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>;
		reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;
		rockchip,camera-module-index = <0>;
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "CMK-OT2022-PX1";
		rockchip,camera-module-lens-name = "IR0147-50IRC-8M-F20";
		port {
			imx415_out0: endpoint {
				remote-endpoint = <&mipidphy0_in_ucam0>;
				data-lanes = <1 2 3 4>;
			};
		};
	};

	camera_imx219: camera-imx219@10 {
		status = "disabled";
		compatible = "sony,imx219";
		reg = <0x10>;

		clocks = <&clk_cam_24m>;
		clock-names = "xvclk";

		rockchip,camera-module-index = <0>;
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "rpi-camera-v2";
		rockchip,camera-module-lens-name = "default";

		port {
			imx219_out0: endpoint {
				remote-endpoint = <&mipidphy0_in_ucam1>;
				data-lanes = <1 2>;
			};
		};
	};
};

&csi2_dphy0_hw {
	status = "okay";
};

&csi2_dphy0 {
	status = "okay";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipidphy0_in_ucam0: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&imx415_out0>;
				data-lanes = <1 2 3 4>;
			};

			mipidphy0_in_ucam1: endpoint@2 {
				reg = <2>;
				remote-endpoint = <&imx219_out0>;
				data-lanes = <1 2>;
			};
		};

		port@1 {
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;

			csidphy0_out: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&mipi2_csi2_input>;
			};
		};
	};
};

&mipi2_csi2 {
	status = "okay";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipi2_csi2_input: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&csidphy0_out>;
			};
		};

		port@1 {
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipi2_csi2_output: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&cif_mipi2_in0>;
			};
		};
	};
};

&rkcif {
	status = "okay";
};

&rkcif_mipi_lvds2 {
	status = "okay";

	port {
		cif_mipi2_in0: endpoint {
			remote-endpoint = <&mipi2_csi2_output>;
		};
	};
};

&rkcif_mipi_lvds2_sditf {
	status = "okay";

	port {
		mipi_lvds2_sditf: endpoint {
			remote-endpoint = <&isp0_vir0>;
		};
	};
};

&rkcif_mmu {
	status = "okay";
};

&rkisp0 {
	status = "okay";
};

&isp0_mmu {
	status = "okay";
};

&rkisp0_vir0 {
	status = "okay";

	port {
		#address-cells = <1>;
		#size-cells = <0>;

		isp0_vir0: endpoint@0 {
			reg = <0>;
			remote-endpoint = <&mipi_lvds2_sditf>;
		};
	};
};

&pinctrl {
	camera {
		cam_pwdn_gpio: cam-pwdn-gpio {
			rockchip,pins = <1 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};
};

八、 调试技巧

8.1 i2c设备的通用调试命令:查看设备是否挂载到i2c总线下:

i2cdetect -y 3

8.2 摄像命令

  • Linux系统摄像命令:
gst-launch-1.0 v4l2src device=/dev/video11 ! video/x-raw,format=NV12,width=3840,height=2160, framerate=30/1 ! xvimagesink
  • Android系统:
    Android系统自带相机APP。点击APP,看摄像画面是否正常显示。

8.3 imx415 相关的log信息

dmesg | grep imx415

8.4 查看拓扑结构

media-ctl -d /dev/media0 -p

标签:csi2,MIPI,RK3588,camera,isp,mipi,endpoint,CSI,节点
From: https://blog.51cto.com/u_16120916/6442247

相关文章

  • CSI架构和原理
    CSICSI简介CSI的诞生背景K8s原生支持一些存储类型的PV,如iSCSI、NFS、CephFS等等,这些in-tree类型的存储代码放在Kubernetes代码仓库中。这里带来的问题是K8s代码与三方存储厂商的代码强耦合:更改in-tree类型的存储代码,用户必须更新K8s组件,成本较高in-tree存......
  • ESXI里多个存储,找到对应存储ISCSI的IP地址
    ESXI里多个存储,找到对应存储ISCSI的IP地址   存储→数据存储→点你想知道的存储名称,(lhISCSI)点进来后复制数据区0的一堆文字,这里是naa.600a098000b6280d000001d859092b40,分区1  到存储→适配器→配置iSCSI在静态目标里面找到600a098000b6280d对应的IP是192.168.1.......
  • Windows使用iscsi存储
    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。邮箱:[email protected]说明在windos下挂载使用iscsi磁盘,需要使用iscsi发起程序连接到远端磁盘,如果该磁盘有多条路径还需要配置多路径软件把多块磁盘聚合成一块磁盘,满足系统的高可用需求。1识别iscsi磁盘通......
  • Centos 6/7上搭建iscsi服务
    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。邮箱:[email protected]说明文章指导在Centos6和Centos7两个不同版本的服务器上安装并配置iscsi服务把本地磁盘提供给网络中其他服务器使用。文章是基于yum源及IP地址,防火墙配置完成过后的状态进行配置的,操作......
  • 在Jetson Xavier NX上使用CSI板载摄像头的相关资料
    官方网址https://www.yahboom.com/study/jetson-xavier-nxJetson开发板学习资料(百度网盘下载)提取码:sm6o板载摄像头和外壳的安装https://www.yahboom.com/study_module/jn-camera启动摄像头打开终端,输入下方的命令,即可启动摄像头:nvgstcapture-1.0想关掉摄像头的额话,直......
  • RHEL8使用iSCSI部署网络存储-Linux就这么学17
        本章首先介绍计算机硬件存储设备的不同接口的优缺点,并由此切入iSCSI技术主题的讲解。iSCSI技术实现了物理硬盘设备与TCP/IP网络协议的相互结合,使得用户能够通过互联网方便地访问远程机房提供的共享存储资源。我们将学习在Linux系统上部署iSCSI服务端程序,并分别......
  • CSI2协议-DPHY 数据格式包
       ......
  • :ArmSoM研发团队联合Banana pi开源社区基于Rockchip RK3588 soc发布了ArmSoM W3 单板计
    ArmSoM推出的W3rk3588单板计算机采用核心板+底板设计方式,核心板采用LGA封装方式,核心板尺寸仅45mm50mm4.1mm,且RK3588SOC所有Pin脚对外引出。ArmSoMW3单板计算机接口示意图如下:[email protected][email protected],8nmGPUA......
  • MS1861/HDMI、LVDS输入/MIPI(DSI-2)LVDS输出/支持窗口放大、旋转
    1.  基本介绍MS1861 单颗芯片集成了HDMI、LVDS 和数字视频信号输入; 输出端可以驱动MIPI(DSI-2)、 LVDS 、Mini-LVDS 以及 TTL 类型 TFT-LCD 液晶显示。可支持对输入视频信号进行滤波,图 像增强, 锐化, 对比度调节, 视频缩放, 裁剪, 旋转, 内部字符(图形)叠加,帧频变化......
  • RK3588安装ROS 解决Rviz以及Gazebo报错问题
    RK3588安装ROS解决Rviz以及Gazebo报错问题InfoOperatingSystem&VersionUbuntu20.04KernelVersion(LinuxOnly)5.10.110PlatformROC-RK3588S-PC一、前言记录一下在RK3588上安装ubuntu20.04和ROS的过程,很早之前配置过,最近又重新配置了一遍,特此记录一......