FeatherS3 I2C pullups & rise times

For Adafruit customers who seek help with microcontrollers

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
cherrydev
 
Posts: 1
Joined: Mon Mar 13, 2023 11:04 pm

FeatherS3 I2C pullups & rise times

Post by cherrydev »

So, the I2C pullups (enabled with GPIO pin 7) are documented to be 5k, though the schematic appears to show 10k. The measured rise time with that pullup is about 2.5us. Pullup is so weak that I even sometimes see truncated pulses. While the built-in LC709203F "fuel gauge" does work with this setup, the I2C specs show that the max rise time on the slowest I2C spec (<=100khz) is 1us. Additionally, scanning the I2C bus in this configuration does not reliably show the LC709203F, even though you can communicate with it. Adding additional pullup strength fixes that problem. This makes me wonder if the CircuitPython bug relating to the LC709203F (https://github.com/adafruit/circuitpython/issues/6311) is related to this. In addition, even with additional pullup strength, rise time is still pretty sluggish. To get under 300ns needed for 400khz with an additional offboard I2C device (a MPU6050) I need to put a 470Ohm pullup on there, which seems really strong. I've measured the capacitance of the i2c circuit and get 200pF for the feather and 100pF for the MPU6050 but I'm not certain if that accounts for the sluggish rise or if there's something else going on. Let me know if you want to see traces or something.

User avatar
adafruit_support_mike
 
Posts: 67446
Joined: Thu Feb 11, 2010 2:51 pm

Re: FeatherS3 I2C pullups & rise times

Post by adafruit_support_mike »

cherrydev wrote: Tue Mar 14, 2023 1:32 am To get under 300ns needed for 400khz with an additional offboard I2C device (a MPU6050) I need to put a 470Ohm pullup on there, which seems really strong.
It is.

The I2C spec calls for 4.7k pull-ups on a 5V bus, so the nominal pull-up current is about 1mA. 470R on a 3.3V bus would be about 7mA, which is indeed high.

I'd suggest using the LTC4311 active terminator instead:

https://www.adafruit.com/product/4756

It watches SDA and SCL, and when it sees a change it creates a fast, low-impedance connection to the appropriate rail. It can do 400kHz with a 4000pF bus.

Locked
Please be positive and constructive with your questions and comments.

Return to “Microcontrollers”