Arduino I2C level conversion

arduinoi2c

I'm working with Arduino Uno (Rev 3) to interface a DRV2605 haptic driver to control several ERM/LRA motors using I2C.

As I look at examples on the web, I see everyone uses a I2C level conversor to drop the voltage from 5v to 3.3V, despite according to the driver datasheet and the I2C protocol description it is possible to use 5V directly. I understand that the only requirement is that both devices work at the same voltage level.

Is there any reason (apart from power efficiency) to use 3.3V over 5V?

Best Answer

If you use the i2c pins of the arduino only to pull the signal to ground and to go Hi-Z and leave the bus pull-up for 3.3v it should work, because the logic levels are usually reasonably compatible.

People might use logic converters out of habit - if a chip takes 3.3V and is SPI and you dump arduino's 5V in it's input, you might fry it, but since I2C devices only pull the bus to ground or go Hi-Z, it should be ok.