Tuning I2C bus characteristics

I’ve got my 3 Baby-O’s exchanging msgs between each other over TWI/I2C. I was content with things working until today I had a cheap storage scope arrive in the mail. Now I can see my I2C data line is really getting tweaked by I2C clock pulses, and my I2C clock look like shark fins.

Assuming I cant move the Baby-O’s or their bus lines around, can a person improve bus characteristics with chokes or caps? I like living in the nice clean digital world, so I’m not very savvy on this aspect.

Thanks for any insights


I2C depends on pull-up resistors to make the lines go up; is the rise time what is really slow? If so, you probably need stronger pull-ups. What are you using (make sure you account for multiple resistors in parallel if you have one on each device)? Caps and inductors would not help you.

- Jan

Thanks for the tip!

I adjusted my pullups from 4.7k to 2.2k and the rising edge cleaned up quite a bit. How far can I take it? Is it dependent on the lowest spec’d current any I2C member can ?sink? ?source? when pulling the bus low?

Sinking means driving the line low; that is what you need to balance against the pull-up resistor. I don’t know off the top of my head how low you can go or if there is a spec for that, but if things were working well even before you improved them, what you have now might be good enough. If you want to go to something like 1.5k or even 1k, the AVR I/O lines should be able to handle it.

- Jan

Hi Jan, thanks. I found 3ma commonly mentioned as a max, so I went with 1600 ohms and it was a tiny bit cleaner than the 2.2k. Looks like a good solution.