RK3568 ov5695摄像头

news2024/11/25 4:59:06

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、什么是mipi接口?
  • 二、摄像头是如何把数据给到RK3568,又是如何处理
    • 硬件连接关系图:
    • 图像数据的来龙去脉
    • 代码路径
  • 三、如何移植
    • 修改设备树:
  • 总结


前言

本节内容介绍如何在RK3568中通过MIPI接口使用ov5695


一、什么是mipi接口?

MIPI(Mobile Industry Processor Interface)是2003年由ARM, Nokia, ST ,TI等公司成立的一个联盟
目的:
是把手机内部的接口如摄像头、显示屏接口、射频/基带接口等标准化,从而减少手机设计的复杂程度和增加设计灵活性

MIPI联盟下面有不同的WorkGroup,分别定义了一系列的手机内部接口标准,比如:
摄像头接口CSI(DisplaySerialInterface)、
显示接口DSI(DisplayCommandSet)、
射频接口DigRF
麦克风/喇叭接口SLIMbus
可以看出无论是CSI还是DSI还是其他都是mipi接口

其优点是:更低功耗、更高数据传输率和更小的PCB占位空间,并且专门为移动设备进行的优化,因而更适合手机和智能平板的连接。

本次我们是使用摄像头,所以使用的是mipi接口下的CSI接口。

信号
MIPI CSI2一般会有1对I2C通信引脚,1对MIPI差分时钟引脚和1~4对MIPI差分数据信号引脚,如图所示:
在这里插入图片描述
名称解释
DATA 1+ / DATA 1- MIPI 协议组包生成的差分模拟数据信号第二组
DATA 2+ / DATA 2- MIPI 协议组包生成的差分模拟数据信号第一组
CLOCK+ / CLOCK- MIPI 协议组包生成的差分模拟时钟信号
SDA I2C 数据信号线
SCL I2C 时钟信号线
如果还不清楚的话看我们硬件原理图:
在这里插入图片描述

下面是瑞芯微的mipi
对于RK356X平台而言,仅有一个标准物理mipi csi2 dphy,可以工作在两个模式:full mode 和split mode,拆分为csi2_dphy0/csi2_dphy1/csi2_dphy2三个逻辑dphy(参见rk3568.dtsi),特性如下:
Full mode
仅使用csi2_dphy0,csi2_dphy0与csi2_dphy1/csi2_dphy2互斥,不可同时使用;
data lane最大4 lanes;
最大速率2.5Gbps/lane;
Split mode
仅使用csi2_dphy1和csi2_dphy2, 与csi2_dphy0互斥,不可同时使用;
csi2_dphy1和csi2_dphy2可同时使用;
csi2_dphy1和csi2_dphy2各自的data lane最大是2 lanes;
csi2_dphy1对应物理dphy的lane0/lane1;
csi2_dphy2对应物理dphy的lane2/lane3;
最大速率2.5Gbps/lane

二、摄像头是如何把数据给到RK3568,又是如何处理

硬件连接关系图:

在这里插入图片描述
可以看出mipi接口就是用来传输图像数据,而i2c接口使用来控制摄像头的寄存器的
比如要进行图像数据捕获的时候就需要通过i2c对Sensor的寄存器进行配置

图像数据的来龙去脉

在这里插入图片描述

在瑞芯微的开发手册中也解释了,如下:
在这里插入图片描述
从上面两个图可以看出,摄像头采集到数据之后通过mipi接口把数据给到RK3568,RK3568接收到数据之后又给到isp(图像处理传感器)

从这里也可以看出,要想使用这个摄像头,就需要处理好这三部分:摄像头的驱动(比如操作相关寄存器)、mipi接口、ISP

移植过程这些都不用我们手动编写,因为瑞芯微已经帮我们做好了,代码路径如下:

代码路径

和硬件相关的驱动有3部分,分别为Sensor相关的,MIPI相关,ISP相关的。
Sensor: drivers\media\i2c\ov13850.c
MIPI相关:drivers\phy\rockchip\phy-rockchip-mipi-rx.c
ISP相关:drivers\media\platform\rockchip\isp1\rkisp1.c

在这里插入图片描述
如果瑞芯微没有你的摄像头的驱动的话你要找摄像头的厂家提供过来


三、如何移植

修改设备树:

