温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何进行RK3399 camera驱动开发

发布时间:2022-01-12 09:53:59 阅读:1229 作者:柒染 栏目:移动开发
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

如何进行RK3399 camera驱动开发,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

Android camera驱动开发

概述

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

DTS配置

1、Enabled  isp

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

2、Enabled mipi对应的i2c

&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

如何进行RK3399 camera驱动开发

如何进行RK3399 camera驱动开发

DTS配置

配置isp节点

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引脚功能

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

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

&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>;  };};

驱动说明

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

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   //模块版本信息

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:http://blog.itpub.net/69948385/viewspace-2657649/

AI

开发者交流群×