当前位置: 首页 > news >正文

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

获取更多相关的【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";  // 启用视频后处理
}

http://www.lryc.cn/news/593519.html

相关文章:

  • Android Auto 即将推出新功能
  • 7月19日日记
  • NJU 凸优化导论(9) 对偶(II)KKT条件+变形重构
  • react+antd+表格拖拽排序以及上移、下移、移到顶部、移到底部
  • Git仓库使用
  • 网络原理——TCP
  • string【下】- 内功修炼(搓底层)
  • 零基础 “入坑” Java--- 十二、抽象类和接口
  • LibreTv在线观影项目部署开箱即用
  • QT窗口(5)-对话框
  • MySQL基础教程
  • 变频器实习Day10
  • 06-人机共生:Prompt之外的思考
  • VRRP-虚拟路由冗余协议
  • Spring AI 项目实战(十九):Spring Boot + AI + Vue3 + OSS + DashScope 构建多模态视觉理解平台(附完整源码)
  • 【HarmonyOS】Ability Kit - Stage模型
  • java: DDD using sql server 2019 or Oracle21c
  • 【嵌入式电机控制#16】电流环(三):过采样提高采集精度看门狗监测总线电压
  • C++类和对象(一)基础内容讲解
  • 【项目分享】动手做一个TypeC转TTL模块(附带原理图)
  • Spring MVC @RequestParam注解全解析
  • 数据库第四次作业
  • 【C++】初识C++(2)
  • 完美解决 Ubuntu 中自定义启动器图标重复的问题(以 MATLAB 为例)
  • nginx.conf模版
  • 基于GEE与哨兵2号的土地覆盖分类方法及实现
  • python网络爬虫之selenium库(二)
  • uview-ui使用u-row+u-avatar居中布局
  • uview-ui使用u-icon文字图标展示
  • react+antd 可拖拽模态框组件