我们已经知道Camera有3部分的驱动,分别是描述SensorMIPI相关、ISP相关的,所以在dts中也有描述这3部分的:

sensor部分:
由于我们摄像头是挂载在i2c2上面,所以我们需要再i2c2上面添加我们的ov5695的相关信息,包括:挂载的地址时钟引脚mipi的引脚(由于mipi的引脚是专用的,所以我们不需要使用pinctrl配置),如下:
在这里插入图片描述

i2c2的引脚rk3568-pinctrl.dtsi:
在这里插入图片描述
其他引脚

pinctrl-0 = <&cif_clk>;//cif pinctrl 
reset-gpios = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>;  //MIPI_CAM0_RST_L_GPIO3_D4
pwdn-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;  //pwoer dowm  MIPI_CAM0_PDN_L_GPIO3_D5

对应于下图:
在这里插入图片描述
还有对接mipi的节点
在这里插入图片描述

具体如下:

&i2c2 {
	status = "okay";
	pinctrl-0 = <&i2c2m1_xfer>;


    ov5695: ov5695@36 {
                status = "okay";
                compatible = "ovti,ov5695";
                reg = <0x36>; //sensor I2C设备地址,7位
                clocks = <&cru CLK_CIF_OUT>; //sensor clickin配置
                clock-names = "xvclk";
                power-domains = <&power RK3568_PD_VI>;
                pinctrl-names = "default";
                pinctrl-0 = <&cif_clk>;//CIF_CLKOUT引脚 pinctrl
                reset-gpios = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>;  //MIPI_CAM0_RST_L_GPIO3_D4
                pwdn-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;  //pwoer dowm  MIPI_CAM0_PDN_L_GPIO3_D5
                rockchip,camera-module-index = <0>;//不能一样就行
                rockchip,camera-module-facing = "back";//后置摄像头
                rockchip,camera-module-name = "TongJu";//名字
                rockchip,camera-module-lens-name = "CHT842-MD";
                port {
                        ov5695_out: endpoint {
								//mipi dphy端的port名
                                remote-endpoint = <&mipi_in_ucam2>;
								// mipi lane数,1lane为 <1>, 4lane为 <1 2 3 4>
                                data-lanes = <1 2>;
                        };
                };
        };
};

mipi部分:
这部分瑞芯微有提供设备树参考文档Documentation/devicetree/bindings/media/rockchip-mipi-dphy.txt,如下:
在这里插入图片描述
具体内容如下:
在这里插入图片描述
主要是这个port节点,该节点的第一个端口显示了这个mipi-dphy中连接的传感器(比如摄像头),第二个端口连接isp节点

具体修改如下:

&csi2_dphy0 {
	status = "okay";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;
		//第一个端口显示了这个mipi-dphy中连接的传感器。
		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipi_in_ucam0: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&ucam_out0>;
				data-lanes = <1 2 3 4>;
			};
			mipi_in_ucam1: endpoint@2 {
				reg = <2>;
				remote-endpoint = <&gc8034_out>;
				data-lanes = <1 2 3 4>;
			};
			//这部分连接sensor
			mipi_in_ucam2: endpoint@3 {
				reg = <3>;
				// sensor端的 port名
				remote-endpoint = <&ov5695_out>;
				// mipi lane数,1lane为 <1>, 4lane为 <1 2 3 4>
				data-lanes = <1 2>;
			};
			
		};
		//第二个端口连接isp节点。
		port@1 {
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;
			//这部分连接isp
			csidphy_out: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&isp0_in>;
			};
		};
	};
};

isp部分:
这部分瑞芯微有提供设备树参考文档Documentation/devicetree/bindings/media/rockchip-isp1.txtt,如下:
在这里插入图片描述
具体内容如下:
在这里插入图片描述
该功能就是用来对接mipi的数据然后进行处理
具体修改如下:

&rkisp_vir0 {
	status = "okay";

	port {
		#address-cells = <1>;
		#size-cells = <0>;
		//对接mipi
		isp0_in: endpoint@0 {
			reg = <0>;
			remote-endpoint = <&csidphy_out>;
		};
	};
};

依据瑞芯微手册上讲到,如下;
在这里插入图片描述
所以还需要使能csi2_dphy_hw

&csi2_dphy_hw {
	status = "okay";
};

