【RK3576】【Android14】摄像头&MIPI开发调试

发布于:2025-07-20 ⋅ 阅读:(15) ⋅ 点赞:(0)

获取更多相关的【RK3576】【Android14】驱动开发,可收藏系列博文,持续更新中:
【RK3576】Android 14 驱动开发实战指南


简介

RK3576支持摄像头相关功能:

MIPI DCPHY CSI RX:一路 4Lane DPHY 或者一路 3Trios MIPI CPHY 信号输入,通过 80pin 座子接入。

 MIPI DPHY CSI RX:两路 4Lane DPHY 信号输入,均支持可拆分成 2x2Lane,通过 80pin 座子接入。

硬件接口

驱动开发

【RK3576】【Kernel 6.1】Camera驱动目录说明:

Linux Kernel-6.1:|
        |-- arch/arm64/boot/dts/rockchip  //DTS 配置文件
        |-- drivers/phy/rockchip/
                |-- phy-rockchip-mipi-rx.c  //mipi dphy 驱动
        |-- drivers/media
                |-- platform/rockchip/isp1 rkisp1 isp 驱动
        |-- i2c/ 
                |-- ov13850.c  //CIS(cmos image sensor)驱动
                |-- vm149c.c  //VCM driver ic 驱动
        |-- spi/ rk1608  //ap driver 驱动
                |-- rk1608.c  //注册 rk1608 spi 设备
                |-- rk1608_dev.c  //注册/dev/rk_preisp misc 设备
                |-- rk1608_dphy.c  //注册 v4l2 media 节点,与 rk1608 和 AP 端交互

DTS配置

RK3576 平台的 Camera Interface (CIF) 设备树配置,分成好几个部分,分别为Sensor → DPHY0 → MIPI CSI2 → RKCIF → ISP → VPSS。

传感器部分dts配置

imx415: imx415@1a {
 compatible = "sony,imx415";  // 驱动匹配
 reg = <0x1a>;                // I2C从地址
 clocks = <&cru 56>;          // 传感器时钟源
  pinctrl-names = "default";
  pinctrl-0 = <&cam_clk0m0_clk0>;  //管脚复用
 power-domains = <&power 15>; // 电源域控制
 avdd-supply = <&vcc_mipidcphy0>; // 模拟电压
 port {
  imx415_out0: endpoint {
   remote-endpoint = <&mipi_in_ucam0>; // 与DPHY绑定
   data-lanes = <1 2 3 4>;  // 通道映射
  }
 }
}

DPHY部分dts配置(数据采集)

配置MIPI CSI-2 DPHY0物理层接口,用于连接多个摄像头传感器。5路摄像头通过MIPI CSI-2 DPHY0输入

&csi2_dcphy0 {
 status = "okay";  // 启用物理层接口
 ports {
  port@0 {        // 传感器输入端口
   endpoint@1 {   // IMX415 传感器
    data-lanes = <1 2 3 4>;  // 4通道MIPI
   }
   ...            // 其他5个传感器端点
  }
  port@1 {        // 输出到协议层
   csidcphy0_out: endpoint@0 {
    remote-endpoint = <&mipi0_csi2_input>;
   }
  }
 }
}

MIPI CSI部分dts配置(协议处理)

MIPI CSI-2协议层控制器,处理来自DPHY的数据流。MIPI CSI2控制器MIPI协议解析与数据包重组(实现 CSI-2 协议到 V4L2 标准的转换)。

ports {
 port@0 {
  mipi0_csi2_input: endpoint@1 {
   remote-endpoint = <&csidcphy0_out>;  // 接收物理层数据
  }
 }
 port@1 {
  mipi0_csi2_output: endpoint@0 {
   remote-endpoint = <&cif_mipi_in0>;  // 输出到CIF
  }
 }
}

RKCIF部分dts配置(图像处理)

启用摄像头接口核心。原始数据接收和格式转换。

rkcif: rkcif@27c10000 {
  compatible = "rockchip,rk3576-cif";  //用于绑定 RK3576 的 CIF 驱动
  reg = <0x0 0x27c10000 0x0 0x800>;
  reg-names = "cif_regs";
  interrupts = <0 318 4>;
  interrupt-names = "cif-intr";
  clocks = <&cru 366>, <&cru 367>, <&cru 365>,
    <&cru 385>, <&cru 386>,
    <&cru 387>, <&cru 388>,
    <&cru 389>;
  clock-names = "aclk_cif", "hclk_cif", "dclk_cif",
         "i0clk_cif", "i1clk_cif",
         "i2clk_cif", "i3clk_cif",
         "i4clk_cif";  //配置了 8 组时钟,涵盖总线时钟和摄像头输入时钟
  resets = <&cru 855>, <&cru 856>, <&cru 854>,
    <&cru 945>, <&cru 946>,
    <&cru 947>, <&cru 948>,
    <&cru 949>;
  reset-names = "rst_cif_a", "rst_cif_h", "rst_cif_d",
         "rst_cif_iclk0", "rst_cif_iclk1", "rst_cif_iclk2",
         "rst_cif_iclk3", "rst_cif_iclk4";
  assigned-clocks = <&cru 365>;
  assigned-clock-rates = <600000000>;
  power-domains = <&power 15>;
  rockchip,grf = <&ioc_grf>;
  iommus = <&rkcif_mmu>;   //IOMMU 设备:绑定 rkcif_mmu 用于内存地址转换
  status = "disabled";
 };

 rkcif_mipi_lvds: rkcif-mipi-lvds {
  compatible = "rockchip,rkcif-mipi-lvds";
  rockchip,hw = <&rkcif>;
  iommus = <&rkcif_mmu>;
  status = "disabled";
 };


&rkcif_mipi_lvds {
 port {
  cif_mipi_in0: endpoint {
   remote-endpoint = <&mipi0_csi2_output>;  // 接收CSI2数据
  }
 }
}

ISP部分dts配置(图像处理)

启用ISP(图像信号处理器)核心。执行HDR、3A(自动对焦/曝光/白平衡)等处理。

&rkisp_vir0 {
 port {
  isp_vir0: endpoint@0 {
   remote-endpoint = <&mipi_lvds_sditf>;  // 接收CIF数据
  }
 }
}

VPSS部分dts配置(图像处理)

启用VPSS(用于缩放、去噪等后处理)。后处理优化(如缩放、锐化)。

&rkvpss_vir0 {
 status = "okay";  // 启用视频后处理
}


网站公告

今日签到

点亮在社区的每一天
去签到