Multi_camera "No cameras available"

I got a HDMI2MIPI chip(lt6911uxc) that always output mipi 1080P60 YUV422 signal and need to be controlled, I have drive it. But When I execute multi_camera to test it, it prints the error “No cameras available”.Here is the information.

Media device information

driver vi
model NVIDIA Tegra Video Input Device
serial
bus info
hw revision 0x3
driver version 0.0.0

Device topology

  • entity 1: nvcsi–1 (2 pads, 2 links)
    type V4L2 subdev subtype Unknown flags 0
    device node name /dev/v4l-subdev0
    pad0: Sink
    ← “lt6911uxc 3-0056”:0 [ENABLED]
    pad1: Source
    → “vi-output, lt6911uxc 3-0056”:0 [ENABLED]

  • entity 4: lt6911uxc 3-0056 (1 pad, 1 link)
    type V4L2 subdev subtype Sensor flags 0
    device node name /dev/v4l-subdev1
    pad0: Source
    [fmt:YUYV8_1X16/1920x1080 field:none colorspace:srgb]
    → “nvcsi–1”:0 [ENABLED]

  • entity 6: vi-output, lt6911uxc 3-0056 (1 pad, 1 link)
    type Node subtype V4L flags 0
    device node name /dev/video0
    pad0: Sink
    ← “nvcsi–1”:1 [ENABLED]

Acquiring SCF Camera device source via index 0 has failed. === gst-launch-1.0[32007]: CameraProvider initialized (0x7f75bd23e0)=== gst-launch-1.0[32007]: CameraProvider destroyed (0x7f75bd23e0)=== gst-launch-1.0[32007]: Connection closed (7F7BE131D0)=== gst-launch-1.0[32007]: Connection cleaned up (7F7BE131D0)=== multi_camera[2352]: Connection established (7F7BE131D0)OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module0
May 10 15:34:54 alfred-desktop nvargus-daemon[5052]: NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
May 10 15:34:54 alfred-desktop nvargus-daemon[5052]: NvPclHwGetModuleList: No module data found
May 10 15:34:54 alfred-desktop nvargus-daemon[5052]: OFParserGetVirtualDevice: NVIDIA Camera virtual enumerator not found in proc device-tree
May 10 15:34:54 alfred-desktop nvargus-daemon[5052]: ---- imager: No override file found. ----
May 10 15:34:54 alfred-desktop nvargus-daemon[5052]: (NvCamV4l2) Error ModuleNotPresent: V4L2Device not available (in /dvs/git/dirty/git-master_linux/camera/utils/nvcamv4l2/v4l2_device.cpp, function findDevice(), line 256)
May 10 15:34:54 alfred-desktop nvargus-daemon[5052]: (NvCamV4l2) Error ModuleNotPresent: (propagating from /dvs/git/dirty/git-master_linux/camera/utils/nvcamv4l2/v4l2_device.cpp, function initialize(), line 60)
May 10 15:34:54 alfred-desktop nvargus-daemon[5052]: (NvOdmDevice) Error ModuleNotPresent: (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2SensorViCsi.cpp, function initialize(), line 107)
May 10 15:34:54 alfred-desktop nvargus-daemon[5052]: NvPclDriverInitializeData: Unable to initialize driver v4l2_sensor
May 10 15:34:54 alfred-desktop nvargus-daemon[5052]: NvPclInitializeDrivers: error: Failed to init camera sub module v4l2_sensor
May 10 15:34:54 alfred-desktop nvargus-daemon[5052]: NvPclStartPlatformDrivers: Failed to start module drivers
May 10 15:34:54 alfred-desktop nvargus-daemon[5052]: NvPclStateControllerOpen: Failed ImagerGUID 0. (error 0xA000E)

  1. Is the data correct?
  2. How can I see the hardware state for csi and vi?
  3. Is there any suggestions?

Argus not support YUV sensors. Please access YUV sensor from v4l2src or V4L2 API.

Is there any samples about v4l2src or V4L2 API in the JetPack?