修改完成之后编译烧录即可。如果不清楚如何编译烧录的点击这里

总结

好了,如果按照上面步骤修改之后那么你肯定能够编译烧录成功,下节我们来验证和讲解里面的驱动,喜欢就收藏吧!!在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高通开发系列 - 数字和模拟codec驱动

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 MSM89XX音频硬件框架Linux kernel驱动LPASS的地址空间PM和PMI的区别PM8953简介Slave ID从设备idPM89xx中的模拟codec驱动准备codec的驱…

进程退出与等待

1️⃣ 进程退出 正常终止 main函数的返回调用exit_exit 异常终止 Ctrl c (信号终止) 1.main函数的返回就是return 0&#xff1b;程序退出这个在高级语言里面就学过了不多说。 2.exit(x)的使用如下 第一次测试&#xff1a;错误码与main函数里面打印的值。 第二次测试&#xf…

[oeasy]python0033_任务管理_jobs_切换任务_进程树结构_fg

查看进程 回忆上次内容 上次先进程查询 ps -elf 查看所有进程信息ps -lf 查看本终端相关进程信息 杀死进程 kill -9 PID 给进程发送死亡信号 运行多个 python3 show_time.py 的话 各个进程独立python3 show_time.py 大概 8M各占内存这些进程之间是什么关系呢&#xff1f;&…

秦海璐、宋轶现身,岳云鹏孙越成谜,央视春晚第一次彩排姗姗来迟

最近一段时间&#xff0c;全国各地的朋友都在积极行动&#xff0c;都想推迟成为小阳人的时间&#xff0c;却险些忘了一件大事。伴随着春节的临近&#xff0c;每年的央视春晚都倍受期待&#xff0c;今年当然也不例外&#xff0c;可是却一直没有央视春晚的消息。 就在大家都认为&…

利用adb查找手机定位,并且打开地图定位

可以使用 Android Debug Bridge (ADB) 工具来查找手机的位置信息。 首先&#xff0c;您需要确保手机已连接到电脑&#xff08;内网穿透或者搭建虚拟局域网&#xff09;&#xff0c;并且已在手机上启用 USB 调试。然后&#xff0c;您可以在电脑的命令提示符下使用 ADB 命令来查询…

小程序框架

目录 一&#xff0c;框架 二&#xff0c;响应的数据绑定 三&#xff0c;页面管理 四&#xff0c;基础组件 逻辑层 App Service 五&#xff0c;小程序的生命周期 六&#xff0c;注册页面 1.使用 Page 构造器注册页面 2.在页面中使用 behaviors 3.使用 Component 构造器…

[HAL库]STM32 ADC功能和DMA读数据的方法

这篇博客记录下 STM32F103R8T6 是怎么开ADC、用DMA搬数据的方法。方便日后使用的时候查资料。 DMA其实就是个搬运工&#xff0c;专门负责搬数据&#xff0c;没有DMA之前&#xff0c;搬数据是由MCU核心来负责&#xff0c;虽说都能完成搬数据的动作&#xff0c;但是MCU干这件事浪…

1.从一次提交中思考代码性能优化和stream的使用

前言 其实由来很简单&#xff0c;我们用了一个第三方的开源平台&#xff0c;这个平台基于 ruoyi 3.8.1 开发&#xff0c;我想后续同步到ruoyi的最新版 今天看的是 一个字典查询的commit&#xff0c;我们下来看下这次提交是如何优化的 分析 开门见山&#xff0c;我们看下代码…

PowerTCP FTP for .NET对.NET 7的支持

PowerTCP FTP for.NET是一个高级FTP和FTPS类库&#xff0c;具有易于使用的接口。它具有泛型、IPv6、双堆栈套接字、并发会话mX509证书&#xff0c;并包括完整的SSL和TLS集成。 用于.NET功能的PowerTCP FTP 流接口支持在没有文件访问的情况下创建或检查内存中的数据。 可序列…

过年不再被逼相亲——我用python给亲戚展示2022的相亲数据

人生苦短 我用Python 这不是快过年了吗&#xff1f; 又到了一年一度的亲戚大考验环节… 没对象的他们会问你&#xff0c;找对象了吗&#xff1f; 你要是学计算机专业的&#xff0c;他们会问你&#xff0c;会修电脑吗&#xff1f; 出去学了点啥他们也会要求“才艺展示一下 …

