DESK-MX8M-L/Peripherals/MIPI

From DAVE Developer's Wiki
Jump to: navigation, search
History
Issue Date Notes

2022/01/13

First DESK-MX8M-L release

2023/02/24

DESK-MX8M-L-2.0.0 release

2023/08/22

DESK-MX8M-L-4.0.0 release
2024/04/11 DESK-MX8M-L-4.1.0 release


Peripheral MIPI[edit | edit source]

Device tree configuration[edit | edit source]

ORCA SOM[edit | edit source]

Here below an example of device tree configuration used on standard DAVE's kit for the ORCA SOM:

From imx8mp-mito8mplus-cb1001.dts:

&mipi_csi_0 {
	#address-cells = <1>;
	#size-cells = <0>;
	status = "okay";

	port@0 {
		reg = <0>;
		mipi_csi0_ep: endpoint {
			remote-endpoint = <&ov5640_mipi_0_ep>;
			data-lanes = <2>;
			csis-hs-settle = <13>;
			csis-clk-settle = <2>;
			csis-wclk;
		};
	};
};

&mipi_csi_1 {
	#address-cells = <1>;
	#size-cells = <0>;
	status = "okay";

	port@1 {
		reg = <1>;
		mipi_csi1_ep: endpoint {
			remote-endpoint = <&ov5640_mipi_1_ep>;
			data-lanes = <2>;
			csis-hs-settle = <13>;
			csis-clk-settle = <2>;
			csis-wclk;
		};
	};
};

From imx8mp-mito8mplus.dtsi:


&iomuxc {
...
...
	pinctrl_mipi_dsi_en: mipi_dsi_en {
		fsl,pins = <
			MX8MP_IOMUXC_GPIO1_IO08__GPIO1_IO08	0x16
		>;
	};
...
...
};

MITO 8M Mini[edit | edit source]

Here below an example of device tree configuration used on standard DAVE's kit for the MINI SOM:

From imx8mm-mito8mmini-sbcx.dts:

