I2C #6 header usage


#1

Hello

I’m trying to use I2C from GPIO header to connect my sensors directly to Omnia (now they’re connected via usb).
I maganed to expose /dev/i2c-7 to Debian in LXC, i2cdetect shows most of the devices, but communication hangs.
I’m guessing that this may be caused by high I2C frequency (most of them can manage at most 400kHz), but I do not not how to check it, and if it is higher than 400kHz - how to change it.

Another problem is that when it hangs - it breaks also other devices connected via I2C (in this case - leds, maybe some other things).
Is there any way to reset driver?

Thanks for any hints.


#2

I have similar problems like @Cabal user, but on OpenWRT.
Question for the Turris team:

  1. For the i2c bus I have to give pull-up resisters?
  2. How to check the frequency of i2c bus? 100kHz vs 400kHz ?

#3

Do not use I2C pins.
It is not separate I2C bus, so any hang on it will cause some problems on router (from my experience, maybe I did something wrong).
After this experiment I’ve tried software I2C (on ordinary GPIO), but this also does not behave well with my extensive I2C network.
Now I’m still using old atmega connected via usb, but I want to connect I2C network via atmega connected to uart on gpio header.

If You still want to use it: yes, it requires pull-ups, but check if they are already installed on modules You want to connect.
I have no idea about frequency.


#4

So it would be useful to check the operation of the i2c bus under the oscilloscope ?


#5

Don`t have any.
But now it works quite good. And with new version (uart -> atmega -> i2c) should work as well.
The advantage of uart way is that it can be easily optoisolated.