Change i2c bus frequency on Beaglebone Black

Normally one can inspect the i2c bus frequency by

dmesg |grep i2c

According and thanks to the discussion at here

The i2c bus frequency can be changed by edit the Linux device tree dtb file:

1. backup the original .dtb

cp /boot/am335x-boneblack.dtb /boot/am335x-boneblack.dtb.orig

2. generate the dts from the dtb

dtc -I dtb -O dts -o am335x-boneblack.dts /boot/am335x-boneblack.dtb

3. modify the dts with a text editor

i2c@4819c000 {
compatible = "ti,omap4-i2c";
#address-cells = <0x1>;
#size-cells = <0x0>;
ti,hwmods = "i2c3";
reg = <0x4819c000 0x1000>;
interrupts = <0x1e>;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <0x7>;
clock-frequency = <0x186a0>;
linux,phandle = <0x27>;
phandle = <0x27>;

4. generate the dtb from the modified dts

dtc -I dts -O dtb -o am335x-boneblack.dtb am335x-boneblack.dts

Where the i2c@4819c000 is the i2c address:

  • i2c0: 0x44E0B000 (Not available on header)
  • i2c1: 0x4802A000 (Not enabled by default)
  • i2c2: 0x4819C000 (The actual one for configured i2c-1 in Linux, although the register name/expansion port is i2c2)

And the clock-frequency = <0x186a0> is the frequency, 0x186a0 = 100000 = 100KHz here is the default i2c-1 (Expansion port i2c2) frequency for stock beaglebone black image.

5. and finally copy the dtb back to /boot/

cp am335x-boneblack.dtb /boot/am335x-boneblack.dtb


3 thoughts on “Change i2c bus frequency on Beaglebone Black

  1. Satoshi Adachi says:

    Thank you for very useful information. There seem to present several typo’s: i2c0: 0x44E0B000 –> i2c1: 0x44E0B000, i2c1: 0x4802A000 –> i2c2: 0x4802A000, i2c2: 0x4819C000 –> i2c3: 0x4819C000, Expansion port i2c2 –> Expansion port i2c3.
    I am a newcomer. I might be wrong. Please check by your self.

Leave a Reply