I2C Bus 7 not working on Jetson Orin Nano Developer Kit

The I2C bus 7(pins 3 and 5) is not working in my Jetson Orin Nano Development Kit. I have an Arduino Uno’s A4 and A5 pins connected to the pins 3 and 5 of the Orin (SDA and SCL) respectively with a common ground.

The i2cdetect -y -r 7 command doesn’t display any address. I have also checked the same command with different bus numbers.

To verify the Uno functionality, I connected it to the Bus 1 of the Orin (pins 27 and 28) and the Uno shows up in the i2cdetect -y -r 1 command’s output. I have also tried with two different Arduino Uno boards and got the same behaviour.

Kindly help me with this issue. Thanks

Hi trisRHere,

Are you using the devkit or custom board for Orin Nano?
What’s your Jetpack version in use?

Have you configured the pinmux for I2C before use?
Please share the full dmesg and device tree for further check.

I’m using JetPack 6.0 DP.
It is the official 8 GB version from Nvidia.

The Jetson-IO tool doesn’t show options for I2C to configure and the pin configuration shows pins 3 and 5 as i2c8 and pins 27 and 28 as i2c2.

The dmesg and device tree files are attached.
dmesg_log.txt (66.1 KB)
device_tree.txt (304.6 KB)

Please let me know if further details are required.
Thanks.

Are you putting the Orin Nano 8GB on the custom carrier board or devkit board?

They could be configured from pinmux spreadsheet.

[  303.246638] tegra-i2c 31b0000.i2c: I2C transfer timed out

From your log, it seems there’s I2C transfer timeout message.

Do you configure device node i2c@31b0000 { for your I2C device(Arduino Uno)?

It is the devkit board, not a custom carrier.

I will check the pinmux spreadsheet, but it is required for custom board only, right?

I have not configured anything, but the device is working on bus 1 (pins 27 and 28).

No, the pinmux spreadsheet is also available for the devkit and the default configuration is also applied for the devkit.

The result of devmem command for the I2C registers is:

user@tegra-ubuntu:~$ sudo busybox devmem 0x02430018
0x00001460
user@tegra-ubuntu:~$ sudo busybox devmem 0x02430020
0x00000414
user@tegra-ubuntu:~$ sudo busybox devmem 0x02430030
0x00000070
user@tegra-ubuntu:~$ sudo busybox devmem 0x02430040
0x00000460

I found the offset and base address from the TRM as below:

PADCTL_AO_GEN8_I2C_SDA_0
Offset: 0x18
PADCTL_AO_GEN8_I2C_SCL_0
Offset: 0x20
PADCTL_AO_GEN2_I2C_SCL_0
Offset: 0x30
PADCTL_AO_GEN2_I2C_SDA_0
Offset: 0x40
PADCTL_A0 0x02430000 

From the manual, I think the bits 0 and 1 should be 00 for the I2C to be enabled. The devmem result has the same. Is this method correct? I haven’t changed anything, just checked the registers.

For I2C bus 7, please check the following register:

$ sudo busybox devmem 0x0c302020 //GEN8_I2C_SCL
$ sudo busybox devmem 0x0c302018 //GEN8_I2C_SDA

bauv@jetson513:~$ sudo busybox devmem 0x0c302020
0x00001460
bauv@jetson513:~$ sudo busybox devmem 0x0c302018
0x00000460

Here is the result. Another question is will it be an issue if I short the pins 3 and 27 and pins 5 and 28? I have a PCB with ribbon cable connection to the Jetson. Right now, since I can’t use the pins 3 and 5, I’m thinking of giving all connections to pins 27 and 28. Will that cause issues?

The result seems correct for I2C usage.

PIN3 and PIN5 are for I2C1.
PIN27 and PIN28 are for I2C0.

If you want to use I2C Bus 7, please just connect I2C1(PIN3 for I2C1_SDA, PIN5 for I2C1_SCL) to your I2C device.

Yes, I have connected to pins 3 and 5, but the device doesn’t work. The same device works when connected to pins 27 and 28.

Do you mean I2C0(I2C Bus 7) work as expected but I2C1(I2C Bus 1) not work?

You can use multiple I2C devices on the same I2C bus with different device address.
But DO NOT short I2C0 and I2C1 together to prevent wrong data.

Do you mean I2C0(I2C Bus 7) work as expected but I2C1(I2C Bus 1) not work

According to this: https://jetsonhacks.com/nvidia-jetson-orin-nano-gpio-header-pinout/, I2C1 is Bus 7 and I2C0 is Bus1. In my device, Bus 1 is working as expected and Bus 7 is not working.

You can use multiple I2C devices on the same I2C bus with different device address.
But DO NOT short I2C0 and I2C1 together to prevent wrong data.

Okay, thanks for the clarification.

Sorry for my typo.

I2C0 refers to  PIN27, PIN28 => I2C Bus 1
I2C1 refers to PIN3, PIN5 => I2C Bus 7

Have you also tried with the latest version in R35 (should be L4T R35.5.0)?
Or the issue is specific to JP6.0 DP (R36.2)?

I’ve also tried with Jetpack 5.0, the same issue persists.

I’ve verified to read I2C Bus 1 and Bus 7 on Orin Nano devkit with R35.5.0 as following.

 root@tegra-ubuntu:~# i2cdetect -y -r 1
      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: -- -- -- -- -- -- -- --
 root@tegra-ubuntu:~# i2cdetect -y -r 7
      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
 00:          -- -- -- -- -- -- -- -- -- -- -- -- --
 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 70: -- -- -- -- -- -- -- --
user@tegra-ubuntu:~$ sudo i2cdetect -y -r 7
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

user@tegra-ubuntu:~$ sudo i2cdetect -y -r 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- 13 -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- UU -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

This is my output when I connect the same device with address 0x13 to bus 7 and then remove it and connect to bus 1.

It seems your I2C Bus 7 is configured correctly so that you can detect the bus through i2cdetect command.

Could you help to measure if there’s any signal on I2C bus 7 from scope?

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