RK3562 camera调试:MIPI资源和配置

文章详细介绍了RK3562芯片的相机资源,包括2路DPHY,4个CSI接口,1个VICAP控制器和1个ISP控制器,支持4路MIPIcamera。硬件框图展示了不支持DVP接口。配置部分阐述了前后摄切换的dts配置示例,涉及CSI接口、数据lanes的设置。总结提到RK3562配置相对简单,重点关注4lane和2x2lane模式的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章给大家介绍一下RK新的一颗RK3562的camera资源以及MIPI的配置。

目录

(1)RK3562 camera资源

①RK3562 camera硬件框图

 ②MIPI-CSI资源

③VICAP资源

④ISP资源

⑤最多支持camera数量

(2)dts配置

(3)总结


(1)RK3562 camera资源

①RK3562 camera硬件框图

RK3562 camera 资源硬件如下所示,拥有2路DPHY,4路CSI HOST,一个vicap控制器,1个isp控制器。 其中2路DPHY可以分解成4x2lane的模式工作。

这边需要注意的是,RK3562不支持DVP接口。

 ②MIPI-CSI资源

RK3562的MIPI-CSI资源如下:

TypeMAX bandwidthBUMMode
DPHYDPHY-v1.22.5G/bps x 4lane24lane or 2x2lane

 RK3562有2个4lane的DPHY,DPHY可以拆分模式按照4个2lane进行工作,有4个CSI-HOST工作,总计可以接入4路MIPI camera。2lane最大带宽是5G。

③VICAP资源

接口数量输入输出
VICAP1

MIPI CSI 4路IDs虚拟通道

MIPI CSI RAW8/10/12/14, YUV422

MIPI DSI RGB888

NV16/NV12/YUV400/YUYV

紧凑/非紧凑 RAW

RGB888

④ISP资源

RK3562 的ISP属于RK ISP v3.2 lite版本,拥有1个ISP,最高处理13M30的数据量。

工作模式吞吐率最大分辨率输入格式
单CIS13M@30fps4224x3136VICAP: raw8/raw10/raw12

多路camera的应用时,只要总计吞吐率小于13M@30即可。

⑤最多支持camera数量

根据上述,RK3562有4个MIPI-CSI接口,最多可以支持4路2lane的camera。4路camera的连接框图如下所示:

(2)dts配置

根据上述,RK3562至多可以同时接入4路 2lane的MIPI摄像头,这边先配置场景的2路camera前后摄切换的场景,2路双摄或者4路同时的配置,下篇文章再介绍。

两路前后摄切换配置如下:

ov13855 -> csi2_dphy0 -> mipi0_csi2 -> rkcif_mipi_lvds...->rkisp_vir0

gc8034 -> csi2_dphy4 -> mipi2_csi2 -> rkcif_mipi_lvds2...->rkisp_vir0

&csi2_dphy0 {
	status = "okay";

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

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

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

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

			csidphy0_out: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&mipi0_csi2_input>;
				data-lanes = <1 2 3 4>;
			};
		};
	};
};

&csi2_dphy4 {
	status = "okay";

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

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

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

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

			csidphy4_out: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&mipi2_csi2_input>;
				data-lanes = <1 2>;
			};
		};
	};
};

&i2c4 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&i2c4m0_xfer>;

	dw9763: dw9763@c {
		compatible = "dongwoon,dw9763";
		status = "okay";
		reg = <0x0c>;
		rockchip,vcm-max-current = <120>;
		rockchip,vcm-start-current = <20>;
		rockchip,vcm-rated-current = <90>;
		rockchip,vcm-step-mode = <3>;
		rockchip,vcm-t-src = <0x20>;
		rockchip,vcm-t-div = <1>;
		rockchip,camera-module-index = <0>;
		rockchip,camera-module-facing = "back";
	};

	ov13855: ov13855@36 {
		status = "okay";
		compatible = "ovti,ov13855";
		reg = <0x36>;
		clocks = <&cru CLK_CAM0_OUT2IO>;
		clock-names = "xvclk";
		pwdn-gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_HIGH>;
		avdd-supply = <&vcc2v8_dvp>;
		dovdd-supply = <&vcc_mipipwr>;
		dvdd-supply = <&vcc1v2_dvp>;
		rockchip,camera-module-index = <0>;
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "KYT-10203-v1";
		rockchip,camera-module-lens-name = "default";
		lens-focus = <&dw9763>;

		port {
			ov13855_out0: endpoint {
				remote-endpoint = <&mipi_in_ucam0>;
				data-lanes = <1 2 3 4>;
			};
		};
	};

	gc8034: gc8034@37 {
		compatible = "galaxycore,gc8034";
		status = "okay";
		reg = <0x37>;
		clocks = <&cru CLK_CAM0_OUT2IO>;
		clock-names = "xvclk";
		pwdn-gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>;
		avdd-supply = <&vcc2v8_dvp>;
		dovdd-supply = <&vcc_mipipwr>;
		dvdd-supply = <&vcc1v2_dvp>;
		rockchip,camera-module-index = <1>;
		rockchip,camera-module-facing = "front";
		rockchip,camera-module-name = "KYT-10203-v1";
		rockchip,camera-module-lens-name = "default";
		port {
			gc8034_out0: endpoint {
				remote-endpoint = <&mipi_in_ucam1>;
				data-lanes = <1 2>;
			};
		};
	};
};

