Luckfox Pico Pi RV1106学习<3>:支持IMX415摄像头

0. 项目代码

可以从下面获取到项目中的代码。
https://github.com/cdsmakc/h264_codec_base_rpi4b_rpi5_rv1106_visual_studio.git

1. 背景

Luckfox Pico Pi开发板默认支持 sc3336mis5001 两款摄像头这两个摄像头都支持30fps帧率输出。我想DIY一个采集->编码->UDP发送的应用,类似于图传。为了降低延时,需要用一个更高帧率的摄像头。市面上第三方的RK开发板,最常见的是使用 IMX415 摄像头,因此考虑将该摄像头在RV1106上予以支持。

2. 硬件

我从Luckfox店铺购买了 IMX415 摄像头,该摄像头是用于匹配Luckfox的 Omni3576 开发板的。
左边是mis5001,右边是IMX415
上图中,左边是 Mis5001 的摄像头,右边是 IMX415 的摄像头。
开发板使用20P的CSI接口,2-Lane;IMX415 是4-Lane的,用22P的CSI接口。因此,需要做一个小转接板。下面是转接板的PCB外观和原理图。原理图中的电阻是为调试准备的,实际上端接电阻2个焊盘即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 修改SDK

主要修改两点,一是设备树文件,一个是kernel的编译配置。

3.1 修改设备树文件

首先到 project/cfg/BoardConfig_IPC 路径下,找到对应编译的mk文件。对于我的硬件和编译选项,我的mk文件是:
在这里插入图片描述
查询该mk文件,显示指定的设备树文件。

#!/bin/bash

#################################################
# 	Board Config
#################################################
export LF_ORIGIN_BOARD_CONFIG=BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_Pi_W-IPC.mk
# Target CHIP
export RK_CHIP=rv1106

# app config
export RK_APP_TYPE=RKIPC_RV1106

# Config CMA size in environment
export RK_BOOTARGS_CMA_SIZE="66M"

# Kernel dts
export RK_KERNEL_DTS=rv1106g-luckfox-pico-pi-w.dts

#################################################
#	BOOT_MEDIUM
#################################################

# Target boot medium
export RK_BOOT_MEDIUM=emmc

可以看到,设备树文件是 rv1106g-luckfox-pico-pi-w.dts。在我的SDK版本中,文件位于

./sysdrv/source/kernel/arch/arm/boot/dts/rv1106g-luckfox-pico-pi-w.dts

再找到这个文件并显示内容:

njl@njl-VMware-Virtual-Platform:~/rv1106_sdk/luckfox-pico$ cat ./sysdrv/source/kernel/arch/arm/boot/dts/rv1106g-luckfox-pico-pi-w.dts
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2022 Rockchip Electronics Co., Ltd.
 */

/dts-v1/;
#include "rv1106.dtsi"
#include "rv1106-luckfox-pico-pi-ipc.dtsi"
#include <dt-bindings/input/input.h>
#include <dt-bindings/display/media-bus-format.h>

可以看到,该设备树文件包含了文件 rv1106-luckfox-pico-pi-ipc.dtsi。需要修改这个文件。该文件位于:

./sysdrv/source/kernel/arch/arm/boot/dts/rv1106-luckfox-pico-pi-ipc.dtsi

修改该文件。其中Luckfox已经增加了 SC3336mis5001 的节点,照着再增加一个就好了。主要修改如下两个地方:

&csi2_dphy0 {
	status = "okay";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			csi_dphy_input0: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&sc3336_out>;
				data-lanes = <1 2>;
			};

			csi_dphy_input1: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&mis5001_out>;
				data-lanes = <1 2>;
			};
			# 增加如下部分
			csi_dphy_input2: endpoint@2 {
				reg = <2>;
				remote-endpoint = <&imx415_out>;
				data-lanes = <1 2>;
			};
		};
