I2c Transfer timed out

Hi all,

I have 2 identical setups with an Orin NX in a custom carrier board. One is running the older Jetpack 5.2.1 and one on the latest 5 version. I am having issues with the I2C ports on the newer version.
I am getting tegra-i2c c240000.i2c: I2C transfer timed out warnings and i2cdetect is not working.
I know the hardware is correct since I can reflash both boards and then they both work on the old but never on the new one.

Both I2c device tree configs look exactly the same to me. So not sure why its not working.
I2c bus 2(pins 185-187) and 8(pins 189-191) are not working for me, 0 the internal one seems to be fine.

I have checked with a scope and bots SCL and SDA seem fine. Lines are high on both boards. On the working setup I can see the data come by but none on the new one.

The only additional thing I added in the new dtb is disabling sd card support
sdhci@3400000 { status = "disabled"; }; But that doesnt have anything to do with I2C?

Any tips?

new_dtb.txt (427.5 KB)
old_dtb.txt (422.1 KB)

Thanks

hello r.vries,

may I double confirm these release versions,
the latest JP-5 is JetPack 5.1.3/ l4t-r35.5.0

may I also confirm what’s the device you’re going to enable?
for instance, sdhc it looks you’re going to use mmc controller, and it should be SD-card, right?

may I double confirm these release versions,
the latest JP-5 is JetPack 5.1.3/ l4t-r35.5.0

Oh woeps yes. Latest I am using is 5.1.3 and the older one im using is 5.1

may I also confirm what’s the device you’re going to enable?
for instance, sdhc it looks you’re going to use mmc controller, and it should be SD-card, right?

We disabled the sd card emmc since we dont have this. Someone else made this change so I am going to revert it to check if I2c starts working again. Could this be the issue?

hello r.vries,

please give it a try, BTW, I don’t think sd card has anything to do with I2C.

Currently building. But what else could be the problem?

I am checking the /sys/kernel/debug/pinctrl/2430000.pinmux/pinconf-groups
And I see this difference


Not sure if it could be the cause. Is there a quick way to toggle this?

After checking the pinmux for both I can see clearly that tristate is enabled. But apparently it doesnt end up being enabled in my older version.

			gen2_i2c_scl_pcc7 {
				nvidia,pins = "gen2_i2c_scl_pcc7";
				nvidia,function = "i2c2";
				nvidia,pull = <TEGRA_PIN_PULL_NONE>;
				nvidia,tristate = <TEGRA_PIN_ENABLE>;
				nvidia,enable-input = <TEGRA_PIN_ENABLE>;
				nvidia,io-high-voltage = <TEGRA_PIN_ENABLE>;
				nvidia,lpdr = <TEGRA_PIN_DISABLE>;
			};

Does it need to be enabled? And why does it end up being enabled in one version and disabled in the other when using the same pinmuxing?

may I double confirm how you flash JP-5.1.3 onto your target?

Using l4t_initrd_flash

I meant your full pipeline, had you flashing with pure JP-5.1.3, or, there’s updates included?