[IMX219] Four camera don't work on Nano custom board design

Hello,
I work on custom design with Jetson Nano, which has four cameras connect to port CSI_A, CSI_C, CSI_E, CSI_F. The hardware has TCA9546ADR for switch I2C_CAM. Camera with CSI_A and CSI_C has common PWDN and MCLK and CSI_E, CSI_F has common PWDN and MCLK too.
I found the similar topic on the forum (CSI camera on jetson nano custom carrier board issue). Then I changed device tree for dual camera:
tegra210-camera-rbpcv2-dual-imx219.dtsi (37.1 KB)
tegra210-porg-camera-rbpcv2-dual-imx219.dtsi (1.9 KB)

Camera is recognized in system :
user&user:~$ v4l2-ctl --list-devices
vi-output, imx219 33-0010 (platform:54080000.vi:2):
/dev/video1
vi-output, imx219 32-0010 (platform:54080000.vi:5):
/dev/video1

The dmsg logs is below:
CSI_dont_work.txt (92.9 KB)

When I want to run up camera:
user@user:~$ export DISPLAY=:0
user@user:~$ gst-launch-1.0 nvarguscamerasrc sensor_id=0 ! nvoverlaysink
Setting pipeline to PAUSED …
Pipeline is live and does not need PREROLL …
Setting pipeline to PLAYING …
New clock: GstSystemClock
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, execute:725 No cameras available
Got EOS from element “pipeline0”.
Execution ended after 0:00:00.002940055
Setting pipeline to PAUSED …
Setting pipeline to READY …
Setting pipeline to NULL …
Freeing pipeline …
U use fakesink instead of nvoverlaysink but problem is the same…
Can you help me what I did wrong?

Have check the programing guide to confirm your device tree and confirm the sensor driver and configure by v4l2-ctl first.

I can’t find this document “programing guide”, Can you share localization? I looked in the Jetson download center and in folders contain SDK Manager.

Opps forget post the link in early comment.
Have a check this.
https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/camera_sensor_prog.47.1.html#

Thank you for link.
I have some success because one camera works fine.
Now I have only 2 (Arducam B0179 and B0189) cameras so I disable others channels. When I swap this camera then situation is the same - works only CSI_A channel. Channel CSI_F doesn’t work.

Cameras are recognized correctly in system:
user@user:~$ ls /dev/video*
/dev/video0 /dev/video1
user@user:~$ i2cdetect -l
i2c-35 i2c i2c-6-mux (chan_id 5) I2C adapter
i2c-3 i2c 7000c700.i2c I2C adapter
i2c-33 i2c i2c-6-mux (chan_id 3) I2C adapter
i2c-1 i2c 7000c400.i2c I2C adapter
i2c-31 i2c i2c-6-mux (chan_id 1) I2C adapter
i2c-6 i2c Tegra I2C adapter I2C adapter
i2c-36 i2c i2c-6-mux (chan_id 6) I2C adapter
i2c-4 i2c 7000d000.i2c I2C adapter
i2c-34 i2c i2c-6-mux (chan_id 4) I2C adapter
i2c-2 i2c 7000c500.i2c I2C adapter
i2c-32 i2c i2c-6-mux (chan_id 2) I2C adapter
i2c-0 i2c 7000c000.i2c I2C adapter
i2c-30 i2c i2c-6-mux (chan_id 0) I2C adapter
i2c-37 i2c i2c-6-mux (chan_id 7) I2C adapter
i2c-5 i2c 7000d100.i2c I2C adapter

Hardware connections are below:
[i2c mux address] → [CSI channel] → [port-index in dts]
i2c-30 → CSI_E → port-index = <4> (actual disable)
i2c-31 → CSI_C → port-index = <2> (actual disable)
i2c-32 → CSI_A → port-index = <0>
i2c-33 → CSI_F → port-index = <5>

Below are logs:

  1. dmesg boot log:
    boot_dmesg_log.txt (64.5 KB)
  2. run in terminal:
    gst-launch-1.0 nvarguscamerasrc sensor_id=1 ! nvoverlaysink:
    gst-launch-1.0 nvarguscamerasrc sensor_id=1 ! nvoverlaysink_terminal_log.txt (4.4 KB)
  3. dmesg after run: gst-launch-1.0 nvarguscamerasrc sensor_id=1 ! nvoverlaysink:
    gst-launch-1.0 nvarguscamerasrc sensor_id=1 ! nvoverlaysink_dmesg_log.txt (87.4 KB)
  4. run test /dev/video1 in terminal:
    v4l2-ctl -d /dev/video1 --set-fmt-video=width=1920,height=1080,pixelformat=RG10 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=1 --stream-to=t.raw --verbose
    v4l2-ctl_verbose.txt (996 Bytes)

Actual DTS files:
tegra210-camera-rbpcv2-dual-imx219.dtsi (41.8 KB)
tegra210-porg-camera-rbpcv2-dual-imx219.dtsi (1.9 KB)

Could you check what I made incorrect?

Does the v4l2-ctl working well? Confirm with below command.

v4l2-ctl -d /dev/video1 --set-fmt-video=width=1920,height=1080,pixelformat=RG10 --set-ctrl bypass_mode=0 --stream-mmap

The tegra_sinterface is incorrect for rbpcv2_imx219_f should be serial_f instead of serial_a

Thank you very much.
Change tegra_sinterface for rbpcv2_imx219_f from serial_a to serial_f resolved my problem.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.