说明:最近调试了下rk3288-android9下的ov13850,碰到了一些坑,现整理记录下,避免以后继续踩坑。

一. 代码路径

1.camera代码路径

2.hal3_camera层代码路径

3.camera_engine代码路径

二:修改内容

1. hal3用到的camera3_profile.xml

a.SDK 下文件路径
    sdk/hardware/rockchip/camera/etc/camera/camera3_profiles_rk3288.xml
b.目标板路径:
vendor/etc/camera/camera3_profiles.xml
c. 编译时复制路径:
hardware/rockchip/camera/etc/camera_etc.mk

2. 3A库相关文件

3A库为瑞芯微提供so文件,但是不提供源码。需要编译拷贝到项目板
a. 编译配置路径:
hardware/rockchip/camera_engine_rkisp/interface/Android.mk
b. 复制文件路径:
device/rockchip/common/device.mk
# CAMERA
ifeq ($(BOARD_CAMERA_SUPPORT),true)
PRODUCT_PACKAGES += \\
    librkisp_aec \\
    librkisp_awb \\
    librkisp_af 
c. 目标板路径:
vendor/lib/rkisp/ae
vendor/lib/rkisp/awb
vendor/lib/rkisp/af

3. 3A库的tunning文件路径

a. tunning文件在SDK的路径
hardware/rockchip/camera_engine_rkisp/iqfiles/ov13850_CMK-CT0116_Largan-50013A1.xml 
b. 对应摄像头的命名方式
<sensor_name>_<module_name>_<lens_name>.xml
c. 目标板路径:
vendor/etc/camera/rkisp1/

4. 内核修改

&i2c3 {
    
    status = "okay";
    clock-frequency = <400000>;

        vm149c: vm149c@0c {
                compatible = "silicon touch,vm149c";
                status = "okay";
                reg = <0x0c>;
        rockchip,vcm-start-current = <20>; // 马达的启动电流
        rockchip,vcm-rated-current = <80>; // 马达的额定电流
        rockchip,vcm-step-mode = <13>; // 马达驱动 ic 的电流输出模式
                rockchip,camera-module-index = <0>;
                rockchip,camera-module-facing = "back";
        };

    ov13850: ov13850@10 {
        compatible = "ovti,ov13850"; // 需要与驱动中的匹配字符串一致
        status = "okay";
        reg = <0x10>; // sensor I2C 设备地址
        clocks = <&cru SCLK_VIP_OUT>; // sensor clickin 配置
        clock-names = "xvclk";
                avdd-supply = <&dvp_pwr>;
                dovdd-supply = <&dvp_pwr>;
                dvdd-supply = <&dvp_pwr>;
//      reset-gpios = <&gpio2i RK_PB5 GPIO_ACTIVE_HIGH>;
        // reset 管脚分配及有效电平
        pwdn-gpios = <&gpio2 13 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&isp_mipi>;
        // power 管脚分配及有效电平
//      pinctrl-names = "rockchip,camera_default";
//      pinctrl-0 = <&cif_clkout>; // pinctl 设置
        rockchip,camera-module-index = <0>; // 模组编号,该编号不要重复
        rockchip,camera-module-facing = "back"; // 模组朝向,有"back"和"front"
        rockchip,camera-module-name = "CMK-CT0116"; // 模组名
        rockchip,camera-module-lens-name = "Largan-50013A1"; // lens 名
        // 模组名和 lens 名被用来和 IQ xml 文件做匹配
        lens-focus = <&vm149c>; // vcm 驱动设置,支持 AF 时需要有这个设置
        port {
            ucam_out0: endpoint {
            remote-endpoint = <&mipi_in_ucam0>;
            // mipi dphy 端的 port 名
            data-lanes = <1 2>;
            // mipi lane 数, 1lane 为 <1>, 4lane 为 <1 2 3 4>
            };
        };
    };

};
&mipi_phy_rx0 {
    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 = <&ucam_out0>;
                // sensor 端的 port 名
                data-lanes = <1 2>;
                // mipi lane 数, 1lane 为 <1>, 4lane 为 <1 2 3 4>
            };
        };
        port@1 {
            reg = <1>;
            #address-cells = <1>;
            #size-cells = <0>;
            dphy_rx0_out: endpoint@0 {
                reg = <0>;
                remote-endpoint = <&isp0_mipi_in>;
                // isp 端的 port 名
            };
        };
    };
};

&rkisp1 {
    status = "okay";
    port {
        #address-cells = <1>;
        #size-cells = <0>;
        isp0_mipi_in: endpoint@0 {
            reg = <0>;
            remote-endpoint = <&dphy_rx0_out>;
            // mipi dphy 端的 port 名
        };
    };
};
&isp_mmu {
    status = "okay"; // isp 驱动使用了 iommu,所以 isp iommu 也需要打开
};
&isp {  //rkisp和isp 复用,只能使用一个,rkisp为hal3,isp为hal1
    status = "disabled";
};
*rockchip_defconfig配置*

CONFIG_VIDEO_OV13850=y
CONFIG_VIDEO_VM149C=y

三. 调试工具

v4l2-ctl.7z

media-ctl.zip

四. 调试方法

1.判断isp驱动加载状态

grep '' /sys/class/video4linux/video*/name
/sys/class/video4linux/video3/name:rkisp1_selfpath
/sys/class/video4linux/video4/name:rkisp1_mainpath
/sys/class/video4linux/video5/name:rkisp1-statistics
/sys/class/video4linux/video6/name:rkisp1-input-params

2.判断camera驱动是否加载成功

dmesg | grep Async
[ 0.682982] rkisp1: Async subdev notifier completed

3. 3A库调试开关

setprop persist.vendor.rkisp.log 0xffffffff

4. 解析IQ文件出错或未找到IQ文件的logcat

"failed to get iq file name"
"load tunning file failed"

5. 确认3A是否有运行

6. 设置mipi摄像头前置

1.修改dts
rockchip,camera-module-facing = "front";
2.修改camera3_profiles.xml
 <!-- Lens -->
 <lens.facing value="FRONT"/>
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