少儿Python每日一题(2):整数的位数

原题解答 本次的题目如下所示&#xff08;原题出处&#xff1a;蓝桥杯&#xff09;&#xff1a; 【编程实现】 输入一个正整数&#xff0c;输出这个正整数是一个几位数。 输入描述&#xff1a;输入一个正整数 输出描述&#xff1a;输出这个正整数是一个几位数 【样例输入】 12…

FineReport开源报表软件- 数据库表字段控制Tab块隐藏

1. 概述 1.1 预期效果 通过数据库表中设置的字段值&#xff0c;控制决策报表的每个 Tab 块是否显示&#xff0c;如下图所示&#xff1a; 数据库表字段&#xff1a;SITUATION 字段的值控制 Tab 是否显示。 效果展示&#xff1a;一共有 4 个 Tab 块&#xff1a;春、夏、秋、冬&…

Verilog HDL 硬件描述语言基础

HDL 硬件描述语言&#xff08;Hardware Description Lagnuage&#xff0c;HDL&#xff09;通过描述硬件的实现方法&#xff0c;来 产生与之对应的真实的硬件电路&#xff0c;最终实现所设计的预期功能。 Verilog HDL 和 C 语言的比较 C 语言所描述的代码功能在执行时都是一行…

K8s Liveness/Readiness/Startup 探针机制

官方参考文档 目录前言一、默认健康检测1.1 restartPolicy1.2 测试案例二、Liveness三、Readiness四、Startup前言 玩过 Docker Swarm 的应该都知道&#xff0c;有一种功能叫自愈功能&#xff0c;当集群检测到节点或服务故障时回进行自动故障转移&#xff0c;从而保障业务的可…

Python循环语句条件控制语句

一、while循环 1、条件为true&#xff0c;执行循环体&#xff1b;条件为false&#xff0c;退出循环体&#xff1b; while 判断条件: 执行语句 2、单纯的while语句 3、配合if条件句使用 4、配合else使用 二、for循环 即可迭代的对象&#xff1b; 如何判断对象是否可迭代&…

python之tkinter学习

python图形化界面导论为窗口命名&#xff08;root.wm_title("")&#xff09;label类&#xff08;仅用来显示信息&#xff09;仅有一个标签多标签按钮command绑定事件bind绑定事件为button设置属性pack的布局grid布局事件及其绑定bind函数中的事件类型解绑输入框菜单子…

SEO 基础知识遇上圣诞节

*2022年圣诞节到来啦,很高兴这次我们又能一起度过~ SEO 基础知识 文章目录 SEO 基础知识1、SEO是什么2、SEO工作内容3、网站排名的流程数据4、认识搜索引擎爬虫4.1 什么是爬虫4.2 模拟普通用户5、网络爬虫的管理规则6、用数据快速提升网络权重7、其他工具1、SEO是什么 SEO 即…

【Javassist】快速入门系列08 当检测到对象(不包括数组)创建时用代码块替换

系列文章目录 01 在方法体的开头或结尾插入代码 02 使用Javassist实现方法执行时间统计 03 使用Javassist实现方法异常处理 04 使用Javassist更改整个方法体 05 当有指定方法调用时替换方法调用的内容 06 当有构造方法调用时替换方法调用的内容 07 当检测到字段被访问时使用语…

Docker Desktop 4.15 正式发布,这里是新功能

Docker Desktop 4.15 正式发布&#xff0c;这里是新功能 Docker Desktop 4.15现在可用于所有平台&#xff1a;Linux、Windows 和 macOS。它附带 Docker Compose v2.13.0、Containerd v1.6.10 和 Docker Hub Tool v0.4.5 2 主要亮点 VirtioFS 正式发布新的快速搜索功能在任何…

杨校老师课堂之JDK1.8下载、安装与环境变量配置

一、安装 1. 安装引导 2. 修改安装目录(路径) 3. 选择后的路径如下&#xff1a; 4. JRE的安装【可选】 5. 成功安装 二、配置 环境变量配置 1. 进行校验 win R 打开cmd窗口 在新建cmd内&#xff0c;输入javac&#xff0c;出现下列内容&#xff0c;即表示未配置成功。目前尚…