Two cameras cannot work at the same time

We connect two cameras to the Orin Nano carrier board.

1.Hardware Information
YUV Camera (2lane)

CSI2_CLK_P
CSI2_CLK_N
CSI2_D1_P
CSI2_D1_N
CSI2_D0_P
CSI2_D0_N

RAW Camera (2lane)

CSI3_D0_N
CSI3_D0_P
CSI3_D1_P
CSI3_D1_N
CSI3_CLK_N
CSI3_CLK_P

2.Device tree
Two cameras, the following parameters are configured to be the same

pix_clk_hz = "200000000";
serdes_pix_clk_hz = "200000000";

3.Bring up the two cameras separately
Image output is normal

Bring up YUV Camera first, it works.

Stop YUV Camera,bring up the RAW Camera, it works.

4.Bring up two cameras at the same time

Bring up YUV Camera first, it works.

Don’t stop the YUV Camera,bring up the Raw Camera,argus_camera error

Hi @norman_xu

Could you please share the following information?

List formats for both cameras:

  • YUV camera
v4l2-ctl -d /dev/video3 --list-formats-ext
  • Raw cameras (assuming is device 2)
v4l2-ctl -d /dev/video2 --list-formats-ext

Could you please share the pipeline that the argus_camera is using?

Have you tried testing the capture process by using v4l2-ctl?

Regards!
Eduardo Salazar
Embedded SW Engineer at RidgeRun

Contact us: support@ridgerun.com
Developers wiki: https://developer.ridgerun.com/
Website: www.ridgerun.com

hello norman_xu,

why it’s argus_camera -d 2 in your command-line? it’s launching 3rd camera actually.
may I confirm the number of cameras in your system?
besides, please also share the position property settings within tegra-camera-platform{} for cross-check.

Hi Jerry,

1.A total of 4 cameras are connected
Video0: GMSL RAW Camera0 (4lane)
Video1: GMSL RAW Camera1 (4lane)

CSI0_D0_P
CSI0_D0_N
CSI0_D1_P
CSI0_D1_N
CSI1_D0_P
CSI1_D0_N
CSI1_D1_P
CSI1_D1_N
CSI0_CLK_P
CSI0_CLK_N

Video2: MIPI RAW Camera2 (2lane)

CSI2_CLK_P
CSI2_CLK_N
CSI2_D1_P
CSI2_D1_N
CSI2_D0_P
CSI2_D0_N

Video3: IR YUV Camera3 (2lane)

CSI3_D0_N
CSI3_D0_P
CSI3_D1_P
CSI3_D1_N
CSI3_CLK_N
CSI3_CLK_P

2.tegra-camera-platform

tegra-camera-platform {
	compatible = "nvidia, tegra-camera-platform";

	num_csi_lanes = <8>;
	max_lane_speed = <1500000>;
	min_bits_per_pixel = <10>;
	vi_peak_byte_per_pixel = <2>;
	vi_bw_margin_pct = <25>;
	max_pixel_rate = <240000>;
	isp_peak_byte_per_pixel = <5>;
	isp_bw_margin_pct = <25>;

	modules {
		module0 {
			badge = "cam_bottomleft";
			position = "bottomleft";
			orientation = "1";
			drivernode0 {
				/* Declare PCL support driver (classically known as guid)  */
				pcl_id = "v4l2_sensor";
				/* Driver v4l2 device name */
				devname = "ar0234-gmsl 2-001b";
				/* Declare the device-tree hierarchy to driver instance */
				proc-device-tree = "/proc/device-tree/i2c@3180000/cam_0@1b";
			};
		};
		module1 {
			badge = "cam_bottomright";
			position = "bottomright";
			orientation = "1";
			drivernode0 {
				/* Declare PCL support driver (classically known as guid)  */
				pcl_id = "v4l2_sensor";
				/* Driver v4l2 device name */
				devname = "ar0234-gmsl 2-001c";
				/* Declare the device-tree hierarchy to driver instance */
				proc-device-tree = "/proc/device-tree/i2c@3180000/cam_1@1c";
			};
		};
		module2 {
			badge = "cam_centerleft";
			position = "centerleft";
			orientation = "1";
			drivernode0 {
				/* Declare PCL support driver (classically known as guid)  */
				pcl_id = "v4l2_sensor";
				/* Driver v4l2 device name */
				devname = "ar0234-mipi 2-0018";
				/* Declare the device-tree hierarchy to driver instance */
				proc-device-tree = "/proc/device-tree/i2c@3180000/cam_2@18";
			};
		};
		module3 {
			badge = "cam_centerright";
			position = "centerright";
			orientation = "1";
			drivernode0 {
				/* Declare PCL support driver (classically known as guid)  */
				pcl_id = "v4l2_sensor";
				/* Driver v4l2 device name */
				devname = "iray_cam 2-001d";
				/* Declare the device-tree hierarchy to driver instance */
				proc-device-tree = "/proc/device-tree/i2c@3180000/cam_3@1d";
			};
		};
	};
};

3.Bring up
Viode0/1 and Video2 can work at the same time
Viode0/1 and Video3 can work at the same time
Viode2 and Video3 cannot work at the same time

Hi Eduardo,

1.List formats for both cameras

2.Using v4l2-ctl, also can’t work at the same time
Whichever camera is started first will work, and the other one will not work.


hello norman_xu,

here’re several questions,

(1) are those cameras running with virtual channel support?

otherwise, the setting below define total active CSI lanes.

(2) according to below, which two were Video2 and Video3?

(3) did you using i2cmux? it looks all your camera were connected to i2c@3180000.

Hi Jerry,

(1)Yes, the two cameras use different virtual channels

Video 0: VC0
Video 1: VC1

(2)

Video 2:cam_2@18
Video 3:cam_3@1d

(3)Not using i2cmux

hello norman_xu,

please also note that, libargus only support bayer raw camera sensors.

Hi Jerry,

Yes, for yuv camera, we use gst-launch-1.0 instead of argus_camera。

gst-launch-1.0 v4l2src device=/dev/video3 ! 'video/x-raw, format=UYVY, width=1280, height=512, framerate=50/1' ! nvvidconv ! nvegltransform ! nveglglessink -e

hello norman_xu,

I doubt it’s the issue with i2c conflicts.
please dig into these two camera settings, you should have separate configurations for Video2 and Video3, so that they could work at the same time.

Hi @norman_xu

Could you share the cameras’ device trees (dtsi) to check them?

Regards!