当前位置: 首页 > news >正文

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

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

  • 1. 背景
  • 2. 硬件
  • 3. 修改SDK
    • 3.1 修改设备树文件
    • 3.2 增加内核编译支持
    • 3.3 烧录与运行

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


相关文章:

  • 深度学习:PyTorch自动微分模块
  • 修改了xml布局代码,页面使用了databinding,此时不开启kapt也可以吗
  • Yolo11改进策略:Block改进|MKP,多尺度卷积核级联结构,增强感受野适应性|即插即用|AAAI 2025
  • c++26新功能—契约与概念
  • 华为OD-2024年E卷-英文输入法[100分] -- python
  • 深入实践Caffeine+Redis两级缓存架构:从原理到高可用设计
  • ubuntu 22.04 安装部署elk(elasticsearch/logstash/kibana) 7.10.0详细教程
  • 【JVM】- 内存模式
  • 如何在Windows上使用qemu安装ubuntu24.04服务器?
  • 【Elasticsearch】文档(二):更新
  • 变幻莫测:CoreData 中 Transformable 类型面面俱到(四)
  • Matlab数字信号处理——基于GUI的ECG信号处理平台设计与实现
  • 解决docker下的Linux系统调用GPU失败
  • STM32 HAL库学习 RNG篇
  • 国产操作系统-银河麒麟本地化部署Ollama国产开源的AI大模型Qwen3
  • 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio平台与Cherry Studio搭建知识库问答助手
  • 【运维系列】【ubuntu22.04】安装Docker
  • Matlab | matlab中100个常用函数全面解析
  • Spring事务简介
  • wordpress外贸独立站搭建步骤
  • 南京怎样做网站/网站排名监控工具
  • 重庆秀山网站建设公司/国际新闻网
  • WordPress更改角色插件/网站推广和优化系统
  • 亿起发插件wordpress/武汉网站seo推广
  • 网站免费正能量直接进入检察官/挖掘关键词的工具
  • 现在lol谁做教学视频网站/谷歌浏览器最新版本