CSI Dual-Output Issue in Jetson Nano Board Development (Using TCA9548A)

Hello Jetson community,
I’m encountering an issue with a board I’ve developed for the Jetson Nano. Everything on the board (e.g., other ports and interfaces) works fine; however, in the CSI section, although I expect two outputs, only one (video0) is available while the other does not appear at all. Additionally, I am using the TCA9548A chip as an I2C mux.

Detailed Information:

-> ls /dev/video*

/dev/video0
-> i2cdetect -l

i2c-3	i2c       	7000c700.i2c                    	I2C adapter
i2c-1	i2c       	7000c400.i2c                    	I2C adapter
i2c-8	i2c       	i2c-6-mux (chan_id 1)           	I2C adapter
i2c-6	i2c       	Tegra I2C adapter               	I2C adapter
i2c-4	i2c       	7000d000.i2c                    	I2C adapter
i2c-2	i2c       	7000c500.i2c                    	I2C adapter
i2c-0	i2c       	7000c000.i2c                    	I2C adapter
i2c-9	i2c       	i2c-6-mux (chan_id 2)           	I2C adapter
i2c-10	i2c       	i2c-6-mux (chan_id 3)           	I2C adapter
i2c-7	i2c       	i2c-6-mux (chan_id 0)           	I2C adapter
i2c-5	i2c       	7000d100.i2c                    	I2C adapter
-> dmesg | grep imx

[    1.264502] imx219 7-0010: tegracam sensor driver:imx219_v2.0.6
[    1.288281] imx219 7-0010: imx219_board_setup: error during i2c read probe (-121)
[    1.295967] imx219 7-0010: board setup failed
[    1.300433] imx219: probe of 7-0010 failed with error -121
[    1.300985] imx219 8-0010: tegracam sensor driver:imx219_v2.0.6
[    1.436780] vi 54080000.vi: subdev imx219 8-0010 bound
-> i2cdetect -y -r 6

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: UU -- -- -- -- -- -- -- 
-> v4l2-ctl --list-devices

vi-output, imx219 8-0010 (platform:54080000.vi:4):
	/dev/video0
-> gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=1920, height=1080, framerate=30/1, format=NV12' ! nvvidconv ! omxh264enc iframeinterval=15 control-rate=constant profile=baseline ! video/x-h264, stream-format=byte-stream ! rtph264pay ! udpsink host=....... port=3000

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Framerate set to : 30 at NvxVideoEncoderSetParameterNvMMLiteOpen : Block : BlockType = 4 
===== NVMEDIA: NVENC =====
NvMMLiteBlockCreate : Block : BlockType = 4 
H264: Profile = 66, Level = 40 
GST_ARGUS: Creating output stream
CONSUMER: Waiting until producer is connected...
GST_ARGUS: Available Sensor modes :
GST_ARGUS: 3264 x 2464 FR = 21.000000 fps Duration = 47619048 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;

GST_ARGUS: 3264 x 1848 FR = 28.000001 fps Duration = 35714284 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;

GST_ARGUS: 1920 x 1080 FR = 29.999999 fps Duration = 33333334 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;

GST_ARGUS: 1640 x 1232 FR = 29.999999 fps Duration = 33333334 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;

GST_ARGUS: 1280 x 720 FR = 59.999999 fps Duration = 16666667 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;

GST_ARGUS: 1280 x 720 FR = 120.000005 fps Duration = 8333333 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;

GST_ARGUS: Running with following settings:
   Camera index = 0 
   Camera mode  = 2 
   Output Stream W = 1920 H = 1080 
   seconds to Run    = 0 
   Frame Rate = 29.999999 
GST_ARGUS: Setup Complete, Starting captures for 0 seconds
GST_ARGUS: Starting repeat capture requests.
CONSUMER: Producer has connected; continuing.
nvbuf_utils: dmabuf_fd -1 mapped entry NOT found
nvbuf_utils: Can not get HW buffer from FD... Exiting...
CONSUMER: ERROR OCCURRED
ERROR: from element /GstPipeline:pipeline0/GstNvArgusCameraSrc:nvarguscamerasrc0: CANCELLED
Additional debug info:
Argus Error Status
Execution ended after 0:00:02.310765674
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
GST_ARGUS: Cleaning up

Note: The publishing code above gives an error while streaming video. When I stop and restart it, it freezes

Although it detects video0, I can’t stream from this port. In fact, I am facing two problems:

  1. It doesn’t detect the second CSI port; it only recognizes devices connected to one of them.
  2. Although video0 is visible, I can’t stream video.

I used an oscilloscope to monitor the SCL and SDA pins of the TCA9548 chip, but I only observed signal activity on port 0 of the chip

Does anyone with experience or suggestions have any insights on how to resolve this? Your help would be greatly appreciated. Thank you!

Hello @serkanmzlm,

Hope everything is going great.

Hope you don’t mind me asking a few questions so we can better understand your situation:

  1. Just to confirm, is it a custom carrier board you are developing?

  2. Are you using 2 imx219 cameras?

  3. Are you muxing i2c bus 6 with the TCA9548?

This behavior could be attributed to a couple of different causes, for instance, depending on how custom the board you are working on is, it could even be a HW issue.

That being said, we could try to rule out a SW issue first.

From the SW perspective, this could be caused by a device tree configuration error.

Would you be opposed to share with us schematics and DTB source code for us to review?

best regards,
Andrew
Embedded Software Engineer at ProventusNova

Hi @proventusnova ,

  1. Yes, a custom carrier board.
  2. Yes, I am using two IMX219 cameras.
  3. Yes, a TCA9548 chip is connected to the I2C-6 bus, allowing me to multiplex the I2C communication this way.

Which specific part of the board images would you like to see, and which DTB files should I send?

Additionally, these outputs might also be relevant

dmesg | grep i2c

[    0.437606] iommu: Adding device 546c0000.i2c to group 19
[    0.438986] tegra-pmc 7000e400.pmc: i2c-thermtrip node not found, emergency thermal reset disabled.
[    0.490549] iommu: Adding device 7000c000.i2c to group 23
[    0.490818] iommu: Adding device 7000c400.i2c to group 24
[    0.491069] iommu: Adding device 7000c500.i2c to group 25
[    0.491330] iommu: Adding device 7000c700.i2c to group 26
[    0.491609] iommu: Adding device 7000d000.i2c to group 27
[    0.491847] iommu: Adding device 7000d100.i2c to group 28
[    0.548958] tegra-i2c 7000c000.i2c: no acknowledge from address 0x74
[    1.078128] tegra-i2c 7000c500.i2c: no acknowledge from address 0x3d
[    1.299477] i2c /dev entries driver
[    1.302025] i2c i2c-6: Added multiplexed i2c bus 7
[    1.302444] i2c i2c-6: Added multiplexed i2c bus 8
[    1.302671] i2c i2c-6: Added multiplexed i2c bus 9
[    1.302905] i2c i2c-6: Added multiplexed i2c bus 10
[    1.327256] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x10
[    1.327534] imx219 7-0010: imx219_board_setup: error during i2c read probe (-121)
dmesg | grep imx

[    1.303736] imx219 7-0010: tegracam sensor driver:imx219_v2.0.6
[    1.327534] imx219 7-0010: imx219_board_setup: error during i2c read probe (-121)
[    1.335184] imx219 7-0010: board setup failed
[    1.339630] imx219: probe of 7-0010 failed with error -121
[    1.340179] imx219 8-0010: tegracam sensor driver:imx219_v2.0.6
[    1.491147] vi 54080000.vi: subdev imx219 8-0010 bound

I can see that the IMX is giving an error