&i2c4 {
	status = "okay";
	clock-frequency = <400000>;
	pinctrl-names = "default";
	//pinctrl-0 = <&i2c4m2_xfer>;

	sc3336: sc3336@30 {
		compatible = "smartsens,sc3336";
		status = "okay";
		reg = <0x30>;
		clocks = <&cru MCLK_REF_MIPI0>;
		clock-names = "xvclk";
		reset-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&mipi_refclk_out0>;
		rockchip,camera-module-index = <0>;
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "CMK-OT2119-PC1";
		rockchip,camera-module-lens-name = "30IRC-F16";
		port {
			sc3336_out: endpoint {
				remote-endpoint = <&csi_dphy_input0>;
				data-lanes = <1 2>;
			};
		};
	};

	mis5001: mis5001@31 {
		compatible = "imagedesign,mis5001";
		status = "okay";
		reg = <0x31>;
		clocks = <&cru MCLK_REF_MIPI0>;
		clock-names = "xvclk";
		reset-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&mipi_refclk_out0>;
		rockchip,camera-module-index = <0>;
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "CMK-OT2115-PC1";
		rockchip,camera-module-lens-name = "30IRC-F16";
		port {
			mis5001_out: endpoint {
				remote-endpoint = <&csi_dphy_input1>;
				data-lanes = <1 2>;
			};
		};
	};
	# 增加以下部分
	imx415: imx415@37 {
		compatible = "sony,imx415";
		status = "okay";
		reg = <0x37>;
		clocks = <&cru MCLK_REF_MIPI0>;
		clock-names = "xvclk";
		reset-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_LOW>;
		pinctrl-names = "default";
		pinctrl-0 = <&mipi_refclk_out0>;		
		rockchip,camera-module-index = <0>;
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "CMK-OT2022-PX1";
		rockchip,camera-module-lens-name = "IR0147-36IRC-8M-F20";
		port {
			imx415_out: endpoint {
				remote-endpoint = <&csi_dphy_input1>;
				data-lanes = <1 2>;
			};
		};
	};

3.2 增加内核编译支持

在SDK的根目录下,运行:

./build.sh kernelconfig

在这里插入图片描述

然后找到 IMX415 的相关编译选项,按 M 选中保存退出。然后运行 ./build.sh执行编译。

3.3 烧录与运行

编译完成后,镜像位于 ~/rv1106_sdk/luckfox-pico/output/image 路径下。按照系列文章的第一篇的内容,烧录镜像,然后运行。
观察串口打印的启动信息。

[    2.692018] imx415 4-0037: driver version: 00.01.08
[    2.692056] imx415 4-0037:  Get hdr mode failed! no hdr default
[    2.692084] imx415 4-0037: detect imx415 lane 2
Starting bluetoothd: OK
[    2.692170] imx415 4-0037: Failed to get power-gpios
[    2.692183] imx415 4-0037: could not get default pinstate
[    2.692191] imx415 4-0037: could not get sleep pinstate
[    2.692213] imx415 4-0037: supply dvdd not found, using dummy regulator
Starting network: [    2.692424] imx415 4-0037: supply dovdd not found, using dummy regulator
[    2.692502] imx415 4-0037: supply avdd not found, using dummy regulator
[    2.756926] imx415 4-0037: Detected imx415 id 0000e0
[root@luckfox root]# lsmod
Module                  Size  Used by    Tainted: G  
aic8800_btlpm           1719  0 
aic8800_fdrv          285463  0 
aic8800_bsp            53767  2 aic8800_btlpm,aic8800_fdrv
aes_generic            24532  0 
ccm                     6847  0 
ctr                     2606  0 
libarc4                  799  0 
cfg80211              168973  1 aic8800_fdrv
rve                    23436  0 
rockit                225880  0 
rknpu                  27019  0 
mpp_vcodec            414257  1 rockit
rga3                   90762  1 rockit
phy_rockchip_csi2_dphy     9338  0 
phy_rockchip_csi2_dphy_hw    10066  0 
video_rkisp           171838  1 rockit
video_rkcif           162117  1 rockit
imx415                 16360  1                 # ------>加载了IMX415的驱动
rk_dvbm                 5941  2 mpp_vcodec,video_rkisp

可以看到,已经检测到了 IMX415


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值