...
...
	regulators {
...
...
		reg_csi_en: regulator-csi-en {
			compatible = "regulator-fixed";
			regulator-name = "csi_enable";
			pinctrl-names = "default";
			pinctrl-0 = <&pinctrl_csi_pwn>;
			gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>;
			enable-active-high;
			regulator-always-on;
		};
...
...
&csi1_bridge {
	fsl,mipi-mode;
	status = "okay";
	port {
		csi1_ep: endpoint {
			remote-endpoint = <&csi1_mipi_ep>;
		};
	};
};
...
...
&i2c3 {
...
...
	/* Digilent Pcam 5C */
	ov5640_mipi: ov5640_mipi@3c {
		compatible = "ovti,ov5640_mipi";
		reg = <0x3c>;
		status = "okay";
		pinctrl-names = "default";
		clocks = <&clk IMX8MM_CLK_CLKO1>;
		clock-names = "csi_mclk";
		assigned-clocks = <&clk IMX8MM_CLK_CLKO1>;
		assigned-clock-parents = <&clk IMX8MM_CLK_24M>;
		assigned-clock-rates = <24000000>;
		csi_id = <0>;
		mclk = <24000000>;
		mclk_source = <0>;
		port {
			ov5640_mipi1_ep: endpoint {
				remote-endpoint = <&mipi1_sensor_ep>;
			};
		};
...
...
&mipi_csi_1 {
...
...
	port {
		mipi1_sensor_ep: endpoint@1 {
			remote-endpoint = <&ov5640_mipi1_ep>;
			data-lanes = <2>;
			csis-hs-settle = <13>;
			csis-clk-settle = <2>;
			csis-wclk;
		};

		csi1_mipi_ep: endpoint@2 {
			remote-endpoint = <&csi1_ep>;
		};
	};
...
...
&iomuxc {
...
...
	pinctrl_csi_pwn: csi_pwn_grp {
		fsl,pins = <
			MX8MM_IOMUXC_GPIO1_IO09_GPIO1_IO9		0x19
		>;
	};
...
...

Accessing the peripheral in ORCA SOM[edit | edit source]

Linux messages at boot time[edit | edit source]

MIPI CSI-2 driver initialized:

...
...
[    2.296546] mxc-mipi-csi2-sam 32e40000.csi: supply mipi-phy not found, using dummy regulator
[    2.324079] mxc-mipi-csi2-sam 32e40000.csi: lanes: 2, hs_settle: 13, clk_settle: 2, wclk: 1, freq: 500000000
[    2.334821] mxc-mipi-csi2-sam 32e50000.csi: supply mipi-phy not found, using dummy regulator
[    2.355562] mxc-mipi-csi2-sam 32e50000.csi: lanes: 2, hs_settle: 13, clk_settle: 2, wclk: 1, freq: 266000000
...
...

and if a MIPI camera is inserted, it has been recognized and its video driver loaded:

...
...
[    1.750387] ov5640 1-003c: supply DOVDD not found, using dummy regulator
[    1.757190] ov5640 1-003c: supply AVDD not found, using dummy regulator
[    1.763868] ov5640 1-003c: supply DVDD not found, using dummy regulator
[    1.788593] ov5640 2-003c: supply DOVDD not found, using dummy regulator
[    1.795388] ov5640 2-003c: supply AVDD not found, using dummy regulator
[    1.802044] ov5640 2-003c: supply DVDD not found, using dummy regulator
[    7.018212] mx8-img-md: Registered sensor subdevice: ov5640 2-003c (1)
[    7.025152] mx8-img-md: Registered sensor subdevice: ov5640 1-003c (2)
[    7.059219] mx8-img-md: created link [ov5640 1-003c] => [mxc-mipi-csi2.0]
[    7.068913] mx8-img-md: created link [ov5640 2-003c] => [mxc-mipi-csi2.1]
...
...

Then check that the camera are correctly recognized.

root@desk-mx8mp:~# ls -la /dev/video[1-2]
crw-rw---- 1 root video 81, 1 Jul 26 05:52 /dev/video1
crw-rw---- 1 root video 81, 2 Jul 26 05:52 /dev/video2
root@desk-mx8mp:~#

Usage with gstreamer[edit | edit source]

  • Video capture, encoding and file save using Pcam 5C OV5640 MIPI camera:
root@desk-mx8mp:~# gst-launch-1.0 v4l2src device=/dev/video1 ! "video/x-raw,width=1280,height=720" ! queue ! videorate ! vpuenc_h264 ! avimux ! filesink location=camera_test.avi
Setting pipeline to PAUSED ...
====== VPUENC: 4.7.2 build on Sep  1 2022 09:49:28. ======
        wrapper: 3.0.0 (VPUWRAPPER_ARM64_LINUX Build on Aug 31 2022 01:28:14)
        vpulib: 1.1.1
        firmware: 1.1.1.43690
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
[ 1130.711257] bypass csc
[ 1130.713690] input fmt YUV4
[ 1130.716433] output fmt YUYV
Redistribute latency...
^Chandling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 0:01:17.622451702
Setting pipeline to NULL ...
Freeing pipeline ...
root@desk-mx8mp:~#
root@desk-mx8mp:~# gst-launch-1.0 v4l2src device=/dev/video1 ! "video/x-raw,width=1280,height=720" ! waylandsink
[  146.867054] mxc-mipi-csi2.1: mipi_csis_imx8mp_phy_reset, No remote pad found!
[  146.976442] mxc-mipi-csi2.1: mipi_csis_imx8mp_phy_reset, No remote pad found!
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
[  147.732519] bypass csc
[  147.734895] input fmt YUV4
[  147.737628] output fmt YUYV
Redistribute latency...
0:00:02.0 / 99:99:99.

Accessing the peripheral in MITO 8M Mini[edit | edit source]

Linux messages at boot time[edit | edit source]

MIPI CSI-2 driver initialized:

...
...  
[    3.002816] mxc_mipi-csi 32e30000.mipi_csi: supply mipi-phy not found, using dummy regulator
[    3.016644] mxc_mipi-csi 32e30000.mipi_csi: mipi csi v4l2 device registered
[    3.023627] CSI: Registered sensor subdevice: mxc_mipi-csi.0
[    3.037706] mxc_mipi-csi 32e30000.mipi_csi: lanes: 2, hs_settle: 13, clk_settle: 2, wclk: 1, freq: 333000000
...
...

and if a MIPI camera is inserted, it has been recognized and its video driver loaded:

...
...
[    1.789827] ov5640_mipi 2-003c: No pin available
[    1.794462] ov5640_mipi 2-003c: No sensor pwdn pin available
[    1.800135] ov5640_mipi 2-003c: No sensor reset pin available
[    1.805926] ov5640_mipi 2-003c: supply DOVDD not found, using dummy regulator
[    1.813173] ov5640_mipi 2-003c: supply DVDD not found, using dummy regulator
[    1.820266] ov5640_mipi 2-003c: supply AVDD not found, using dummy regulator
[    2.859688] ov5640_mipi 2-003c: Camera is found
[    3.029304] mxc_mipi-csi 32e30000.mipi_csi: Registered sensor subdevice: ov5640_mipi 2-003c
...
...

Subsequently check that the driver has made the bind.

root@desk-mx8mm:~# ls -la /sys/bus/i2c/drivers/ov5640_mipi/2-003c
lrwxrwxrwx 1 root root 0 Jul 26 06:14 /sys/bus/i2c/drivers/ov5640_mipi/2-003c -> ../../../../devices/platform/soc@0/30800000.bus/30a40000.i2c/i2c-2/2-003c

Additional information[edit | edit source]

More information about gstreamer on its web site.

More information about i.MX gstreamer plugin on the gstreamer-imx web site