You can launch v4l2src by gst-launch-1.0 or check the below sample code.

12_camera_v4l2_cuda
v4l2cuda

I executed 12_camera_v4l2_cuda with the command that is “sudo ./camera_v4l2_cuda -d /dev/video0 -s 1920x1080 -f YUYV -n 60 -c”
But it was timeout. It seemed no data.
Here is the kernel information:
nvmap_alloc_handle: PID 24532: camera_v4l2_cud: WARNING: All NvMap Allocations must have a tag to identify the subsystem allocating memory.Please pass the tag to the API call NvRmMemHanldeAllocAttr() or relevant
video4linux video0: frame start syncpt timeout!0

Here is the app informateion:
Camera v4l2 buf length is not expected

Check with v4l2-ctl to confirm if the HW or driver working well first.

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=YUYV--set-ctrl bypass_mode=0 --stream-mmap --stream-count=100

I executed command. Here is the log:
video4linux video0: frame start syncpt timeout!0

Looks like can’t capture frame data successfully.
Enable the dev_dbg() in csi2_fops.c to check the error status for debugging.

sudo su
echo file csi2_fops.c +p > /sys/kernel/debug/dynamic_debug/control

[csi]csi_parse_dt =_ " Failed to find num of channels, set to 0\012"
[csi]read_settle_time_from_dt =_ “settle time reading from props\012”
[csi]read_settle_time_from_dt =_ “settle time reading from of_node\012”
[csi]read_settle_time_from_dt =_ “no cil_settletime in of_node”
[csi]read_discontinuous_clk_from_dt =_ “discontinuous_clk = %u reading from props\012”
[csi]read_discontinuous_clk_from_dt =_ “no discontinuous_clk in of_node”
[csi]read_discontinuous_clk_from_dt =_ “discontinuous_clk = %u from of_node\012”
[csi]read_phy_mode_from_dt =_ “settle time reading from props\012”
[csi]read_phy_mode_from_dt =_ “phy mode unavailable in props, use default\012”

[csi2_fops]csi2_mipi_cal =p “Calibrate csi port %d\012”
[csi2_fops]tegra_csi_status =p “TEGRA_CSI_PIXEL_PARSER_STATUS 0x%08x\012”
[csi2_fops]tegra_csi_status =p “TEGRA_CSI_CIL_STATUS 0x%08x\012”
[csi2_fops]tegra_csi_status =p “TEGRA_CSI_CILX_STATUS 0x%08x\012”
[csi2_fops]csi2_start_streaming =p “cil_settingtime was autocalculated”
[csi2_fops]csi2_start_streaming =p “csi clock settle time: %u, cil settle time: %u”

I want to use CSI4 4Lanes

Nano is csi version 2 that using csi2_fops.c this driver.
Enable those status print and check from dmesg after run the v4l2-ctl command

[24679.391915] vi 54080000.vi: Calibrate csi port 4
[24679.408467] vi 54080000.vi: cil_settingtime was autocalculated
[24679.408474] vi 54080000.vi: csi clock settle time: 13, cil settle time: 10
[24679.610810] video4linux video0: frame start syncpt timeout!0
[24679.616976] vi 54080000.vi: TEGRA_CSI_PIXEL_PARSER_STATUS 0x00000000
[24679.617019] vi 54080000.vi: TEGRA_CSI_CIL_STATUS 0x00000010
[24679.617039] vi 54080000.vi: TEGRA_CSI_CILX_STATUS 0x00040041
[24679.617135] vi 54080000.vi: cil_settingtime was autocalculated
[24679.617156] vi 54080000.vi: csi clock settle time: 13, cil settle time: 10

Looks like the output signal didn’t follow the MIPI timing. Have a check the REG CSI_CSI_CILA_STATUS_0 from the TRM for detail information.

[24679.617039] vi 54080000.vi: TEGRA_CSI_CILX_STATUS 0x00040041

That means I have opened the csi4 correctly?But the mipi signal is not correct? Or the setting of the csi4 interfaces are not match?

