1. Camera 简介
-
ArmSoM系列产品使用的是mipi-csi接口的摄像头
-
ArmSoM-Sige7支持双摄同显:
2. RK3588硬件通路框图
-
rk3588支持2个isp硬件,每个isp设备可虚拟出多个虚拟节点,软件上通过回读的方式,依次从ddr读取每一路的图像数据进isp处理。对于多摄方案,建议将数据流平均分配到两个isp上。
-
回读:指数据经过vicap采集到ddr,应用获取到数据后,将buffer地址推送给isp,isp再从ddr获取图像数据。
3. 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。
4. 链路解析:
- 图中:mipi camera2---> csi2_dphy1 ---> mipi2_csi2 ---> rkcif_mipi_lvds2--->rkcif_mipi_lvds2_sditf --->rkisp0_vir2
- 对应节点:imx415 ---> csi2_dphy0 ---> mipi2_csi2 ---> rkcif_mipi_lvds2--->rkcif_mipi_lvds2_sditf --->rkisp0_vir2
- 链接关系: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来指明链接关系。
5. ArmSoM-Sige7双路Camera调试
这里以imx415摄像头为例,解析ArmSoM-Sige7双路Camera调试
5.1 原理图
Camera1:CSI0_MIPI:
Camera2: CS1_MIPI:
5.2 双路Camera的dts配置:
- 链路配置1: imx415 —> csi2_dphy0 —> mipi2_csi2 —> rkcif_mipi_lvds2—>rkcif_mipi_lvds2_sditf —>rkisp0_vir2
- 链路配置2: imx415 —> csi2_dphy3 —> mipi4_csi2 —> rkcif_mipi_lvds4—>rkcif_mipi_lvds4_sditf —>rkisp1_vir1
&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>;
};
};
};
};
&i2c4 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c4m1_xfer>;
imx415_1: imx415_1@1a {
status = "okay";
compatible = "sony,imx415";
reg = <0x1a>;
clocks