I'm trying to connect a few devices on an I2C bus - primarily a GNSS module and a microcontroller. The microcontroller is the bus controller and must run on 3.3V, while the GNSS module internally uses 2.8V logic. How can I shift this 0.5V differential between 2.8 and 3.3V with an level shifting IC?
I figured this was exactly what I2C buffers are made for. There are circuits to level-shift I2C busses using discrete transistors, but I'd like a convenient VSSOP package, an enable pin, and a known-good configuration. The classic IC for this seems to be the PCA9306, available from NXP, Texas Instruments, OnSemi, and probably others.
Unfortunately, they don't seem to be designed for 2.8 to 3.3V shifting: Both NXP and On Semi warn (using the exact same language and similar diagrams; looks rather a lot like plagarism guys...) that:
In the Enabled mode, the applied enable voltage and the applied voltage at Vref(1) should be such that Vbias(ref)(2) is at least 1 V higher than Vref(1) for best translator operation.
TI has a more reasonable value for the MOSFET thevenin voltage:
VREF2 Reference voltage [Minumum:] VREF1 + 0.6V
EN pin high logic must not exceed Vref2 + Vth (0.6V)
but they also state (page 12, section 8.1.5):
PCA9306 has the capability of being used with its VREF1 voltage equal to VREF2
How can I make this work? I'm happy to drive the EN pin with a 3.3V GPIO (there's already one that does this), but how does this work around the minimum voltage requirement?