返回顶部
首页 > 资讯 > 精选 >如何进行RK3399 camera驱动开发
  • 197
分享到

如何进行RK3399 camera驱动开发

2023-06-05 00:06:35 197人浏览 独家记忆
摘要

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

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

Android camera驱动开发

概述

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

DTS配置

Enabled  isp

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

Enabled mipi对应的i2c

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

camera驱动(默认为OV9750)

Android 驱动代码路径

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

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

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

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

xml 配置

根据电路图为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节点

  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";   
             
        camera0: camera-module@10 {
           status = "okay";
           compatible = "omnivision,ov9750-v4l2-i2c-subdev";
           reg = <0x10>;             
           device_type = "v4l2-i2c-subdev";    
           clocks = <&cru SCLK_CIF_OUT>;     
           clock-names = "clk_cif_out";      
     
           pinctrl-names = "default";       
           pinctrl-0 = <&cam_default_pins>;      
     
           rockchip,pd-gpio = <&gpio4 RK_PD1 GPIO_ACTIVE_LOW>;  
           rockchip,rst-gpio = <&gpio4 RK_PD2 GPIO_ACTIVE_LOW>; 
     
           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   //模块版本信息

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 如何进行RK3399 camera驱动开发

本文链接: https://lsjlt.com/news/240544.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何进行RK3399 camera驱动开发
    如何进行RK3399 camera驱动开发,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Android camera驱动开发概述目前板子上有两路mipi rx,...
    99+
    2023-06-05
  • 怎样进行RK3399 Linux4.4 Audio开发
    怎样进行RK3399 Linux4.4 Audio开发,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。   RK3399的CPU采用big.LITTLE大...
    99+
    2023-06-06
  • C++开发建议:如何进行C++测试驱动开发
    C++是一种高效、可靠、可扩展性强的编程语言,适合用于开发各种类型的软件。在开发C++应用程序时,测试驱动开发(TDD)是一种可行的方法,可以确保代码的质量并提高开发效率。本文将介绍如何进行C++测试驱动开发。理解测试驱动开发测试驱动开发是...
    99+
    2023-11-22
    测试驱动开发(TDD) C++开发 建议
  • 如何使用Django进行测试驱动开发
    本篇内容介绍了“如何使用Django进行测试驱动开发”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!所谓测试驱动开发(TDD),就是先编写测试...
    99+
    2023-06-21
  • 使用Django进行测试驱动开发
    目录创建项目配置 app编写测试用例编写代码执行测试最后的话所谓测试驱动开发(TDD),就是先编写测试用例,然后编写代码来满足测试用例,具体包含以下步骤: 编写测试用例。 ...
    99+
    2024-04-02
  • Golang开发经验分享:如何进行高效的测试驱动开发
    Golang是一种非常流行的编程语言,其在Web开发、云计算和互联网领域具有广泛的应用。而测试驱动开发(Test Driven Development,简称TDD)则是一种开发方式,它可以帮助我们在开发过程中更高效、更精确地编写代码。那么,...
    99+
    2023-11-22
    Golang 高效开发 TDD(Test-driven Development)
  • 如何进行RK3399 android7.1 wifi芯片识别
    本篇文章给大家分享的是有关如何进行RK3399 android7.1 wifi芯片识别,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。   &nbs...
    99+
    2023-06-05
  • Linux下如何进行SPI驱动
    Linux下如何进行SPI驱动,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. SPI总线1.1. SPI总线概述SPI,是英语Serial Peripheral &nb...
    99+
    2023-06-15
  • Golang开发经验分享:如何进行高效的测试驱动开发和单元测试
    在Golang开发中,测试驱动开发和单元测试是非常重要的一环。测试驱动开发(TDD)是一种软件开发方法,其中测试在编写代码之前编写,并且在编写的代码通过测试之前也无法编译。而单元测试则是在代码编写完成后对代码某一小部分进行测试,以确保这一小...
    99+
    2023-11-22
    单元测试 测试驱动开发 Golang开发
  • 如何进行JavaMail开发
    这期内容当中小编将会给大家带来有关如何进行JavaMail开发,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。引入:最近项目中要做一个简单的邮件功能,即从前台输入邮件内容,去配置文件中读取发件人、收件人等信...
    99+
    2023-06-17
  • Android开发中如何实现调用Camera
    Android开发中如何实现调用Camera?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。xml:<LinearLayout xmlns:android="ht...
    99+
    2023-05-31
    android camera roi
  • PHP中如何进行移动端应用开发?
    近年来,随着移动设备的普及和移动互联网的蓬勃发展,越来越多的企业和开发者开始把注意力放在移动端应用上。而PHP作为一种流行的Web开发语言,同样有着不少的移动端应用开发需求。那么,PHP中如何进行移动端应用开发呢?一、了解移动端应用在开始P...
    99+
    2023-05-14
    开发 PHP编程 移动端应用
  • 如何进行C++Builder的开发
    这篇文章将为大家详细讲解有关如何进行C++Builder的开发,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C++ Builder是由Borland公司推出的一款集成开发环境,C++Buil...
    99+
    2023-06-17
  • VSCode如何进行安卓开发
    这篇文章给大家介绍VSCode如何进行安卓开发,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。vs code 大部分是由 ts 编写,上层 UI 可以运行在各个系统的浏览器中,但 vs code 基于 electron ...
    99+
    2023-06-25
  • PHP中如何进行WebSockets开发?
    WebSockets是一种在 Web 浏览器和服务器之间实现全双工(bidirectional)通讯的技术。传统的HTTP协议采用的是一种请求 - 响应 (request-response) 的模式,即当客户端向服务器发起请求后,服务器才能...
    99+
    2023-05-14
    开发 PHP WebSockets
  • PHP Jenkins 与 Behat:行为驱动开发的利器
    行为驱动开发(BDD)是一种软件开发方法,强调团队协作、测试驱动的开发和清晰的沟通。PHP、Jenkins 和 Behat 的结合为 BDD 提供了无与伦比的能力,提高了开发效率、代码质量和整体项目成功率。 PHP:一个强大的动态语言 ...
    99+
    2024-03-07
    PHP Jenkins Behat 行为驱动开发(BDD) 自动化测试
  • 如何使用Lccwin32进行MySQL开发
    这篇文章给大家分享的是有关如何使用Lccwin32进行MySQL开发的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我将通过一个简单的例子演示如何通过Lccwin32进行MYSQL...
    99+
    2024-04-02
  • 如何进行JQuery插件的开发
    这期内容当中小编将会给大家带来有关如何进行JQuery插件的开发,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。【前言】jQuery已经被广泛使用,凭借其简洁的API,对D...
    99+
    2024-04-02
  • 在PHP中如何进行BigData开发?
    随着数据量的不断增加,Big Data技术在近年来变得越来越重要。针对这个趋势,PHP作为一种较为常用的Web开发语言,也应该能够支持Big Data的开发。在本文中,我们将探讨在PHP中如何进行Big Data开发。Big Data的概念...
    99+
    2023-05-14
    开发 PHP BigData
  • 在PHP中如何进行AI开发?
    随着人工智能技术的发展,各种编程语言的AI开发也越来越普及。PHP(Hypertext Preprocessor)语言是一种广泛应用于Web开发的脚本语言,其简单易用、开放源代码等特点使其成为了许多网站的首选开发语言。那么,在PHP中如何进...
    99+
    2023-05-14
    PHP(编程语言) AI(人工智能) 开发(编程过程中的关键词)
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作