Tegra I2C pin is not detecting my slave device.

I want to connect my slave I2C device on Tegra Jetson TK1. I have connected i2c slave device to
pin-18-SCL(J3A1 header) and pin-20-SDA(J3A1 header). They are GEN2_I2C (3.3V) (i2c-1). So when i run
“sudo i2cdetect -y (0-5)” my device address is not on the list.

I don’t know if i have to enable I2C pin or i have to do pinmuxing for that pin to configure as I2C(SCL-SDA).

I have L2T 19.3 with custom grinch kernel.
Can someone please help?
Thanks in advance…!!!

Please make sure GND signal is connected between your I2C device & Jetson.
I don’t see the pinmux change is required as I2C2 controller is selected as a default for GEN2_I2C.

Thanks youngk.

I have connected GND of device to Tegra.
Another thing is,
(1) pin 21 J3A1 - GEN1_I2C -SCL (1.8v)
(2) pin 56 J3A2 - GEN1_I2C -SCL (1.8v)
both gave clocks.

(1) pin 18 J3A1 - GEN2_I2C -SCL (3.3v)
(2) pin 8 J3A2 - CAM_I2C -SCL (3.3v)
is not giving any pulses.

I checked schematic it shows that LEVEL SIFTER from (1.8v to 3.3v) is missing in Tegra. So i got only 3v3 over pin 18 and 8 not the clock.

Any solution for this particular issue. I want 3v3 levels to drive my slave device.
Thanks in advance…!!!

There is no device connected to gen2 i2c so, can not test locally. But i2cdump tool shows SCL is well toggled in search for a device. Looking for a device to test.
Meanwhile please check in the kernel you are using if open drain is enabled for gen2 i2c pins?
If yes, please disable it and check
gen2_i2c_scl_pt5 {
nvidia,pins = “gen2_i2c_scl_pt5”;
nvidia,function = “i2c2”;
nvidia,enable-input = <TEGRA_PIN_INPUT>;
nvidia,pull = <TEGRA_PIN_PUPD_NORMAL>;
nvidia,tristate = <TEGRA_PIN_NORMAL>;
nvidia,lock = <TEGRA_PIN_LOCK_DISABLE>;

  •                   nvidia,open-drain = <TEGRA_PIN_OPEN_DRAIN_ENABLE>;
              gen2_i2c_sda_pt6 {
                      nvidia,pins = "gen2_i2c_sda_pt6";
                      nvidia,function = "i2c2";
                      nvidia,enable-input = <TEGRA_PIN_INPUT>;
                      nvidia,pull = <TEGRA_PIN_PUPD_NORMAL>;
                      nvidia,tristate = <TEGRA_PIN_NORMAL>;
                      nvidia,lock = <TEGRA_PIN_LOCK_DISABLE>;
  •                   nvidia,open-drain = <TEGRA_PIN_OPEN_DRAIN_ENABLE>;

Tested with EEPROM on i2c2 and it works fine without any change on rel21 at default speed of 100Khz. It even works at 400Khz .

Hi Procoller

Are you still have problem on i2c access?
About the i2c controller, the signal level will depend on the external pull up on Jetson, The gen2_I2C and cam_i2c were pull up to 3.3v and doesn’t need a level shift circuit for 3.3v operation.

Another topic discuss the I2C interface:

Hello edli1983,
I have resolved the problem using I2C level shifter on I2C0.

I’ve been having the same issues. I can’t get a slave recognized on either of the 3.3 V busses, either Gen2 or CAM. I too have been able to get it to work on I2C0 using a level shifter. However, I’d still like to understand why I can’t get any of the 3.3V lines working.


We are using ADV7611 and ADV7340 chips on tx2 interface board.but we are not getting any acknowledgement from adv7611 chip address 0x98 or 0x4c (7 bit address) while writing and reading from i2c device using i2cset and i2cget tools. I am getting “read/write failed” error no matter what register address is specified. besides the device is not getting detected with i2cdetect tool.

we also probed it with oscilloscope. are there any recommended settings before using i2c tools?

additional info:

I2C is running at 400 kHz

any help is much appreciated.

Thanks and regards,