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

Looks like unable to communicate with IMX219 via i2c command.
You may need to check the HW and maybe probe the i2c signal to confirm IMX219 ACK for the i2c command.

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