ITPub博客

首页 > 移动开发 > ANDROID > RK3399 camera驱动开发

RK3399 camera驱动开发

原创 ANDROID 作者:tt7643066 时间:2019-09-20 09:08:07 2 删除 编辑
camera驱动开发

Android camera驱动开发

概述

目前板子上有两路mipi rx,可以接双摄像头。

DTS配置

1、Enabled  isp

  1. & isp0  {
        status  =   "okay" ;
    };
    & isp1  {
        status  =   "okay" ;
    };
    & isp0_mmu  {
        status  =   "okay" ;
    };
    & isp1_mmu  {
        status  =   "okay" ;
    };

2、Enabled mipi对应的i2c

  1. & i2c1  {
        status  =   "okay" ;
    };

camera驱动(默认为OV9750)

1、android 驱动代码路径

hardware/rockchip/camera/SiliconImage/isi/drv/OV9750_A

2、编译生成的libisp_isi_drv_OV9750_A.so 放置于/vendor/lib/hw

3、cp hardware/rockchip/camera/SiliconImage/isi/drv/OV9750_A/calib/ OV9750_A.xml  /vendor/etc/

4、cp hardware/rockchip/camera/Config/cam_board_rk3399.xml /vendor/etc/cam_board.xml

xml 配置

1、根据电路图为camera上电,并配置rst,pdn,以下按mipi0配置电压以及相关gpio,I2C通道(1),mipi phy 通道(0),IO 电压 1.8v、CORE电压1.8v、模拟电压:3.2v,具体请看电路图、以及OV9750 datasheet。

Linux camera驱动开发

概述

RK3399Pro toybrick  开发板分别带有两个MIPI,一个DVP摄像头接口,MIPI支持最高4K拍照,并支持 1080P 30fps以上视频录制。此外,开发板还支持 USB 摄像头。

本文以  OV9750  摄像头为例,讲解在该开发板上的配置过程。

配置原理

由以下电路图可知,两路MIPI摄像头连接的是不同的ISP和I2C通道。

MIPI0 :使用 ISP0 和 I2C1 ,还需配置 MIPI_MCLK0 、 MIPI_PDN 、 MIPI_RST

MIPI1 :使用 ISP1 和 I2C2 ,还需配置 MIPI_MCLK_T2 、 JMIPI_PDN2 、 JMIPI_RST2


DTS配置

配置isp节点

  1. cif_isp0 :  cif_isp@ff910000  {
                compatible  =   "rockchip,rk3399-cif-isp" ;
                rockchip , grf  =   <& grf >;
                reg  =   < 0x0   0xff910000   0x0   0x4000 >,   < 0x0   0xff968000   0x0   0x8000 >;
                reg - names  =   "register" ,   "dsihost-register" ;
                clocks  =
                     <& cru ACLK_ISP0_NOC >,   <& cru ACLK_ISP0_WRAPPER >,
                     <& cru HCLK_ISP0_NOC >,   <& cru HCLK_ISP0_WRAPPER >,
                     <& cru SCLK_ISP0 >,   <& cru SCLK_DPHY_RX0_CFG >,
                     <& cru SCLK_CIF_OUT >,   <& cru SCLK_CIF_OUT >,
                     <& cru SCLK_MIPIDPHY_REF >;
                clock - names  =
                     "aclk_isp0_noc" ,   "aclk_isp0_wrapper" ,
                     "hclk_isp0_noc" ,   "hclk_isp0_wrapper" ,
                     "clk_isp0" ,   "pclk_dphyrx" ,
                     "clk_cif_out" ,   "clk_cif_pll" ,
                     "pclk_dphy_ref" ;
                interrupts  =   < GIC_SPI  43  IRQ_TYPE_LEVEL_HIGH  0 >;
                interrupt - names  =   "cif_isp10_irq" ;
                power - domains  =   <& power RK3399_PD_ISP0 >;
                rockchip , isp , iommu - enable  =   < 1 >;
                iommus  =   <& isp0_mmu >;
                status  =   "disabled" ;
                       };
    & isp0  {
       status  =   "okay" ;
            };
     
    & isp0_mmu  {
        status  =   "okay" ;
                };
    & cif_isp0 {
    rockchip , camera - modules - attached = <& camera0 >;
      status = "okay" ;
    };