Looks like the sensor output signal problem.

In the tegra210-porg-p3448-common.dtsi,I modify like that


tegra210-camera-e2832.dtsi is modified from the sampe dti

/ {
host1x {
vi_base: vi {
num-channels = <1>;
status = “okay”;
ports {
#address-cells = <1>;
#size-cells = <0>;
vi_port0: port@0 {
status = “okay”;
reg = <0>;
e2832_vi_in0: endpoint {
status = “okay”;
port-index = <4>;
bus-width = <4>;
remote-endpoint = <&e2832_csi_out0>;
};
};
};
};

	csi_base: nvcsi {
		num-channels = <1>;
		#address-cells = <1>;
		#size-cells = <0>;
		csi_chan0: channel@0 {
			status = "okay";
			reg = <0>;
			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				csi_chan0_port0: port@0 {
					status = "okay";
					reg = <0>;
					e2832_csi_in0: endpoint@0 {
						status = "okay";
						port-index = <4>;
						bus-width = <4>;
						remote-endpoint = <&e2832_out0>;
					};
				};
				csi_chan0_port1: port@1 {
					status = "okay";
					reg = <1>;
					e2832_csi_out0: endpoint@1 {
						status = "okay";
						remote-endpoint = <&e2832_vi_in0>;
					};
				};
			};
		};
	};
};

