How to increase I2C speed on Jetson TX2 Jetpack 4.2 to 1 MHz using

I have paired a micro controller to the Jetson TX2 using I2C. The micro controller’s I2C bus can reach speeds of 6MHz (3MHz without overclocking the CPU). The Jetson’s I2C speed is set to 400 KHz.

According to “Jetson TX2 System-on-Module Data Sheet” page 38 section 4.7 the Jetson has Standard-mode (up to 100Kbit/s), Fast-mode (up to 400 Kbit/s), and Fast-mode plus (Fm+, up to 1Mbit/s).

I would need to activate Fast-mode plus to receive the data transfer speeds I need.

https://devtalk.nvidia.com/default/topic/820522/jetson-tk1/operating-i2c-at-100-khz/post/5239697/#5239697

The latest post in the above forum from rtennill gave an answer that seemed to work for me:

  1. Open the file: /sys/bus/i2c/devices/i2c-/bus_clk_rate

  2. Change the number 400,000 to 1,000,000

The clock should now have a speed of should increase to the number entered. The clock was 1 MHz when I tested it. However, I have not yet tested for reliance of the data. It is possible I have not truly activated the Fast-mode plus specified in Jetson TX2 System-on-Module Data Sheet.

I will keep you updated as I continue to work.

1 Like

I have done extensive testing. The correct way to change the i2c bus clock rate is to follow the above instructions. The i2c bus has a clock rate of 1,000,000 bits/second. It also transfers data at that rate without error.

Keep in mind the i2c transfer buffer is hard coded to 32 bytes per transfer in or out. Also, the i2c clock rate is reset back to 400,000 every time the Linux machine turns off then on.

2 Likes

Is there a ‘proper’ way to fix this value between reboots?

You can modify the clock-frequency in the i2c controller node in the device tree.