Rockchip ISP 使用教程

Table of Contents

1. RKISP 简介

ISP 包含了一系列的图像处理算法模块,主要包含:暗电流矫正、坏点矫正、3A、HDR、镜头阴影矫正、镜头畸形矫正、3DLUT、 去噪(包含 RAW 域去噪、多帧降噪、颜色去燥等)、锐化等。由于不同传感器的差异以及拍摄环境的多样性,传感器输出的原始 数据和人们预期的图像有一定差距,因此 ISP 就起到两相当重要的作用。例如:夜间光照不足、大雾、沙尘等,均会使采集的图 像造成影响,存在成像模糊、噪声污染及曝光不均等问题,而经过 ISP 图像处理的图像会有明显的优化。

1.1. RKISP 和 RKAIQ

RKISP 包含硬件算法实现及软件逻辑控制两个部分。RKAIQ 为软件逻辑控制部分的实现。

RKAIQ 软件模块主要实现的功能为:从 ISP 驱动获取图像统计,结合 IQ Tuning 参数,使用一系列算法计算出新的 ISP、Sensor 等硬件参数,不断迭代该过程,最终达到最优的图像效果。

1.2. RKISP 系统框图

Sensor 输出数据流给 ISP HW,ISP HW 再输出经过一系列图像处理算法后的图像。RKAIQ 不断的从 ISP HW 获取统计数据,并经过 3A 等算法生成新的参数反馈给各硬件模块。

rkisp-system.png

1.3. RKISP 软件架构框图

rkisp-sofware.png

1.4. RKISP 硬件链接框图

rkisp-hardware.png

1.5. 硬件通路框图

rk3588-hardware.png

1.6. 多摄像头软件通路

单路硬件 ISP 最多支持 4 路复用,ISP 复用情况支持分辨率如下:

  • 2 路复用:最大分辨率为 3840x2160
  • 3 路或 4 路复用:最大分辨率为 2560x1536

mulitcamera.png

2. 设备端使能 rkisp

2.1. 内核驱动

CONFIG_PHY_ROCKCHIP_CSI2_DPHY=y
CONFIG_VIDEO_ROCKCHIP_CIF=y
CONFIG_VIDEO_ROCKCHIP_ISP=y
CONFIG_VIDEO_ROCKCHIP_ISP_VERSION_V30=y
CONFIG_VIDEO_ROCKCHIP_ISPP=y
CONFIG_VIDEO_ROCKCHIP_ISPP_VERSION_V20=y

2.2. 设备树

&rkcif {
        status = "okay";
};

&rkcif_mmu {
        status = "okay";
};

&csi2_dphy0_hw {
        status = "okay";
};

&csi2_dphy1 {
        status = "disabled";
        ports {
                #address-cells = <1>;
                #size-cells = <0>;
                port@0 {
                        reg = <0>;
                        #address-cells = <1>;
                        #size-cells = <0>;

                        mipidphy1_in_ucam2: endpoint@2 {
                                reg = <2>;
                                remote-endpoint = <&og02b1b_1_out1>;
                                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>;
                        };
                };
        };
};

&i2c1{
        status = "okay";

        og02b1b: og02b1b@60 {
                compatible = "ovti,og02b1b";
                status = "disabled";
                reg = <0x60>;
                clocks = <&cru CLK_MIPI_CAMARAOUT_M1>;
                clock-names = "xvclk";
                pinctrl-names = "default";
                pinctrl-0 = <&mipim1_camera1_clk>;
                power-domains = <&power RK3588_PD_VI>;
                reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>;
                rockchip,camera-module-index = <0>;
                rockchip,camera-module-facing = "back";
                rockchip,camera-module-name = "og02b1b";
                rockchip,camera-module-lens-name = "hcfa-og02b1b-sensor";
                port {
                        og02b1b_1_out1: endpoint {
                                remote-endpoint = <&mipidphy1_in_ucam2>;
                                data-lanes = <1 2>;
                        };
                };
        };
};

&mipi2_csi2 {
        status = "disabled";
        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_mipi_in2>;
                        };
                };
        };
};

