fernando_g
Senior Member
A painful learning experience that I would like to share with others.
For a 5 volt supply and running at 100khz, the standard 10k resistors do the job quite nicely.
But on a project which had up to 8 slaveI2C devices which had to be queried constantly I found that I required to run the bus at high speed.
Then recurrent problems appeared: devices would fail to communicate randomly.
To make a loooooong story short, when you have several I2C devices and running them at 400khz, the 10k resistors don't pull the bus fast enough.
Those require to become much lower in value, but if you go too low, the drivers can't pull the bus low enough and the Vol(max) spec is violated, causing similar issues.
What to do? Asking Google 100 persons will give you 100 different values. But the following TI app note does provide the means to calculate solid resistor values.
If you are stuck in a "mysterious" I2C issue, please have a read:
For a 5 volt supply and running at 100khz, the standard 10k resistors do the job quite nicely.
But on a project which had up to 8 slaveI2C devices which had to be queried constantly I found that I required to run the bus at high speed.
Then recurrent problems appeared: devices would fail to communicate randomly.
To make a loooooong story short, when you have several I2C devices and running them at 400khz, the 10k resistors don't pull the bus fast enough.
Those require to become much lower in value, but if you go too low, the drivers can't pull the bus low enough and the Vol(max) spec is violated, causing similar issues.
What to do? Asking Google 100 persons will give you 100 different values. But the following TI app note does provide the means to calculate solid resistor values.
If you are stuck in a "mysterious" I2C issue, please have a read: