Hello,
I am using Orin NX platform. I have connected a quad-camera arducam multiplexer to one of the MIPI connectors on the NX.
arducam-8mp-4-quadrascopic-camera-bundle-kit-b0396
By default (without making any change), I see /dev/video0 is enumerated and I could run all the four cameras using nvgstcapture-1.0
However, I do not see the multiplexer is detected on any of the i2c bus (scanned all the busses).
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy
uname -r
5.15.148-tegra
cat /etc/nv_tegra_release
# R36 (release), REVISION: 4.3, GCID: 38968081, BOARD: generic, EABI: aarch64, DATE: Wed Jan 8 01:49:37 UTC 2025
# KERNEL_VARIANT: oot
TARGET_USERSPACE_LIB_DIR=nvidia
TARGET_USERSPACE_LIB_DIR_PATH=usr/lib/aarch64-linux-gnu/nvidia
I have made changes to the bootloader configuration pointing to the custom main device tree. File at /dev/extlinux (extlinux.conf attached)
extlinux.conf.txt (1.8 KB)
The main device tree has been updated. Multiplexer is added to it. The changes are added for i2c controller i2c@3180000. File is at /boot/dtb (tegra-custom.dts.txt)
tegra-custom.dts.txt (319.8 KB)
dmesg logs:
sudo dmesg -w | grep imx
[sudo] password for jetson:
[ 8.103831] imx219 9-0010: tegracam sensor driver:imx219_v2.0.6
[ 8.114479] imx219 9-0010: imx219_board_setup: error during i2c read probe (-121)
[ 8.119591] imx219 9-0010: board setup failed
[ 8.119648] imx219: probe of 9-0010 failed with error -121
[ 8.123941] imx219 10-0010: tegracam sensor driver:imx219_v2.0.6
[ 8.140335] tegra-camrtc-capture-vi tegra-capture-vi: subdev imx219 10-0010 bound
sudo dmesg -w | grep i2c
[ 0.169088] i2c_dev: i2c /dev entries driver
[ 2.224915] tegra-i2c 3160000.i2c: Adding to iommu group 1
[ 2.227785] tegra-i2c 3180000.i2c: Adding to iommu group 1
[ 2.232038] tegra-i2c 31b0000.i2c: Adding to iommu group 1
[ 2.233924] tegra-i2c c240000.i2c: Adding to iommu group 1
[ 2.235666] i2c 1-0025: Fixing up cyclic dependency with 3520000.padctl
[ 2.235978] tegra-i2c c250000.i2c: Adding to iommu group 1
[ 2.238332] i2c i2c-2: Added multiplexed i2c bus 9
[ 2.238785] i2c i2c-2: Added multiplexed i2c bus 10
[ 2.238788] i2c-mux-gpio bus@0:cam_i2cmux: 2 port mux on 3180000.i2c adapter
[ 8.114479] imx219 9-0010: imx219_board_setup: error during i2c read probe (-121)
with the changes mentioned, I do not see the multiplexer detected on the i2c bus.
Please provide inputs.
tegra-custom.dts.txt (319.8 KB)
sudo i2cdetect -l
[sudo] password for jetson:
i2c-0 i2c 3160000.i2c I2C adapter
i2c-1 i2c c240000.i2c I2C adapter
i2c-2 i2c 3180000.i2c I2C adapter
i2c-4 i2c Tegra BPMP I2C adapter I2C adapter
i2c-5 i2c 31b0000.i2c I2C adapter
i2c-7 i2c c250000.i2c I2C adapter
i2c-9 i2c i2c-2-mux (chan_id 1) I2C adapter
i2c-10 i2c i2c-2-mux (chan_id 0) I2C adapter
i2c-11 i2c NVIDIA SOC i2c adapter 0 I2C adapter
for bus in {0..12}; do sudo i2cdetect -r -y $bus; done
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: UU -- -- -- -- -- -- UU -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- UU -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Error: Could not open file `/dev/i2c-3' or `/dev/i2c/3': No such file or directory
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Error: Could not open file `/dev/i2c-6' or `/dev/i2c/6': No such file or directory
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Error: Could not open file `/dev/i2c-8' or `/dev/i2c/8': No such file or directory
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- 24 -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
I would expect the multiplexer to be detected (0x70) on one of the i2c bus.
With the i2c detected, it would enable me to use v4l2 to control the cameras connected to the multiplexer board
If i2cdetect unable to detect it that tell could be HW problem.
Thanks
This is my setup.
are there any device tree changes required for the multiplexer to be detected on to the i2c bus or should NX be able to detect it by default.
I have tried using different multiplexers (same as the one shown in picture), but the result is same.
using the default device trees:
I see the following (not very different)
$ sudo dmesg -w | grep i2c
[ 0.169451] i2c_dev: i2c /dev entries driver
[ 1.420257] tegra-i2c 3160000.i2c: Adding to iommu group 1
[ 1.422760] tegra-i2c 3180000.i2c: Adding to iommu group 1
[ 1.424356] tegra-i2c 31b0000.i2c: Adding to iommu group 1
[ 1.425830] tegra-i2c c240000.i2c: Adding to iommu group 1
[ 1.427169] i2c 1-0025: Fixing up cyclic dependency with 3520000.padctl
[ 1.427484] tegra-i2c c250000.i2c: Adding to iommu group 1
[ 1.429592] i2c i2c-2: Added multiplexed i2c bus 9
[ 1.430210] i2c i2c-2: Added multiplexed i2c bus 10
[ 1.430213] i2c-mux-gpio bus@0:cam_i2cmux: 2 port mux on 3180000.i2c adapter
[ 7.195209] imx219 9-0010: imx219_board_setup: error during i2c read probe (-121)
^C
$ sudo dmesg -w | grep imx
[ 7.182864] imx219 9-0010: tegracam sensor driver:imx219_v2.0.6
[ 7.195209] imx219 9-0010: imx219_board_setup: error during i2c read probe (-121)
[ 7.200345] imx219 9-0010: board setup failed
[ 7.200406] imx219: probe of 9-0010 failed with error -121
[ 7.200656] imx219 10-0010: tegracam sensor driver:imx219_v2.0.6
[ 7.227659] tegra-camrtc-capture-vi tegra-capture-vi: subdev imx219 10-0010 bound
Please consult with HW to confirm the multiplexers ack for the i2c broadcast command first. Then you need to apply your device tree for the your quad cameras.
Thanks
I see the following:
i2cdetect -y -r 2
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- 24 -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
UU
at 0x10 → Confirms that the IMX219 sensor is detected and in use by the kernel.
No 0x70 detected → The multiplexer (0x70) is not showing up.
In my device tree (default + few changes for adding multiplexer)
aliases {
mmc0 = "/bus@0/mmc@3400000";
serial0 = "/serial";
serial1 = "/bus@0/serial@3100000";
serial2 = "/bus@0/serial@3140000";
i2c0 = "/bus@0/i2c@3160000";
i2c1 = "/bus@0/i2c@c240000";
i2c2 = "/bus@0/i2c@3180000";
}
__symbols__ {
gpio = "/bus@0/gpio@2200000";
cam_i2c = "/bus@0/i2c@3180000";
}
Based on the above, I have added the multiplexer as below:
i2c@3180000 {
compatible = "nvidia,tegra194-i2c";
reg = <0x00 0x3180000 0x00 0x100>;
interrupts = <0x00 0x1b 0x04>;
#address-cells = <0x01>;
#size-cells = <0x00>;
status = "okay";
clock-frequency = <0x61a80>;
clocks = <0x03 0x32 0x03 0x66>;
assigned-clocks = <0x03 0x32>;
assigned-clock-parents = <0x03 0x66>;
clock-names = "div-clk\0parent";
resets = <0x03 0x1e>;
reset-names = "i2c";
dmas = <0xed 0x17 0xed 0x17>;
dma-names = "rx\0tx";
iommus = <0x04 0x04>;
dma-coherent;
phandle = <0x222>;
tca9548@70{ // TCA9548 I2C multiplexer at 0x70
compatible = "nxp,pca9548";
reg = <0x70>; // I2C address of the multiplexer
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
vcc-supply = <0x4c>;
force_bus_start = <0x1E>;
i2c-mux,deselect-on-exit;
i2c@0 { // Channel 0 (Camera A)
reg = <0>;
i2c-mux,deselect-on-exit;
#address-cells = <1>;
#size-cells = <0>;
rbpcv2_imx219_a@10 {
reg = <0x10>; // I2C address of IMX219 sensor
compatible = "sony,imx219";
devnode = "video0";
physical_w = "3.680";
physical_h = "2.760";
sensor_model = "imx219";
use_sensor_mode_id = "true";
status = "okay";
ports {
#address-cells = <0x01>;
#size-cells = <0x00>;
port@0 {
reg = <0x00>;
endpoint {
port-index = <0x00>;
bus-width = <0x02>;
remote-endpoint = <0x78>;
};
};
};
};
};
i2c@1 { // Channel 1 (Camera B)
reg = <1>;
i2c-mux,deselect-on-exit;
#address-cells = <1>;
#size-cells = <0>;
rbpcv2_imx219_b@10 {
reg = <0x10>; // I2C address of IMX219 sensor
devnode = "video1";
compatible = "sony,imx219";
physical_w = "3.680";
physical_h = "2.760";
sensor_model = "imx219";
use_sensor_mode_id = "true";
status = "okay";
};
};
i2c@2 { // Channel 2 (Camera C)
reg = <2>;
i2c-mux,deselect-on-exit;
#address-cells = <1>;
#size-cells = <0>;
rbpcv2_imx219_c@10 {
reg = <0x10>; // I2C address of IMX219 sensor
devnode = "video2";
compatible = "sony,imx219";
physical_w = "3.680";
physical_h = "2.760";
sensor_model = "imx219";
use_sensor_mode_id = "true";
status = "okay";
};
};
i2c@3 { // Channel 3 (Camera D)
reg = <3>;
i2c-mux,deselect-on-exit;
#address-cells = <1>;
#size-cells = <0>;
rbpcv2_imx219_d@10 {
reg = <0x10>; // I2C address of IMX219 sensor
devnode = "video3";
compatible = "sony,imx219";
physical_w = "3.680";
physical_h = "2.760";
sensor_model = "imx219";
use_sensor_mode_id = "true";
status = "okay";
};
};
};
I’m parallely consulting the multiplexer manufacturer as well.
If any of the changes above do not see right/needs to be further updated, let me know.
Thank you
The sensor IMX219 detected on i2c@3180000 that tell it does not connect to the multiplexer. You may confirm the HW design first.
system
Closed
April 2, 2025, 4:06am
10
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.