# Connecting a 9V IC's I2C interface to 3.3v Arduino DUE

I need to connect a TDA7312 to Arduino DUE's I2C interface via SDA/SCL.

TDA7312 operates on 9V, Arduino DUE is 3.3v. Is it possible to safely connect it, without burning it? Or what should I use (level-shifting perhaps?), what's the correct way to do it?

I saw few schematics for 5V <-> 3.3V, but nothing for higher voltages.

The two I2C 'BUS' inputs/open drain outputs have $V_{IH}$ of 3V minimum, so they should work okay directly from a 3.3V logic output (I2C pullup to 3.3V). Those should be the only connections between the two devices (other than ground).

• Thank you, that makes it clear. I will put pullup resistors to 3.3v and that's enough to not burn it. – kkazakov Jun 6 '14 at 5:25
• I think on the reference design the Due has 1.5k pull-ups on board on the TWDx/TWCKx lines. (The low value is presumably for speed?) In any case, not having pull-ups won't damage anything, just the i2c won't work. – copper.hat Jun 6 '14 at 5:57

Remember the I2C bus is specified as open collector see wikipedia link for more info. This means that there is no actual high side driver internal to any I2C device. Your board must pull the bus lines up to whatever voltage is compatible with your devices via resistors, each device can then either set the lines to high impedance (to read the value of the line, or to write a '1' out) or ground the line (to write a '0'). The minimum $V_{IH}$ is apparently 3 V for the TDA7312, which means that any voltage above 3.0 V should read as a '1'. Since 3.3 V > 3.0 V, and your Duo can tolerate 3.3 V inputs, a pull-up resistor to the 3.3V power rail should make the bus compatible with both devices without needing any logic level translation.

From the NXP website:

Used the circuit to attach a 5V Arduino to a 3.3V Wii Nunchuck. Worked like a charm.

Bidirectional level shifter like the one shown in the schematic from Sparkfun should work for your application, because the high voltage is limited by the maximum voltage rating of the MOSFET.