RV1126 Video分析-----驱动各模块总览

RV1126 Video分析-----驱动各模块总览 txp 2023-12-26 15:51:53 340

一 通用理论:

1、硬件链接:

一般情况下,Camera和SOC有两个接口进行连接,分为为MIPI接口和I2C接口,其中MIPI接口用来传输图像的数据,数据传输路径为从Sensor传输到SOC。另一个接口为I2C接口,主要是用来SOC对Sensor初始化配置寄存器和摄像头参数的配置,比如要进行图像数据捕获的时候就需要通过i2c对Sensor的寄存器进行配置。

2、图像数据流:

光线经过Sensor之后,Sensor芯片经过ADC转换生成原始图像数据(raw),然后Sensor生成的原始图像数据(raw)经过MIPI总线进入SOC,进入SOC之后经过图像处理芯片(如ISP)进行图像处理。所以由此可以可以看出,Camera驱动V4L2一定有这3部分组成:

  • 第一部分与Sensor相关的,比如控制Sensor的寄存器进行配置,这一部分是有Sensor厂家提供。
  • 第二部分和MIPI相关的,需要MIPI进行图像传输,所以驱动应该就有这一部分的驱动,这部分一般是由SOC厂家提供。
  • 第三部分就是ISP部分,有些SOC有ISP图像处理模块,经过MIPI传输的图像进入SOC之后需要在传入SOC的ISP模块对图像进一步进行加工,所以一定是有一部分驱动是描述ISP模块的。

(光) ———-> [sensor] ——->(raw图像数据) ——->[mipi总线] ——->[图像处理芯片(如ISP)] ——-> (NV16/NV12等格式图像数据)

raw格式sensor的输出格式,是sensor将光信号转换为电信号时的电平高低的原始记录,没有经过处理的原始数据:

二 从DTS 中找到这三部分:

我们已经知道Camera有3部分的驱动,分别是描述Sensor、MIPI相关、图像处理芯片相关的,所以在dts中也有描述这3部分的。

第一部分:sensor 相关dts
&i2c1 {                                          

 tp2855_1: tp2855_1@44 {  

  compatible = "techpoint,tp2855";                        
  reg = <0x44>;  //i2c地址                     
  ...
  port {                                        
   ucam_out0: endpoint {                       
    remote-endpoint = <&csi_dphy0_input>; //Sensor连接到mipi
    data-lanes = <1 2 3 4>;                   
   };                                          
  };   
 }; 

 tp2855_2: tp2855_2@45 {
  compatible = "techpoint,tp2855";
  reg = <0x45>; //i2c地址         
  ...

  port {
   ucam_out1: endpoint {
    remote-endpoint = <&csi_dphy1_input>; //Sensor连接到mipi    csi_dphy1_input
    data-lanes = <1 2 3 4>; 
   };
  };
 };
};
第二部分:mipi物理总线相关:

对于RV1126和RV1106平台而言,支持两个DPHY硬件,存在两个独立而完备的标准物理mipi csi2 dphy,对应于dts上的csi_dphy0和csi_dphy1(参见rv1126.dtsi),特性如下:

data lane最大4 lanes;
最大速率2.5Gbps/lane;

sensor——mipi dphy:

//连接 0x44 前四通道 摄像头
&csi_dphy0 {                                     
 status = "okay";                 

  //mipi有两端一段连接Sensor,另一端连接 mipi_csi2_input
  ports {                                         
  #address-cells = <1>;                         
  #size-cells = <0>;                            
          //连接到Sensor                                        
  port@0 {                                      
   reg = <0>;                                  
   #address-cells = <1>;                       
   #size-cells = <0>;                          

   csi_dphy0_input: endpoint@1 {               
    reg = <1>;                                
    remote-endpoint = <&ucam_out0>;    // 连接到Sensor : ucam_out0       
    data-lanes = <1 2 3 4>;                   
   };                                          
  };                                            
         //连接到 mipi_csi2_input                             
  port@1 {                                      
   reg = <1>;                                  
   #address-cells = <1>;                       
   #size-cells = <0>;                          

   csi_dphy0_output: endpoint@0 {              
    reg = <0>;                                
    remote-endpoint = <&mipi_csi2_input>;     // 连接到 mipi_csi2_input
    data-lanes = <1 2 3 4>;                   
   };                                          
  };                                            
 };                                             
};                                             

//连接 0x45 后四通道摄像头             
&csi_dphy1 {                                     
 status = "okay";

  //连接到Sensor      
 ports {
  #address-cells = <1>;
  #size-cells = <0>;

  port@0 {
   reg = <0>;
   #address-cells = <1>;
   #size-cells = <0>;

   csi_dphy1_input: endpoint@1 {
    reg = <1>;
    remote-endpoint = <&ucam_out1>;// 连接到Sensor : ucam_out1 
    data-lanes = <1 2 3 4>;
   };
  };

   //连接到ISP   
  port@1 {
   reg = <1>;
   #address-cells = <1>;
   #size-cells = <0>;

   csi_dphy1_output: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&isp_in>; // 连接到ISP : isp_in
    data-lanes = <1 2 3 4>;
   };
  };
 };     
};
第三部分:mipi 协议解析相关 (MIPI Host)

