这篇文章给大家介绍一下RK新的一颗RK3562的camera资源以及MIPI的配置。
目录
(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资源如下:
Type | MAX bandwidth | BUM | Mode | |
DPHY | DPHY-v1.2 | 2.5G/bps x 4lane | 2 | 4lane or 2x2lane |
RK3562有2个4lane的DPHY,DPHY可以拆分模式按照4个2lane进行工作,有4个CSI-HOST工作,总计可以接入4路MIPI camera。2lane最大带宽是5G。
③VICAP资源
接口 | 数量 | 输入 | 输出 |
VICAP | 1 | 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的数据量。
工作模式 | 吞吐率 | 最大分辨率 | 输入格式 |
单CIS | 13M@30fps | 4224x3136 | VICAP: 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多摄的配置。