0
\$\begingroup\$

I have the following issue:

I2C data from various devices with VCC/IO level from 1.8V to 5V should be handled from my controller, but this just tollerates voltages up to 3.3v on IO pins. I had a look at different levelshifter ICs but all I found have the constraint that low Voltage needs to be smaller than high voltage side.

So I came up with this idea:

enter image description here

Is there any issue with this solution? Does anyone know a better solution?

\$\endgroup\$
  • \$\begingroup\$ Is there a reason you cannot go for the easy solution of having one central level and have all non-compliant ICs shifted to that one? \$\endgroup\$ – DonFusili Jan 10 at 11:49
  • \$\begingroup\$ No I can't because the devices that can be pluged to IO can have one fixed level between 1.8 and 5.0 \$\endgroup\$ – Steve Jan 10 at 12:47
  • \$\begingroup\$ Related: BJT bidirectional level shift. \$\endgroup\$ – jonk Jan 10 at 13:02
  • \$\begingroup\$ Try simulating it and pay concern to the high frequency capabilities of the shifter. \$\endgroup\$ – Andy aka Jan 10 at 13:04
0
\$\begingroup\$

If VCC is able to go as low as 1.8V, then the BSS138 may not be a great choice.

Lets say IO_3.3 goes low - and is 0V.

In this case, the right transistor will see VGS of 3.3V, easily enough to switch it on, and it will pull down the middle resistor, from 5V to 0V.

IO is being pulled up to 1.8V, through the 10K resistor, so now the body diode of the left transistor starts to conduct. For the BSS138, this diode has a maximum forward voltage of 1.4V - so IO is not pulled to GND, but to the diode voltage ( worst case to 1.4V )

For the left transistor, this then sees a VGS of only (1.8-1.4) = 0.4V. Not enough to switch it on - so IO is left sitting at 1.4V, and does not reach the low voltage threshold for I2C.

If you are lucky, the body diode forward voltage will be close to it's 'typical' value of 0.8V. This will produce a VGS of (1.8-0.8) = 1V. This might be enough to turn on the transistor ( VGS(th) is specified as needing 0.8 to 1.5V ), and it might work. For that particular diode, and at that particular temperature. For a while.

Other transistors are available, with lower VGS(th) and lower diode voltages.. but finding one where VGS(th) + VSD < 1.8V is challenging.

Using a dedicated I2C level shifter, something like the PCA9306, is going to be a more reliable solution, unless you can find a transistor that satisfies those voltage requirements.

| improve this answer | |
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.