Electronic – Low profile i2c level shifting solution

i2clevel-shifting

I have a system that involves two boards and i2c communication between them. One of the boards uses 2.8V for i/o (including i2c) and the other 3.3. The 3.3V board is always the master and the 2.8V is always the slave. It will never be the case that the 2.8V part initiates a transaction. There are two board to board connectors between the boards. The relevant signals passed are +3.3V, sda (either 3.3V or 2.8V), and scl (either 3.3V or 2.8V). The 2.8V board uses an LDO to generate it's 2.8V locally from the 3.3V.

The obvious solution is two fets and 4 pull-ups, but I'm very space constrained. I have room for this on the 3.3V board, but not the 2.8V board (even when using 0402 resistors and a small array package for the two fets). The 3.3V board doesn't have any 2.8V (see above) and I cannot add anymore board to board connectors.

As a result I need to do something else. I thought about doing the "ugly" thing and putting the fets/pull-ups on the 3.3 board and generating the 2.8V with either a biased zener from the 3.3 or dropping the 3.3 over a shotkey. That's not super elegant, but would probably work OK (I don't want to add another LDO to the 3.3V board).

Any other suggestions? Sort of feel like I'm scratching my ear with my toe instead of my finger, but the design is pretty constrained.

Best Answer

How about pulling the I2C lines up to 2.8v instead of 3.3v?
The high state threshold level for the 3.3v device is obviously much lower than 2.8v (normally 0.7 * Vcc which would be 2.3v for 3.3v supply) so it should work fine.

Related Topic