I2C port name and i2cbus number

Please let me know relationship between I2C port name and i2cbus number.

As “http://elinux.org/Jetson/I2C” describes, TK1 has 6 I2C buses and 4 out of 6 are able to use on J3A1 and J3A2 connectors.
I assume that the followings from result of “i2cdetec -y #” commands and I2C address map information on the schematic.

  • GEN1_I2C = i2c-0
  • PWR_I2C = i2c-4

Tell me the followings:

  • GEN2_I2C = ?
  • CAM_I2C = ?

Regards,

Here is:

GEN1_I2C (1.8) (i2c-0)
GEN2_I2C (3.3V) (i2c-1)
PWR_I2C (1.8V) (i2c-4)
CAM_I2C (3.3V) (i2c-2)

Thank you. The pict is helpful.

The above photograph says that CAM_I2C (J3A2 pin 8 & 11) are 3.3V which is supported by http://elinux.org/Jetson/I2C but the official datasheet (http://developer.download.nvidia.com/embedded/jetson/TK1/docs/3_HWDesignDev/JTK1_DevKit_Specification.pdf) says its 1.8V. Whats the correct voltage?

Based on the schematics, the CAM_I2C_* lines have pull-ups to 1.8V so I think the official datasheet is correct and the image above and the wiki are wrong.

I pointed this out already here: https://devtalk.nvidia.com/default/topic/769727/embedded-systems/-howto-battery-backup-rtc/post/4292501/#4292501 - unfortunately unanswered. Lines are pulled up to 1.8v, but without supply on these lines. Interestingly, supply line is connected to VDDIO_CAM described as 1.8v - 3.3v. Maybye LDO1 is can be set to 3.3v?

CAM_I2C_* are both 1.8V & 3.3V tolerant.

AS3722 PMIC’s LDO1 voltage level determine TK1’s VDDIO_CAM voltage level which powers TK1’s CAM I/O partition power. Non-CSI camera interface.
i.e. CAM_I2C_*, GPIO_PCC[2:1], GPIOB_PBB[7:0], CAM_MCLK


http://developer.download.nvidia.com/embedded/jetson/TK1/docs/3_HWDesignDev/TK1_Embedded_DG.pdf

As I probed, the default pull up voltage of CAM_I2C_* on Jetson was 1.8V.

I check tegra124-jetson_tk1-pmic-pm375-0000-c00-00.dtsi - default set voltage is 1.8v

as3722_ldo1: ldo1 {
regulator-name = "vdd-cam";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-boot-on;

I want to operate CAM_I2C_ at 3.3 Volts. How can I do that?

Hi goutamgmb,

Let me be more clear.

  • VDDIO_CAM’s recommended operating range is 1.8V (min 1.71~max 1.89V) from 72p of https://developer.nvidia.com/rdp/assets/tegra-k1-datasheet

  • so changing LDO1 for VDDIO_CAM from 1.8V to 3.3V is not a valid option.

  • CAM_I2C is designed to tolerate 3.3V pull up although VDDIO_CAM is only 1.8V supply allowed.

  • You need to rework CAM_I2C’s pull up resistors “R9B10 & R9B9” to be pulled up by 3.3V rail instead of default 1.8V rail in Jetson.

  • then you can connect 3.3V operated I2C peripheral to CAM_I2C.

From the posts above it seems like you are getting CAM_I2C to work, even if it is not at the voltage you want. I have been trying to use CAM_I2C and getting nothing. I have been able to successfully use the other three I2C lines without any issues. When I checked the voltage on each of them initially they were all in a high state, and when I send data the SCL line clocks as it should. When I check the lines for CAM_I2C though they are low be default. I can open /dev/i2c-2 without any issues, but when I send data on it the SCL line stays low the entire time. I am using the grinch 19.3.6 kernel still. I have checked the dts file and the settings for the cam_i2c are the same as for the other i2c lines. I also checked to make sure I am using pins 8 and 11 of the J3A2 header shown above. I am not sure why this is not working. Is there something special I need to do to make cam_i2c work?

Hello all!

I am desperately trying to use I2C with a GY-88 unit and my Jetson Dev Board. However despite the steps in this thread it is not working.

I connected my Sensor Unit to the GEN2_I2C correctly and installed the i2c-tools. However if i run i2cdetect -y 1 i get nothing back =/

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

The GY-88 unit requires 3.3 V so I think it is connected correctly and my I2C buses are recognized correctly.

ubuntu@tegra-ubuntu:~$ sudo i2cdetect -l
i2c-0	i2c       	Tegra I2C adapter               	I2C adapter
i2c-1	i2c       	Tegra I2C adapter               	I2C adapter
i2c-2	i2c       	Tegra I2C adapter               	I2C adapter
i2c-3	i2c       	Tegra I2C adapter               	I2C adapter
i2c-4	i2c       	Tegra I2C adapter               	I2C adapter
i2c-5	i2c       	Tegra I2C adapter               	I2C adapter

What am I missing? Do I need to activate I2C somewhere else? Do I have to load a module to be able to use I2C with my GY-88 Unit? I am completely out of ideas =/

Thanks in advance!
Gerald

What is the wiring scheme you are using? In other words, which pins on J3A1 are you connecting to the unit?

Here’s a blog entry about connecting a similar device: http://jetsonhacks.com/2015/04/28/inertial-measurement-unit-imu-part-iii/

Which version of L4T are you using? The above demo was given on L4T 21.3, I do not know if I2C is enabled on earlier versions. I have been using

$ i2cdetect -y -r 1

for detecting when a device is on pins J3A1-18 and J3A1-20. I am not sure if all of the GEN2_I2C are on bus 1, but pins 18 and 20 (which are 3.3V I2C) are on bus 1.

I finally did it. I do not know if the installation of the grinch kernel helped anything to it but with Kangalows Command

$ i2cdetect -y -r 1

I got the desired results of i2cdetect.

Also using a simple Demo program I was able to check that the unit is working correctly! Thanks for the hint ;)

