Jetson AGX Xavier I2C4 (0xc250000) has bad voltage levels

Hi we are trying to use the AGX Xavier for a LiDAR application. When we attempt to talk to devices on I2C4 (from the camera connector) we see bad I2C voltage levels as you can see in the attached picture. In this picture we have captured some communication with the AGX Xavier’s RealTek RT5658 audio hub when our board is not connected.

Note that the low voltage is approximately 650 mV then droops to 400 mV. There are a few pulses that are 250 mV.

We run our I2C bus at 5V on our board and use level shifters, and Jetson I2C voltages confuse them to the point that the master hangs (rarely) when talking to devices on the level shifted bus. Here you see a (successful) transaction on the level shifted bus (top traces) and the Jetson I2C4 bus (bottom traces).

The input to the level shifter is way too high when the Jetson I2C is low for both the SDA and SCL line.

Is this something related to the pad’s CFG_CAL_DRVDN? Is this a known problem with the I2C4 bus?


Is there M.2 Key M device attached on your board? I2C4 is connected to that connector too. And have you done any configuration to audio codec?

There is nothing attached on the M.2 interface. I have not touched the audio codec. Ubuntu is using it as normal.

This was fixed by increasing the pull down strength of the gen8 i2c pins using the following patch to the DTB:

 .../tegra194-soc/tegra194-soc-base.dtsi          | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/soc/t19x/kernel-dts/tegra194-soc/tegra194-soc-base.dtsi b/soc/t19x/kernel-dts/tegra194-soc/tegra194-soc-base.dtsi
index 859e421..d1c3aee 100644
--- a/soc/t19x/kernel-dts/tegra194-soc/tegra194-soc-base.dtsi
+++ b/soc/t19x/kernel-dts/tegra194-soc/tegra194-soc-base.dtsi
@@ -1762,7 +1762,21 @@
                reg = <0x0 0x2430000 0x0 0x17000
                        0x0 0xc300000 0x0 0x4000>;
                #gpio-range-cells = <3>;
-               status = "disabled";
+               status = "okay";
+               pinctrl-names = "default";
+               pinctrl-0 = <&gen8_i2c_default>;
+               gen8_i2c_default: gen8_i2c_blah {
+                       gen8_i2c_scl {
+                               nvidia,pins = "gen8_i2c_scl_pdd1";
+                               nvidia,pull-down-strength = <31>;
+                       };
+                       gen8_i2c_sda {
+                               nvidia,pins = "gen8_i2c_sda_pdd2";
+                               nvidia,pull-down-strength = <31>;
+                       };
+               };
                vbus_en0_sfio_tristate_state: vbus_en0_oc_tristate {
                        usb_vbus_en0_pz1 {

Here’s the scope output with the new settings.

1 Like