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

【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.xdnf.cn/news/15746.html

相关文章:

  • [Python] -实用技巧10- 时间处理:datetime 和 time 模块入门
  • 【数据结构初阶】--双向链表(二)
  • 跨境卖家紧急自查,Endryko Karmadi四季版画版权维权
  • 【嵌入式电机控制#16】电流环(三):过采样提高采集精度看门狗监测总线电压
  • 【Linux系统】进程控制
  • 从0开始学习R语言--Day51--PH检验
  • OpenCV 官翻 1 -介绍、安装、功能概览、核心操作
  • 云计算与 DevOps(开发与运维)
  • sqli-labs靶场通关笔记:第32-33关 宽字节注入
  • Java 中的继承与多态
  • 基于GEE与哨兵2号的土地覆盖分类方法及实现
  • Vue Swiper组件
  • n8n教程分享,从Github读取.md文档内容
  • MySQL(145)如何升级MySQL版本?
  • 【爬虫】04 - 高级数据存储
  • Fortran实战:快速解析气象NC数据
  • OpenCV 官翻8 - 其他算法
  • 牛客-倒置字符串
  • SQL Server和PostgreSQL填充因子
  • debian的pulseaudio删掉也没事
  • SIMATIC WinCC Unified 使用 KPI 优化流程
  • Nacos配置管理
  • 【Unity3D实例-功能-移动】角色移动-通过WSAD(Rigidbody方式)
  • Kafka、RabbitMQ 与 RocketMQ 高可靠消息保障方案对比分析
  • TinyMCE 富文本编辑器在 vue2 中的使用 @tinymce/tinymce-vue
  • MySQL——约束类型
  • Vue 3 中封装并使用 IndexedDB 的完整教程(含泛型、模块化、通用 CRUD)
  • 网络爬虫概念初解
  • 【Unity】YooAsset问题记录
  • 如何在HTML5页面中嵌入视频