i2c@7000c700 {
	e2832@2b {
		compatible = "nvidia,lt6911uxc";
		/* I2C device address */
		reg = <0x56>;

		/* V4L2 device node location */
		devnode = "video0";

		/* Physical dimensions of sensor */
		physical_w = "3.674";
		physical_h = "2.738";

		sensor_model = "e2832";

		/* Define any required hw resources needed by driver */
		/* ie. clocks, io pins, power sources */
		avdd-reg = "vana";
		iovdd-reg = "vif";
		dvdd-reg = "vdig";

		/* Defines number of frames to be dropped by driver internally after applying */
		/* sensor crop settings. Some sensors send corrupt frames after applying */
		/* crop co-ordinates */
		/*post_crop_frame_drop = "0";*/

		/**
		* ==== Modes ====
		* A modeX node is required to support v4l2 driver
		* implementation with NVIDIA camera software stack
		*
		* == Signal properties ==
		*
		* phy_mode = "";
		* PHY mode used by the MIPI lanes for this device
		*
		* tegra_sinterface = "";
		* CSI Serial interface connected to tegra
		* Incase of virtual HW devices, use virtual
		* For SW emulated devices, use host
		*
		* pix_clk_hz = "";
		* Sensor pixel clock used for calculations like exposure and framerate
		*
		* readout_orientation = "0";
		* Based on camera module orientation.
		* Only change readout_orientation if you specifically
		* Program a different readout order for this mode
		*
		* == Image format Properties ==
		*
		* active_w = "";
		* Pixel active region width
		*
		* active_h = "";
		* Pixel active region height
		*
		* pixel_t = "";
		* The sensor readout pixel pattern
		*
		* line_length = "";
		* Pixel line length (width) for sensor mode.
		*
		* == Source Control Settings ==
		*
		* Gain factor used to convert fixed point integer to float
		* Gain range [min_gain/gain_factor, max_gain/gain_factor]
		* Gain step [step_gain/gain_factor is the smallest step that can be configured]
		* Default gain [Default gain to be initialized for the control.
                                 *     use min_gain_val as default for optimal results]
		* Framerate factor used to convert fixed point integer to float
		* Framerate range [min_framerate/framerate_factor, max_framerate/framerate_factor]
		* Framerate step [step_framerate/framerate_factor is the smallest step that can be configured]
		* Default Framerate [Default framerate to be initialized for the control.
                                 *     use max_framerate to get required performance]
		* Exposure factor used to convert fixed point integer to float
		* For convenience use 1 sec = 1000000us as conversion factor
		* Exposure range [min_exp_time/exposure_factor, max_exp_time/exposure_factor]
		* Exposure step [step_exp_time/exposure_factor is the smallest step that can be configured]
		* Default Exposure Time [Default exposure to be initialized for the control.
                                 *     Set default exposure based on the default_framerate for optimal exposure settings]
		* For convenience use 1 sec = 1000000us as conversion factor
		*
		* gain_factor = ""; (integer factor used for floating to fixed point conversion)
		* min_gain_val = ""; (ceil to integer)
		* max_gain_val = ""; (ceil to integer)
		* step_gain_val = ""; (ceil to integer)
		* default_gain = ""; (ceil to integer)
		* Gain limits for mode
		*
		* exposure_factor = ""; (integer factor used for floating to fixed point conversion)
		* min_exp_time = ""; (ceil to integer)
		* max_exp_time = ""; (ceil to integer)
		* step_exp_time = ""; (ceil to integer)
		* default_exp_time = ""; (ceil to integer)
		* Exposure Time limits for mode (sec)
		*
		* framerate_factor = ""; (integer factor used for floating to fixed point conversion)
		* min_framerate = ""; (ceil to integer)
		* max_framerate = ""; (ceil to integer)
		* step_framerate = ""; (ceil to integer)
		* default_framerate = ""; (ceil to integer)
		* Framerate limits for mode (fps)
		*
		* embedded_metadata_height = "";
		* Sensor embedded metadata height in units of rows.
		* If sensor does not support embedded metadata value should be 0.

		* num_of_exposure = "";
		* Digital overlap(Dol) frames
		*
		* num_of_ignored_lines = "";
		* Used for cropping, eg. OB lines + Ignored area of effective pixel lines
		*
		* num_of_lines_offset_0 = "";
		* Used for cropping, vertical blanking in front of short exposure data
		* If more Dol frames are used, it can be extended, eg. num_of_lines_offset_1
		*
		* num_of_ignored_pixels = "";
		* Used for cropping, The length of line info(pixels)
		*
		* num_of_left_margin_pixels = "";
		* Used for cropping, the size of the left edge margin before
		* the active pixel area (after ignored pixels)
		*
		* num_of_right_margin_pixels = "";
		* Used for cropping, the size of the right edge margin after
		* the active pixel area
		*
		*/
		mode0 { // E2832_1920x1080_60Fps
			mclk_khz = "24000";
			num_lanes = "4";
			tegra_sinterface = "serial_a";
			phy_mode = "DPHY";
			discontinuous_clk = "yes";
			dpcm_enable = "false";
			cil_settletime = "0";

			active_w = "1920";
			active_h = "1080";
			mode_type = "yuv";
			pixel_phase = "yuyv";
			csi_pixel_bit_depth = "16";
			readout_orientation = "0";
			line_length = "1920";
			inherent_gain = "1";
			mclk_multiplier = "24";
			pix_clk_hz = "576000000";

			gain_factor = "16";
			framerate_factor = "1000000";
			exposure_factor = "1000000";
			min_gain_val = "16"; /* 1.00x */
			max_gain_val = "170"; /* 10.66x */
			step_gain_val = "1";
			default_gain = "16"; /* 1.00x */
			min_hdr_ratio = "1";
			max_hdr_ratio = "1";
			min_framerate = "2000000"; /* 2.0 fps */
			max_framerate = "60000000"; /* 60.0 fps */
			step_framerate = "1";
			default_framerate = "60000000"; /* 60.0 fps */
			min_exp_time = "13"; /* us */
			max_exp_time = "683709"; /* us */
			step_exp_time = "1";
			default_exp_time = "16667"; /* us  */
		};

		mode1 { // E2832_1280x720_60Fps
			mclk_khz = "24000";
			num_lanes = "4";
			tegra_sinterface = "serial_a";
			phy_mode = "DPHY";
			discontinuous_clk = "yes";
			dpcm_enable = "false";
			cil_settletime = "0";

			active_w = "1280";
			active_h = "720";
			mode_type = "yuv";
			pixel_phase = "yuyv";
			csi_pixel_bit_depth = "16";
			readout_orientation = "0";
			line_length = "1280";
			inherent_gain = "1";
			mclk_multiplier = "24";
			pix_clk_hz = "576000000";

			gain_factor = "16";
			framerate_factor = "1000000";
			exposure_factor = "1000000";
			min_gain_val = "16"; /* 1.00x */
			max_gain_val = "170"; /* 10.66x */
			step_gain_val = "1";
			default_gain = "16"; /* 1.00x */
			min_hdr_ratio = "1";
			max_hdr_ratio = "1";
			min_framerate = "2000000"; /* 2.0 fps */
			max_framerate = "60000000"; /* 60.0 fps */
			step_framerate = "1";
			default_framerate = "60000000"; /* 60.0 fps */
			min_exp_time = "13"; /* us */
			max_exp_time = "683709"; /* us */
			step_exp_time = "1";
			default_exp_time = "16667"; /* us  */
		};

		ports {
			status = "okay";
			#address-cells = <1>;
			#size-cells = <0>;
			port@0 {
				status = "okay";
				reg = <0>;
				e2832_out0: endpoint {
					status = "okay";
					port-index = <4>;
					bus-width = <4>;
					remote-endpoint = <&e2832_csi_in0>;
				};
			};
		};
	};
};

};

