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

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


http://www.xdnf.cn/news/14403.html

相关文章:

  • BeckHoff <---> Keyence (MD-X)激光 刻印机 Profient 通讯
  • Elasticsearch:什么是混合搜索?
  • AIGC 基础篇 高等数学篇 06 向量代数与空间解析几何
  • 人月神话-学习记录
  • SQL Developer 表复制
  • Python安装与使用教程
  • Maven在依赖管理工具方面的内容
  • Java多线程通信:wait/notify与sleep的深度剖析(时序图详解)
  • Spring是如何实现有代理对象的循环依赖
  • 【SQLAlchemy系列】 SQLAlchemy 中的多条件查询:or*与 in*操作符
  • 智能土木通 - 土木工程专业知识问答系统02-RAG检索模块搭建
  • AC耦合与DC耦合
  • 体验AI智能投资!AI Hedge Fund了解一下
  • Java可变参数方法的常见错误与最佳实践
  • hyper-v虚拟机使用双屏
  • iOS —— UI(2)
  • Spring Cloud 所有组件全面总结
  • 「AI大数据」| 智慧公路大数据运营中心解决方案
  • Java类加载器与双亲委派模型深度解析
  • DNS递归查询
  • BOLL指标
  • Oracle21cR3之客户端安装错误及处理方法
  • 第11章 结构 笔记
  • 华为OD-2024年E卷-小明周末爬山[200分] -- python
  • 亚马逊ASIN: B0DNTQ2YNT数据深度解析报告
  • 3.创建数据库
  • STM32103CBT6显示ST7789通过SPI方式显示柬埔寨文
  • Unity Addressable使用之入门篇
  • 讲一下进程和线程
  • Day54打卡 @浙大疏锦行