&rkcif_mipi_lvds2 {
        status = "disabled";
        port {
                cif_mipi_in2: endpoint {
                        remote-endpoint = <&mipi2_csi2_output>;
                };
        };
};

&rkcif_mipi_lvds2_sditf {
        status = "disabled";
        port {
                mipi2_lvds_sditf: endpoint {
                        remote-endpoint = <&isp0_vir0>;
                };
        };
};

&rkisp0_vir0 {
        status = "disabled";
        port {
                #address-cells = <1>;
                #size-cells = <0>;
                isp0_vir0: endpoint@0 {
                        reg = <0>;
                        remote-endpoint = <&mipi2_lvds_sditf>;
                };
        };
};

2.3. 验证

dmesg | grep og02b1b # 摄像头 Sensor
# [   29.149878] og02b1b 1-0060: driver version: 00.01.05
# [   29.170266] og02b1b 1-0060: Detected OG02B1B 3f 02 0b sensor
# [   29.204766] og02b1b 1-0060: Consider updating driver og02b1b to match on endpoints
# [   29.205466] rockchip-csi2-dphy csi2-dphy1: dphy1 matches m00_b_og02b1b 1-0060:bus type 5
dmesg | grep dphy # Rockchip 的 csi2 的 phy
# [   28.557481] rockchip-csi2-dphy-hw fedc0000.csi2-dphy0-hw: csi2 dphy hw probe successfully!
# [   28.558352] rockchip-csi2-dphy-hw fedc8000.csi2-dphy1-hw: csi2 dphy hw probe successfully!
# [   29.205466] rockchip-csi2-dphy csi2-dphy1: dphy1 matches m00_b_og02b1b 1-0060:bus type 5
# [   29.208028] rockchip-csi2-dphy csi2-dphy1: csi2 dphy1 probe successfully!
dmesg | grep rkcif # Rockchip 的摄像头接口
# [   28.931171] rkcif rkcif-mipi-lvds2: rkcif driver version: v00.02.00
# [   28.932749] rkcif rkcif-mipi-lvds2: attach to cif hw node
# [   29.016251] rockchip-mipi-csi2: probe success, v4l2_dev:rkcif-mipi-lvds2!
# [   29.207247] rkcif-mipi-lvds2: Async subdev notifier completed
dmesg | grep rkisp # Rockchip 的 rkisp
# [   29.028228] rkisp rkisp0-vir0: rkisp driver version: v02.04.00
# [   29.029315] rkisp rkisp0-vir0: No memory-region-thunderboot specified
# [   29.208531] rkisp0-vir0: Async subdev notifier completed
# [   29.496732] rkisp rkisp0-vir0: clear unready subdev num: 0

3. RKAIQ 相关工具

RKAIQ 为 Rockchip 提供的 ISP 参数调试工具。在 Rockchip 官方 SDK 中有提供。此处采用第三方开发板厂商上传的版本, 下载链接为 khadas-edge2/externalcameraenginerkaiq

3.1. 编译

cmake -DARCH=aarch64 \
      -DCMAKE_BUILD_TYPE=MinSizeRel \
      -DCMAKE_SKIP_RPATH=TRUE \
      -DCMAKE_EXPORT_COMPILE_COMMANDS=YES \
      -DRKAIQ_TARGET_SOC=rk3588 \
      -DISP_HW_VERSION=-DISP_HW_V30 \
      -DRKAIQ_BUILD_BINARY_IQ=OFF \
      -DRKAIQ_USE_RAWSTREAM_LIB=OFF \
      -DRKAIQ_HAVE_FAKECAM=ON \
      -DRKAIQ_ENABLE_AF=ON \
      -B build .

3.2. 运行测试

RKAIQ 主要提供两个工具, rkaiq_tool_serverrkaiq_3A_server 。两个工具的使用方法参考官方相关文档。 第三方上传文档 RockchipIQToolsGuideCNv2.0.8.pdf

3.2.1. rkaiq_tool_server

该工具的主要的作用是在线调试 ISP 参数。

3.2.2. rkaiq_3A_server

该工具的主要的作用是加载 ISP 参数。

4. 参考文献

Date: 2025-07-31 Thu 00:00

Author: taocheng

Created: 2025-11-12 Wed 11:00

Validate