设置CPU MCLK引脚功能

  1. & pinctrl  {
    /* */
         cam_mclk  {
              cam_default_pins :  cam - default - pins  {
                                rockchip , pins  =   < 2   11  RK_FUNC_3  & pcfg_pull_none >;
                                           };
                 };
               };

在i2c上配置camera节点,mipi0 camera连接到i2c1上

  1. & i2c1  {
             status  =   "okay" ;     /* 使能i2c1 */
              /*
             * 一般写成cameraX:camera-module@ID,其中X为序号,ID为camera的7bit I2C地址
                      * camera0表示节点名,绑定isp节点时,将camera0 attach到isp0
                      */
        camera0 :  camera - module @ 10   {
           status  =   "okay" ;
           compatible  =   "omnivision,ov9750-v4l2-i2c-subdev" ;
           reg  =   < 0x10 >;               /* 7bit I2C地址 */
           device_type  =   "v4l2-i2c-subdev" ;      /* 无需修改 */
           clocks  =   <& cru SCLK_CIF_OUT >;       /* 无需修改,时钟源选择 */
           clock - names  =   "clk_cif_out" ;        /* 无需修改,时钟源名字 */
     
           pinctrl - names  =   "default" ;         /* 无需修改,通过pinctrl配置MCLK引脚 */
           pinctrl - 0   =   <& cam_default_pins >;        /* 无需修改,与上文的pinctrl定义一致 */
     
           rockchip , pd - gpio  =   <& gpio4 RK_PD1 GPIO_ACTIVE_LOW >;    /* PD管脚分配及有效电平 */
           rockchip , rst - gpio  =   <& gpio4 RK_PD2 GPIO_ACTIVE_LOW >;   /* RST管脚分配及有效电平 */
     
           rockchip , camera - module - mclk - name  =   "clk_cif_out" ;     /* 无需修改 */
           rockchip , camera - module - facing  =   "back" ;         //前后置配置
           rockchip , camera - module - name  =   "MDG001" ;         //Camera 模组名称
           rockchip , camera - module - len - name  =   "NONE" ;        //Camera 模组镜头
           rockchip , camera - module - fov - h  =   "80" ;           //模组水平可视角度配置
           rockchip , camera - module - fov - v  =   "65" ;           //模组垂直可视角度配置
           rockchip , camera - module - orientation  =   < 0 >;        //模组角度设置
           rockchip , camera - module - iq - flip  =   < 0 >;          //IQ 上下翻转
           rockchip , camera - module - iq - mirror  =   < 0 >;         //IQ 左右镜像
            //以上 2 个属性控制摄像头的效果参数镜像配置,一般都是设置成 0,但是发现以下现象:拍摄白墙,图片的上半部偏色与下半部偏色不一致,或者左右半部偏不一致,即可以将这2个属性置成1。
           rockchip , camera - module - flip  =   < 1 >;
           rockchip , camera - module - mirror  =   < 1 >;
            //以上 2 个属性控制摄像头驱动中的镜像配置,如果图像旋转 180 度,可以将这 2 个属性修改成相反的值即可旋转 180。
           rockchip , camera - module - defrect0  =   < 1280   960   0   0   1280   960 >;   //根据摄像头分辨率进行设置
     
           rockchip , camera - module - flash - support  =   < 0 >;          //闪光灯支持
           rockchip , camera - module - mipi - dphy - index  =   < 0 >;         //mipi口配置,根据物理连接定义
            as - master  =   < 0 >;
       };
    };

驱动说明

与摄像头相关的代码目录如下:

  1. drivers / media / i2c / soc_camera / rockchip
    |--  ov9750_v4l2 - i2c - subdev . c     // OV9750驱动
    |--  ov_camera_module . c        // OV系列公共函数
    |--  ov_camera_module . h        //
    |--  rk_camera_mclk . c         // RK Camera MCLK时钟信号管理
    |--  rk_camera_mclk . h
    |--  rk_camera_module . c        // RK 系列公共函数
    `-- rk_camera_module_version.h   //模块版本信息


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69948385/viewspace-2657649/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: rk3399 系统选择
请登录后发表评论 登录
全部评论
新创云智能科技 基于瑞芯微RK3588、RK3576、RK3568、RK3566、RK3399、RK3128等平台的核心板、开发板、工控板、主板,支持定制化OEM/ODM,提供产品解决方案。

注册时间:2019-09-14

  • 博文量
    66
  • 访问量
    122704