When using I2C to interface devices operating at different voltages, for example an Arduino running at 5 Volts and a sensor running at 3.3 Volts, it’s usually a best practice to use a logic level converter/translator to translate one logic signal from one voltage to the other and vice versa.
There are devices which will work without problems even without a logic level converter (for example I used the ADXL345, the ITG3200 and the HMC5843 without it) but once you want to get very good precision it may be worth using a logic level converter. Moreover there are many devices which could get damaged if used without one.
There are some ready to use solutions, for example Sparkfun Logic Level Converter but in my opinion they over complicate the problem.
So, I decided it was worth designing a very simple I2C specific logic level converter. For convenience I also included a voltage regulator and optional I2C pullups resistors. The idea is that with this device you will be able to simply connect a 3.3V device to a 5V with the I2C translator in the middle and forget about anything else.
The board contains a voltage regulator, the MIC5205, and a dual bidirectional I2C bus voltage level translator, the PCA9306.
So, here it is, fresh from KiCAD:
Attached at the bottom of the page you find the schematics and its KiCAD sources.
You should be able to etch this at home without problems, I’ll get three copies of it in the next pcb order.
UPDATE 2011-01-20:
You can get the most updated designs of the I2C logic level converter from my personal Bazaar repository with the command:
bzr co http://repository.varesano.net/I2C_level_translator/
| Attachment | Size |
|---|---|
| I2C_level_translator_schematics.pdf | 29.32 KB |
| I2C_level_translator.tar_.gz | 78.71 KB |
| i2c_level_translator.png | 33.95 KB |
| I2C_level_converter_gerbers_20110404_1753.tar_.gz | 9.64 KB |