&csi2_dphy0_hw {
	status = "okay";
};

&csi2_dphy1_hw {
	status = "okay";
};

&mipi0_csi2 {
	status = "okay";

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

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

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

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

			mipi0_csi2_output: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&cif_mipi_in>;
				data-lanes = <1 2 3 4>;
			};
		};
	};
};

&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 = <&csidphy4_out>;
				data-lanes = <1 2>;
			};
		};

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

			mipi2_csi2_output: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&cif_mipi_in2>;
				data-lanes = <1 2>;
			};
		};
	};
};

&rkcif {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&camm0_clk0_out>;
};

&rkcif_mipi_lvds {
	status = "okay";

	port {
		cif_mipi_in: endpoint {
			remote-endpoint = <&mipi0_csi2_output>;
		};
	};
};

&rkcif_mipi_lvds2 {
	status = "okay";

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

&rkcif_mipi_lvds_sditf {
	status = "okay";

	port {
		mipi_lvds_sditf: endpoint {
			remote-endpoint = <&isp_vir0_in0>;
		};
	};
};

&rkcif_mipi_lvds2_sditf {
	status = "okay";

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

&rkcif_mmu {
	status = "okay";
};

&rkisp {
	status = "okay";
};

&rkisp_mmu {
	status = "okay";
};

&rkisp_vir0 {
	status = "okay";

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

		isp_vir0_in0: endpoint@0 {
			reg = <0>;
			remote-endpoint = <&mipi_lvds_sditf>;
		};
		isp_vir0_in1: endpoint@1 {
			reg = <1>;
			remote-endpoint = <&mipi_lvds2_sditf>;
		};
	};
};

&pinctrl {
	cam {
		mipicam_pwr: mipicam-pwr {
			rockchip,pins =
				/* camera power en */
				<3 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};
};

(3)总结

RK3562只有MIPI接口,配置起来比较简单,只需要注意4lane的使用和2x2lane 的使用区别,下次再讲一下RK3562多摄的配置。

### 关于RK3588芯片与MIPI屏幕连接时的调试波形分析工具方法 对于RK3588芯片与MIPI屏幕之间的连接,在进行调试尤其是针对信号质量方面的工作时,通常会涉及到对传输线路上物理层特性的检测。为了确保数据能够稳定无误地从处理器发送到显示屏,工程师们依赖特定类型的设备来捕获并解析这些高速串行接口上的电信号模式。 #### 使用逻辑分析仪捕捉MIPI D-PHY信号 一种常见的做法是利用逻辑分析仪配合探针适配器来获取MIPI DSI (Display Serial Interface) 或CSI (Camera Serial Interface) 的D-PHY差分线路中的活动情况[^4]。这类仪器可以记录下低电压摆幅下的快速变化脉冲序列,并通过软件界面直观展示出来供进一步研究。值得注意的是,由于MIPI协议采用了低压差分信令(LVDS),因此选择支持LVDS标准且具有足够采样率支持多通道同步采集功能的专业级产品尤为重要。 #### 应用专用测试夹具简化操作流程 除了上述提到的一般性测量手段外,市场上也存在专门为嵌入式视觉应用设计的解决方案——即所谓的“测试夹具”。它们往往集成了必要的硬件组件以及图形化的控制面板,使得即使是没有太多经验的技术人员也能轻松完成复杂的设置任务。例如,某些型号可能已经预设好了适用于不同品牌或规格显示器的最佳实践方案,从而大大缩短了前期准备时间并提高了工作效率[^1]。 #### 利用开源项目辅助开发过程 另外值得一提的是,在Linux社区内存在着多个致力于改善Rockchip SoC平台用户体验的努力成果。其中一些包含了用于监控调整显示子系统的实用程序,比如可以通过命令行查询当前状态或者强制刷新配置文件等功能。虽然这并非直接关联于实际电气特性层面的数据收集工作,但对于整体诊断思路的确立仍然有着积极意义[^5]。 ```bash cat /sys/kernel/debug/dri/0/summary ``` 此命令可以帮助确认系统是否正确识别到了外部连接的监视器及其基本属性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人生苦短,菜的抠脚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值