best regards
Gerald

Excellent Gerald! AFAIK, the Grinch adds support for I2C real time clocks. In my case, I did not use the Grinch to enable I2C, it just works out of the box on a stock kernel.

Hi, I’m totally new to the Jetson, Arms, device trees, and i2c.

Can someone provide a clear summary of how to get the i2c ports to use 3.3 V for the Gen and Cam lines?

According to Table 109 in youngk’s post, note 5, those ports need to have Open Drain set true. Looking at the device tree in LTK 21.4 it appears that they already are.

Here youngk says “- You need to rework CAM_I2C’s pull up resistors “R9B10 & R9B9” to be pulled up by 3.3V rail instead of default 1.8V rail in Jetson.”

What does this mean? How is this accomplished? Or is there nothing to worry about, simply connect the i2c from the Jetson to another i2c on a 3.3 V line and I’m good to go?

Thanks.

Hi, I’m totally new to the Jetson, Arms, device trees, and i2c.

Can someone provide a clear summary of how to get the i2c ports to use 3.3 V for the Gen and Cam lines?

According to Table 109 in youngk’s post, note 5 (see the original post, the forum won’t let me post images because I’m too new), those ports need to have Open Drain set true. Looking at the device tree in LTK 21.4 it appears that they already are.

Here youngk says “- You need to rework CAM_I2C’s pull up resistors “R9B10 & R9B9” to be pulled up by 3.3V rail instead of default 1.8V rail in Jetson.”

What does this mean? How is this accomplished? Or is there nothing to worry about, simply connect the i2c from the Jetson to another i2c on a 3.3 V line and I’m good to go?

Thanks.

Sorry for the double post, it kept giving me errors every time I tried, so I thought none had gone through.

I’m not sure about about any “safe” way to tell you about changing resistors, but many of the outputs are open-drain type and can work with any voltage within their tolerance. The output being talked about can tolerate either 1.8V or 3.3V, and the choice is via a resistor to a 1.8V power source or a 3.3V power source. One could change the resistor value and connect to a 3.3V rail instead of the existing 1.8V rail and go natively to 3.3V.

Or…you could use a level converter. They’re inexpensive, here’s an example:
https://www.sparkfun.com/products/11771

If you want help finding resistors, here’s the schematic URL:
http://developer.download.nvidia.com/embedded/jetson/TK1/docs/602-7R375-0000-D00.Schematics.Rev.4.02.pdf

Here’s an assembly drawing to help find parts:
http://developer.download.nvidia.com/embedded/jetson/TK1/docs/242-7R375-1000-D00.Searchable.PDF.of.Assembly.Drawing.pdf

I’m attempting to connect to a slave via the gen2_i2c bus, so I expect it to show up when I do a i2cdetect -y 2. I have already confirmed that this command works with a Raspberry Pi and the slave responds with address 0x08, as I expected.

When I put a voltmeter on the pins (SCL: 18, SDA: 20, J3A1 header) I see that they are already sitting at 3.3V, so I’m assuming they are already pulled up to the 3.3 V source and that I do not need a level converter.

So the connections I have between the Jetson and my slave are SCL, SDA, 3.3 V, and GND. This configuration, without the 3.3 V line, works for me with the Raspberry Pi.

If I put an oscilloscope on the lines and do an i2cdetect -y 2 I see no change. If I try i2cdetect -y 1 then I see square pulses on SCL, but only noise on SDA.

Looking at the device tree I see that both the SDA port and the SCL port are configured to open drain.

What am I missing here?