/ {

tegra-camera-platform {
	compatible = "nvidia, tegra-camera-platform";
	/**
	* Physical settings to calculate max ISO BW
	*
	* num_csi_lanes = <>;
	* Total number of CSI lanes when all cameras are active
	*
	* max_lane_speed = <>;
	* Max lane speed in Kbit/s
	*
	* min_bits_per_pixel = <>;
	* Min bits per pixel
	*
	* vi_peak_byte_per_pixel = <>;
	* Max byte per pixel for the VI ISO case
	*
	* vi_bw_margin_pct = <>;
	* Vi bandwidth margin in percentage
	*
	* max_pixel_rate = <>;
	* Max pixel rate in Kpixel/s for the ISP ISO case
	*
	* isp_peak_byte_per_pixel = <>;
	* Max byte per pixel for the ISP ISO case
	*
	* isp_bw_margin_pct = <>;
	* Isp bandwidth margin in percentage
	*/
	num_csi_lanes = <4>;
	max_lane_speed = <1500000>;
	min_bits_per_pixel = <10>;
	vi_peak_byte_per_pixel = <2>;
	vi_bw_margin_pct = <25>;
	max_pixel_rate = <750000>;
	isp_peak_byte_per_pixel = <5>;
	isp_bw_margin_pct = <25>;

	/**
	 * The general guideline for naming badge_info contains 3 parts, and is as follows,
	 * The first part is the camera_board_id for the module; if the module is in a FFD
	 * platform, then use the platform name for this part.
	 * The second part contains the position of the module, ex. "rear" or "front".
	 * The third part contains the last 6 characters of a part number which is found
	 * in the module's specsheet from the vender.
	 */
	modules {
		module0 {
			badge = "e2832_ltx6911";
			position = "bottom";
			orientation = "1";
			drivernode0 {
				/* Declare PCL support driver (classically known as guid)  */
				pcl_id = "v4l2_sensor";
				/* Driver v4l2 device name */
				devname = "e2832 2-002b";
				/* Declare the device-tree hierarchy to driver instance */
				proc-device-tree = "/proc/device-tree/i2c@7000c700/e2832@2b";
			};
		};
	};
};

};

I don’t know if it’s all right.

Does it connect to which csi? It’s confuse for the tegra_sinterface = “serial_a” and port-index

It connect to csi4 and 4lanes. Nano
I changed it to tegra_sinterface = “serial_e”, but it is the same error.

The error is about the MIPI signal doesn’t matter with dts configure. Maybe need to check with vendor for the sensor initial REG table.

Through the log, Is the setting of jetson nano correct?First, I juest want to comfirm the setting(csi4, YUV422_8bit). If the setting of nano is all right. I will check with vendor.

Didn’t find any incorrect for the dts configure.