Electrical – Connecting AVR running at 3.3V to a 2.8V I2C bus

atmegaatmega328patmelavri2c

I want to connect an AVR (ATmega48PA) to an I2C bus whose pullups are connected to 2.8V which is the operating voltage for other devices on the bus. The AVR is running at 3.3V.

Since SDA and SCL pins are open drain, the AVR, if connected, isn't going to "push" 3.3V on the bus, so other devices on the bus are safe. Also, as per the electrical characteristics section of the datasheet, the threshold for logic high is 0.6*Vcc which comes to 1.98V for when Vcc is 3.3V. The I2C bus voltage is well above this threshold so I guess I can connect the AVR directly to the bus without any level shifting. Is that correct?

Datasheet
Page 383, Table 33-2 : Common DC Characteristics

Best Answer

Open drain outputs from a 3.3V system will share the lines with other devices on party lines pulled up to 2.8V. If you pull things down, the voltage will be near ground. That's okay for everyone. If you don't pull down, then the voltage of the line will be close to 2.8V. As you point out, it's the logic high input question of about 2V for your 3.3V system that makes you wonder.

I think it should work fine. If your device pin is acting as an input, and some other device is acting as an output using an open-drain, as well, then if they are outputting a '1' they will be in a high impedance state leaving the entire party line pulled to 2.8V by the pull-up. So long as all of the combined leakage currents of all the devices don't collectively cause that pull-up resistor to drop more than a half-volt or so, you should be fine. And it is hard to imagine that happening. Of course, I don't know the value of the pull-up, how many devices are attached, or what their leakages might be. So... hard to be absolutely sure. But I think it's okay.