香橙派5b 移植 imx415

news/2025/2/7 3:54:56/

香橙派5b 移植 imx415

镜头配置

Sensor选用如下型号:香橙派OrangePi_5 RK3588S IMX415

我使用的时候更换了镜头,将该sensor装在了我的变焦780模组上,经过后续测试因为CAM1相对稳定,所以安装在CAM1。安装位置如下:

微信图片_20240106144725

配置设备树

配置 rk3588s-orangepi-5-camera*.dtsi

修改设备树,以 kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3588s-orangepi-5-camera3.dtsi 为例,关闭 ov13855 ,添加 imx415

// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/** Copyright (c) 2021 Rockchip Electronics Co., Ltd.**/&csi2_dcphy1 {status = "disabled";ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;mipi_in_dcphy0: endpoint@0 {reg = <0>;remote-endpoint = <&ov13850_out1>;data-lanes = <1 2>;};// mipi_in_dcphy1: endpoint@1 {// 	reg = <1>;// 	remote-endpoint = <&ov13855_out1>;// 	data-lanes = <1 2>;// };mipidcphy1_in_ucam2: endpoint@1 {reg = <1>;remote-endpoint = <&imx415_out2>;data-lanes = <1 2 3 4>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;csidcphy1_out: endpoint@0 {reg = <0>;remote-endpoint = <&mipi1_csi2_input>;};};};
};&i2c2 {status = "okay";vm149cp1: vm149c@c {compatible = "silicon touch,vm149c";status = "disabled";reg = <0x0c>;rockchip,camera-module-index = <1>;rockchip,camera-module-facing = "front";};ov13850_3: ov13850@10 {compatible = "ovti,ov13850";status = "disabled";reg = <0x10>;clocks = <&cru CLK_MIPI_CAMARAOUT_M4>;clock-names = "xvclk";pinctrl-names = "default";pinctrl-0 = <&mipim0_camera4_clk>;rockchip,grf = <&sys_grf>;reset-gpios = <&gpio1 RK_PA6 GPIO_ACTIVE_HIGH>;pwdn-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;rockchip,camera-module-index = <1>;rockchip,camera-module-facing = "front";rockchip,camera-module-name = "CMK-CT0116";rockchip,camera-module-lens-name = "default";lens-focus = <&vm149cp1>;port {ov13850_out1: endpoint {remote-endpoint = <&mipi_in_dcphy0>;data-lanes = <1 2>;};};};// dw9714: dw9714@c {// 	compatible = "dongwoon,dw9714";// 	status = "disabled";// 	reg = <0x0c>;// 	rockchip,camera-module-index = <0>;// 	rockchip,vcm-start-current = <10>;// 	rockchip,vcm-rated-current = <85>;// 	rockchip,vcm-step-mode = <5>;// 	rockchip,camera-module-facing = "front";// };// ov13855_3: ov13855@36 {// 	compatible = "ovti,ov13855";// 	status = "disabled";// 	reg = <0x36>;// 	clocks = <&cru CLK_MIPI_CAMARAOUT_M4>;// 	clock-names = "xvclk";// 	pinctrl-names = "default";// 	pinctrl-0 = <&mipim0_camera4_clk>;// 	rockchip,grf = <&sys_grf>;// 	reset-gpios = <&gpio1 RK_PA6 GPIO_ACTIVE_HIGH>;// 	pwdn-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;// 	rockchip,camera-module-index = <1>;// 	rockchip,camera-module-facing = "front";// 	rockchip,camera-module-name = "CMK-OT2016-FV1";// 	rockchip,camera-module-lens-name = "default";// 	lens-focus = <&dw9714>;// 	port {// 		ov13855_out1: endpoint {// 			remote-endpoint = <&mipi_in_dcphy1>;// 			data-lanes = <1 2>;// 		};// 	};// };imx415_3: imx415-3@37 {compatible = "sony,imx415";status = "disabled";reg = <0x37>;clocks = <&cru CLK_MIPI_CAMARAOUT_M4>;clock-names = "xvclk";pinctrl-names = "default";pinctrl-0 = <&mipim0_camera4_clk>;power-domains = <&power RK3588_PD_VI>;rockchip,grf = <&sys_grf>;reset-gpios = <&gpio1 RK_PA6 GPIO_ACTIVE_LOW>;power-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;// pwdn-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;orangepi,clkout-enabled-index = <0>;rockchip,camera-module-index = <0>;rockchip,camera-module-facing = "back";rockchip,camera-module-name = "CMK-OT2022-PX1";rockchip,camera-module-lens-name = "IR0147-50IRC-8M-F20";// rockchip,camera-module-name = "RADXA-CAMERA-4K";// rockchip,camera-module-lens-name = "DEFAULT";port {imx415_out2: endpoint {remote-endpoint = <&mipidcphy1_in_ucam2>;data-lanes = <1 2 3 4>;};};};
};&mipi1_csi2 {status = "disabled";ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;mipi1_csi2_input: endpoint@1 {reg = <1>;remote-endpoint = <&csidcphy1_out>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;mipi1_csi2_output: endpoint@0 {reg = <0>;remote-endpoint = <&cif_mipi_in1>;};};};
};&rkcif_mipi_lvds1 {status = "disabled";port {cif_mipi_in1: endpoint {remote-endpoint = <&mipi1_csi2_output>;};};
};&rkcif_mipi_lvds1_sditf {status = "disabled";port {mipi1_lvds_sditf: endpoint {remote-endpoint = <&isp1_in0>;};};
};&rkisp1_vir0 {status = "disabled";port {#address-cells = <1>;#size-cells = <0>;isp1_in0: endpoint@0 {reg = <0>;remote-endpoint = <&mipi1_lvds_sditf>;};};
};

以此类推,修改三个 dtsi 文件:

image-20240104211758917

配置 rk3588-imx415-c*.dts

再增加三个激活的设备树文件,分别对应香橙派上的三个相机接口:

image-20240104211908213

添加的路径为: kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/overlay/rk3588-imx415-c1.dts

添加的内容如下:

/dts-v1/;
/plugin/;/ {fragment@0 {target = <&csi2_dphy0_hw>;__overlay__ {status = "okay";};};fragment@1 {target = <&csi2_dphy0>;__overlay__ {status = "okay";};};fragment@2 {target = <&mipi2_csi2>;__overlay__ {status = "okay";};};fragment@3 {target = <&rkcif_mipi_lvds2>;__overlay__ {status = "okay";};};fragment@4 {target = <&rkcif_mipi_lvds2_sditf>;__overlay__ {status = "okay";};};fragment@5 {target = <&rkisp0_vir1>;__overlay__ {status = "okay";};};fragment@6 {target = <&i2c7>;__overlay__ {status = "okay";imx415-1@37 {status = "okay";};};};fragment@7 {target = <&rkcif>;__overlay__ {status = "okay";};};fragment@8 {target = <&rkcif_mmu>;__overlay__ {status = "okay";};};fragment@9 {target = <&rkisp0>;__overlay__ {status = "okay";};};fragment@10 {target = <&isp0_mmu>;__overlay__ {status = "okay";};};
};

然后在 kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/overlay/Makefile 目录下面添加编译:

image-20240104211528984

编译下载dtb文件

然后使用命令重编kernel,会自动将 dts 文件编译,在对应目录下载这四个文件即可:

image-20240104212134398

rk3588s-orangepi-5b.dts 和三个 dtsi 文件在同一目录下。

之所以更新 rk3588s-orangepi-5b.dts ,是因为三个 dtsi 文件是被其调用的,不会单独生成 dtb

image-20240104212334048

rk3588s-orangepi-5b.dts 更新到 /boot/dtb/rockchip

image-20240104212609464

三个 .dtbo 更新到 /boot/dtb/rockchip/overlay

image-20240104212757240

配置板端加载imx415

最后在香橙派上直接输入 sudo orangepi-config ,在 System->Hardware 里空格选择对应在对应camera接口位置加载,回车save然后reboot。

image-20240104212949414

测试camera

测试命令:

gst-launch-1.0 v4l2src device=/dev/video11 ! video/x-raw,format=NV12,width=1920,height=1080, framerate=60/1 ! xvimagesink

iq文件有些问题,颜色有点失真,不过可以正常出图:

Screenshot from 2024-01-06 13-10-27

问题解决

1. 上电读取不到sensor id

香橙派上读取imx415寄存器报错:

Screenshot from 2024-01-04 19-05-59

找到报错源头,I2C 通信出错:

image-20240104190233766

最终排查,相机电源引脚及I2C未正常配置,配置完成后,即可正常启动。

使用的imx415芯片两个 SLAMODE 引脚均拉高,因此I2C从机地址为 0x37 ,参照下图:

image-20240105215525175

同时,本电路中复位脚需配置 reset-gpios = <&gpio1 RK_PA6 GPIO_ACTIVE_LOW>; ,应该注意。

最终成功dmesg信息如下:

Screenshot from 2024-01-05 21-53-20

2. 出图一段时间出现crc/ecc错误

image-20240105211857735

搜索的可能原因如下 1

  • 驱动配置的MIPI时钟与sensor输出的MIPI时钟对应不上
  • MIPI时序错误,例如SOT的时序不符合MIPI的SPEC
  • MIPI信号质量不佳导致的报错

后来发现,在camera1接口可以稳定出图,而2、3接口存在相关问题。考虑cam2、cam3使用的是时钟4:

image-20240106131535673

而CAM1使用的是时钟3:

image-20240106131558386

可能是相关时钟源导致的,等待进一步验证相关问题。



部分图片来源网络,如有侵权请联系我删除。
如有疑问或错误,欢迎和我私信交流指正。
版权所有,未经授权,请勿转载!
Copyright © 2024.01 by Mr.Idleman. All rights reserved.


参考文献


  1. camera调试:RK3588 apk打开不出图如何排查? ↩︎


http://www.ppmy.cn/news/1295112.html

相关文章

springboot第47集:【思维导图】面向对象,关键字,标识符,变量,数组的使用...

关键字&#xff1a;class,public,static,void等&#xff0c;特点是全部关键字都是小写字母。 image.png image.png 凡是自己起的名字可以叫标识符 image.png image.png image.png image.png 整数类型的使用 image.png image.png image.png 浮点类型 image.png image.png 字符类…

PHP运行环境之宝塔Web站点部署

目录 Web站点部署流程(部署聚合支付后台) 项目文件 将上传的文件解压文件至根目录 修改站点关键信息 设置伪静态,选择:thinkphp,并保存 设置PHP,选择:70+版本即可。 安装网站 1设置运行目录

MySQL之视图内连接、外连接、子查询

目录 一、视图 1.1 含义 2.1 视图的基本语法 二、案例 三、思维导图 一、视图 1.1 含义 虚拟表&#xff0c;和普通表一样使用 视图&#xff08;view&#xff09;是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据…

基于原子搜索算法优化的Elman神经网络数据预测 - 附代码

基于原子搜索算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于原子搜索算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于原子搜索优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

极值和平均值-第11届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第22讲。 极值和平均值&…

vue使用elementui 的 table且自定义某列表头时,添加的点击事件和自带的筛选功能有类似冒泡行为

element 自带的table 需求&#xff1a;在时间这一列的筛选按钮旁边添加一个批量修改按钮问题&#xff1a;如果不加排序这个属性&#xff0c;那么表格自带的筛选和新加的批量筛选点击事件会冲突&#xff08;冒泡事件&#xff09;解决方法&#xff1a;在该列添加sortable属性&…

CMake 中 install 命令用于定义安装规则,指定构建目标(如可执行文件、库等)和文件应该被安装到的位置。

文章目录 项目结构mylib.hmylib.cppmain.cpp CMakeLists.txt构建和安装步骤安装后的结果总结 这个示例将包括一个静态库&#xff0c;一个头文件&#xff0c;以及一个使用该库的简单可执行程序。我们将演示如何编写 CMakeLists.txt 文件以构建和安装这些组件。 项目结构 假设项…

【温故而知新】JavaScript的字符串常用方法

一、概念 在JavaScript中&#xff0c;字符串是一种基本的数据类型&#xff0c;它表示文本数据。字符串是由零个或多个字符组成的序列。在JavaScript中&#xff0c;字符串是不可变的&#xff0c;意味着一旦创建了一个字符串&#xff0c;就不能改变它。 JavaScript中的字符串可…