2328743_ja-JP

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2328743_ja-JP

2328743_ja-JP

imx8mm 上の ArduCam のデバイスツリー設定

私はKontronボード、OSM-S i.MX8M Miniを持っており、IMX296チップを搭載したArduCamを接続しようとしています。動作させるのにいくつか問題があります。

デバイスは次の場所にコネクテッド:

  1. CSI/MIPI
    1. CSI_A_DATA{0,1}{{N,P}
    2. CSI_A_CLOCK_{N,P}
  2. I2C
    1. CAM_A_SCL/CSI_A_TX_N
    2. CAM_A_SDA/CSI_A_TX_P
  3. 電源/リセット
    1. CAM_A_PWR/GPIO_C_6
    2. CAM_A_RST#/GPIO_C7

CAM_MCKはNCです

GPIO が正しいこと、i2c がラインをプローブできることをテストしました。カムは正しく接続されている必要があります。しかし、Linux ドライバはプローブされません。

次に、このデバイス ツリー設定を追加しました。

// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
 * Copyright (C) 2022 Kontron Electronics GmbH
 */

/dts-v1/;

#include "imx8mm-kontron-osm-s.dtsi"

/ {
	model = "Kontron i.MX8MM OSM-S (N802X S)";
	compatible = "kontron,imx8mm-bl-osm-s", "kontron,imx8mm-osm-s", "fsl,imx8mm";

  	cam_dummy_reg: cam_dummy_reg {
	    compatible = "regulator-fixed";
	    regulator-name = "cam-dummy-reg";
	    status = "okay";
	};

};

&i2c4 {
	status = "okay";

    imx296: camera-sensor@1a {
        compatible = "sony,imx296";
        reg = <0x1a>;

        clocks = <&clk IMX8MM_CLK_CSI1_CORE>;
        clock-frequency = <37125000>;
        assigned-clocks = <&clk IMX8MM_CLK_CSI1_CORE>;
        assigned-clock-parents = <&clk IMX8MM_SYS_PLL1_266M>;
        assigned-clock-rates = <37125000>;

        reset-gpios = <&gpio4 0 GPIO_ACTIVE_LOW>;

        avdd-supply = <&gpio4 19 GPIO_ACTIVE_HIGH>;     /* 3.3v */
        dvdd-supply = <&cam_dummy_reg>;       /* 1.8v, dummy, NC */
        ovdd-supply = <&cam_dummy_reg>;       /* 1.2v, dummy, NC */

        port {
            imx296_ep: endpoint {
                remote-endpoint = <&csi_in>;
				clock-lanes = <0>;
				data-lanes = <1>;
				clock-noncontinuous;
            };
        };
    };
};

&pwm2 {
	status = "disabled";
};

&reg_usb2_vbus {
	status = "disabled";
};

&reg_usdhc2_vcc {
	status = "disabled";
};

&reg_usdhc3_vcc {
	status = "disabled";
};

&uart1 {
	uart-has-rtscts;
	status = "okay";
};

&uart2 {
	status = "disabled";
};

&uart3 {
	status = "disabled";
};

&usbotg1 {
	dr_mode = "otg";
	status = "okay";
};

しかし、デバイスが検出されません。

行き詰まり始めているので、どんなヒントでもいただければ幸いです。

Re: Device tree setup for ArduCam on imx8mm

ご返信ありがとうございます。しかし、何も変わりませんでした。

imx296 が有効になっている場合でも、i2C バスをプローブすることはできません。

お知らせが1つあります。Raspberry Piにはbrcm、bcm2835が搭載されています。imx8mm を使用する場合、これは存在しないため、raspbarry pi の dts オーバーレイはインスピレーションとしてのみ使用できます。

imx8mm-kontron-bl-extension.dtsoにimx219デバイス用のdtsオーバーレイが見つかりました。

https://git.kontron-electronics.de/sw/misc/linux.git

RaspberryとKontronを統合してみます。

Re: Device tree setup for ArduCam on imx8mm

dtsファイルを参照してください。

https://github.com/raspberrypi/linux/blob/stable_20241008/arch/arm/boot/dts/overlays/imx296-overlay....

IMX296 には inck が必要です。これは clock-names = "inck" として設定されます。

Re: Device tree setup for ArduCam on imx8mm

それは必要ないはずです。私はResbarry Pi 5を参考にしました。
https://github.com/raspberrypi/linux/blob/stable_20241008/arch/arm/boot/dts/overlays/imx296-overlay....

arducam デバイスには、ボード自体にいくつかのペリフェラルが含まれています。これは cam_dommy_reg の理由でもあります。電源レギュレータはボード上にあり、有効にするだけで済みます。

私がこのボードを使用しようとしている Kontron ボードは次のとおりです。
https://www.kontron.com/en/products/som-osm-si.mx8m-mini/p171657

カメラはこれです:
https://docs.arducam.com/Raspberry-Pi-Camera/ネイティブカメラ/グローバルシャッター/1.58MP-IMX296/

カーネルガイドがあります:
https://www.kernel.org/doc/Documentation/devicetree/bindings/media/i2c/sony%2Cimx296.yaml

Re: Device tree setup for ArduCam on imx8mm

CAM_MCK が NC ですが、mclk を接続していないということでしょうか?これは NXP ボードではないので、このボードでデフォルトでサポートされているカメラがどれか知っていますか?参考になるDTSはありますか?なぜmclkを使わないのか確認する必要がある

Re: Device tree setup for ArduCam on imx8mm

もう少し進んだ。カーネルの設定に成功しました。Linuxカーネルに以下の設定を追加しました。

CONFIG_VIDEO_IMX296=m
CONFIG_V4L2_MEM2MEM_DEV=m
CONFIG_V4L_PLATFORM_DRIVERS=y
# CONFIG_VIDEO_MUX is not set
# CONFIG_VIDEO_CAFE_CCIC is not set
CONFIG_VIDEO_IMX7_CSI=m
CONFIG_VIDEO_IMX8_ISI=m
CONFIG_VIDEO_IMX8_ISI_M2M=y
# CONFIG_VIDEO_ROCKCHIP_ISP1 is not set
# CONFIG_VIDEO_XILINX is not set
CONFIG_VIDEOBUF2_DMA_CONTIG=m

そして、このデバイスツリーは次のようになります。

// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
 * Copyright (C) 2022 Kontron Electronics GmbH
 */

/dts-v1/;

#include "imx8mm-kontron-osm-s.dtsi"

/ {
	model = "Wegsol i.MX8MM OSM-S (N802X S)";
	compatible = "kontron,imx8mm-bl-osm-s", "kontron,imx8mm-osm-s", "fsl,imx8mm";

  	cam_dummy_reg: cam_dummy_reg {
	    compatible = "regulator-fixed";
	    regulator-name = "cam-dummy-reg";
	    status = "okay";
	};

	cam_reg: regulator-cam {
		compatible = "regulator-fixed";
		regulator-name = "cam_reg";
		gpio = <&gpio4 0 GPIO_ACTIVE_HIGH>;
		enable-active-high;
        startup-delay-us = <500000>;
	};


    cam_clk: cam_clk {
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <54000000>;
		clock-output-names = "cam_clk";
	};

	reserved-memory {
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		/* global autoconfigured region for contiguous allocations */
		linux,cma {
			compatible = "shared-dma-pool";
			reusable;
			/* 640 MiB */
			size = <0 0x28000000>;
			/*  1024 - 128 MiB, our minimum RAM config will be 1024 MiB */
			alloc-ranges = <0 0x40000000 0 0x78000000>;
			linux,cma-default;
		};
	};    
};

&i2c4 {
	status = "okay";
	imx296: camera-sensor@1a {
		compatible = "sony,imx296";
		reg = <0x1a>;

		clocks = <&cam_clk>;
        clock-names = "inck";

        avdd-supply = <&cam_reg>;             /* 3.3v */
        dvdd-supply = <&cam_dummy_reg>;       /* 1.8v, dummy, NC */
        ovdd-supply = <&cam_dummy_reg>;       /* 1.2v, dummy, NC */

		port {
			imx296_ep: endpoint {
				remote-endpoint = <&csi_imx296_in>;
				clock-lanes = <0>;
				data-lanes = <1 2>;
				clock-noncontinuous;
			};
		};
	};    
};

&mipi_csi {
    fsl,mipi-mode;
	status = "okay";

	ports {
		port@0 {
			csi_imx296_in: endpoint {
				remote-endpoint = <&imx296_ep>;
				clock-lanes = <0>;
				data-lanes = <1 2>;
			};
		};
	};
};

&csi {
    status = "okay";
};


&pwm2 {
	status = "disabled";
};

&reg_usb2_vbus {
	status = "disabled";
};

&reg_usdhc2_vcc {
	status = "disabled";
};

&reg_usdhc3_vcc {
	status = "disabled";
};

&uart1 {
	uart-has-rtscts;
	status = "okay";
};

&uart2 {
	status = "disabled";
};

&uart3 {
	status = "disabled";
};

&usbotg1 {
	dr_mode = "otg";
	status = "okay";
};

そしてコンソールに次のようなメッセージが表示されました。

v4l2-ctl -D -d /dev/video0
Driver Info:
        Driver name      : imx-capture
        Card type        : imx-capture
        Bus info         : platform:32e20000.csi
        Driver version   : 6.12.41
        Capabilities     : 0xa4200001
                Video Capture
                I/O MC
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps      : 0x24200001
                Video Capture
                I/O MC
                Streaming
                Extended Pix Format
Media Driver Info:
        Driver name      : imx7-csi
        Model            : imx-media
        Serial           : 
        Bus info         : platform:32e20000.csi
        Media version    : 6.12.41
        Hardware revision: 0x00000000 (0)
        Driver version   : 6.12.41
Interface Info:
        ID               : 0x03000006
        Type             : V4L Video
Entity Info:
        ID               : 0x00000004 (4)
        Name             : csi capture
        Function         : V4L2 I/O
        Pad 0x01000005   : 0: Sink
          Link 0x02000008: from remote pad 0x1000003 of entity 'csi' (Video Interface Bridge): Data, Enabled, Immutable

どうやらLinuxカーネルとIMX296ドライバは正常に動作しているようです。

デバイスの設定が可能です。

root@v12:~# media-ctl -d /dev/media0 -l "'imx296 3-001a':0 -> 'csis-32e30000.mipi-csi':0 [1]"
root@v12:~# media-ctl -d /dev/media0 -v -V "'imx296 3-001a':0 [fmt:SRGGB8/640x480 field:none]"
Opening media device /dev/media0
Enumerating entities
looking up device: 81:1
looking up device: 81:0
looking up device: 81:2
looking up device: 81:3
Found 4 entities
Enumerating pads and links
Setting up format SRGGB8_1X8 640x480 on pad imx296 3-001a/0/0
Format set: SBGGR10_1X10 728x544
Setting up format SBGGR10_1X10 728x544 on pad csis-32e30000.mipi-csi/0/0
Format set: SBGGR10_1X10 728x544

root@v12:~# media-ctl -d /dev/media0 -v -V "'csis-32e30000.mipi-csi':0 [fmt:SRGGB8/640x480 field:none]"
Opening media device /dev/media0
Enumerating entities
looking up device: 81:1
looking up device: 81:0
looking up device: 81:2
looking up device: 81:3
Found 4 entities
Enumerating pads and links
Setting up format SRGGB8_1X8 640x480 on pad csis-32e30000.mipi-csi/0/0
Format set: SRGGB8_1X8 640x480

root@v12:~# media-ctl -d /dev/media0 -v -V "'csi':0 [fmt:SRGGB8/640x480 field:none]"
Opening media device /dev/media0
Enumerating entities
looking up device: 81:1
looking up device: 81:0
looking up device: 81:2
looking up device: 81:3
Found 4 entities
Enumerating pads and links
Setting up format SRGGB8_1X8 640x480 on pad csi/0/0
Format set: SRGGB8_1X8 640x480

今のところは順調ですが、何かを録画しようとするとバッファエラーが発生します。

root@v12:~# gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-bayer,format=rggb,width=640,height=480' ! fakesink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed to allocate required memory.
Additional debug info:
/usr/src/debug/gstreamer1.0-plugins-good/1.22.12/sys/v4l2/gstv4l2src.c(950): gst_v4l2src_decide_allocation (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
Buffer pool activation failed
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data stream error.
Additional debug info:
/usr/src/debug/gstreamer1.0/1.22.12/libs/gst/base/gstbasesrc.c(3134): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming stopped, reason not-negotiated (-4)
Execution ended after 0:00:00.002320250
Setting pipeline to NULL ...
Freeing pipeline ..

このバッファエラーを解消するにはどうすればよいですか?
dtsファイル内にDMA CMAバッファを作成しようと試みましたが、問題は解決しませんでした。

パイプラインにメモリバッファを割り当てる必要があるのですが、どうすればいいでしょうか?

どんなヒントでも大歓迎です。

标记 (1)
无评分
版本历史
最后更新:
‎03-18-2026 02:53 AM
更新人: