打印
[资料干货]

rk3399 camera驱动开发

[复制链接]
2070|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qq7643066|  楼主 | 2019-9-21 10:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
rk3399 camera驱动开发
Androidcamera驱动开发

概述
目前rk3399板子上有两路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、cphardware/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。
Linuxcamera驱动开发

概述
sunychip RK3399开发板分别带有两个MIPI,
本文以 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   //模块版本信息


使用特权

评论回复

相关帖子

沙发
hyd4001| | 2019-9-21 10:51 | 只看该作者
你们公司是做方案的吧

使用特权

评论回复
板凳
dufanghua| | 2019-9-27 14:41 | 只看该作者
非常好的资料,楼主加油

使用特权

评论回复
地板
幽魂| | 2019-10-16 14:26 | 只看该作者
支持

使用特权

评论回复
5
qq7643066|  楼主 | 2020-5-5 18:39 | 只看该作者
666666666666666666666

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:承接MID、Android TV等项目定制 QQ:7643066

107

主题

422

帖子

5

粉丝