每个mipi phy都需要一个csi2模块来解析mipi协议 sensor——mipi dphy —— mipi_csi2

&mipi_csi2 {                                     
 status = "okay";                                

 ports {                                         
  #address-cells = <1>;                         
  #size-cells = <0>;                            

  port@0 {                                      
   reg = <0>;                                  
   #address-cells = <1>;                       
   #size-cells = <0>;                          

   mipi_csi2_input: endpoint@1 {               
    reg = <1>;                                
    remote-endpoint = <&csi_dphy0_output>;    
    data-lanes = <1 2 3 4>;                   
   };                                          
  };                                            

  port@1 {                                      
   reg = <1>;                                  
   #address-cells = <1>;                       
   #size-cells = <0>;                          

   mipi_csi2_output: endpoint@0 {              
    reg = <0>;                                
    remote-endpoint = <&cif_mipi_in>;         
    data-lanes = <1 2 3 4>;                   
   };                                          
  };                                            
 };                                            
};
第四部分:图像处理芯片(vicap)相关

sensor——mipi dphy —— mipi_csi2——-vicap

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

&rkcif_mipi_lvds {                               
 status = "okay";                                
     rockchip,cif-monitor = <3 2 25 1000 5>;
  port {                                          
  /* MIPI CSI-2 endpoint */                     
  cif_mipi_in: endpoint {                       
   remote-endpoint = <&mipi_csi2_output>;      
   data-lanes = <1 2 3 4>;                     
  };                                            
 };                                            
};

图像处理芯片(isp)相关:

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

   isp_in: endpoint@0 {
    reg = <0>;
    remote-endpoint = <&csi_dphy1_output>;//连接到 mipi : csi_dphy1_output
   };
  };
 };                         
};

0x44 前四通道 连接关系 图像处理走vicap:

ucam_out0 - csi_dphy0_input - csi_dphy0_output - mipi_csi2_input <-> mipi_csi2_output


  tp2855_1@44        csi_dphy0                                 mipi_csi2                           rkcif_mipi_lvds
   ucam_out0 ---> csi_dphy0_input -- csi_dphy0_output   -->   mipi_csi2_input -- mipi_csi2_output   <--->    cif_mipi_in

前四通道 驱动拆分:

1 关于 sensor模块分析:sensor.c
  kernel\drivers\media\i2c\techpoint\techpoint_v4l2.c

2 关于 mipi 物理层 (csi dphy)模块 (csi_dphy0 / csi_dphy1)分析 : mipi_csi_dphy.c
  kernel\drivers\phy\rockchip\phy-rockchip-mipi-rx.c

3 关于 mipi解析模块( mipi csi)(MIPI Host)模块分析:mipi_csi.c
 kernel\drivers\media\platform\rockchip\cif\mipi-csi2.c


4 关于 图像处理vicap 模块分析:rkcif_mipi.c 
 kernel\drivers\media\platform\rockchip\cif\dev.c

0x45 后四通道 连接关系 图像处理走isp:

ucam_out1 - csi_dphy1_input - csi_dphy1_output <-> isp_in

tp2855_2@45           csi_dphy1      rkisp_vir0
ucam_out1  -->  csi_dphy1_input -- csi_dphy1_output   <--->  isp_in

由上面分析我们可以知道在Camera的框架中在不同板子或者说不同平台,有3部分是需要实现的。

  • 第一部分Sensor相关即不同板子摄像头选型肯定是不一样的,这部分的驱动就是要实现Sensor的初始化,寄存器的配置等,比如启动图像捕获的时候,需要配置寄存器,从应用层会使用一个ioctl一步一步的调用下来到驱动中,所以这部分是Sensor相关的,需要Sensor提供相应的驱动。
  • 第二部分MIPI相关,比如我们常用的SOC和Sensor连接就是使用MIPI接口,所以就需要实现MIPI相关部分的驱动,这部分一般来说是由SOC厂商进行提供。
  • 第三部分图像处理芯片(如ISP)部分,如果我们的SOC平台如果有ISP模块那么就有ISP模块部分的驱动代码,这部分也是SOC厂商提供的。

从dts的配置中我们可以看到,驱动的绑定路径为,从Sensor连接到MIPI然后MIPI连接到ISP,所以说Sensor捕获到的数据通过MIPI传入ISP,然后通过ISP处理后传动应用层进行处理,整个Camera的驱动框架大概就是这个流程。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
txp
红包 1 1 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
txp
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区