This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TXS0102: Level shifting between two separate ground levels

Part Number: TXS0102
Other Parts Discussed in Thread: SN74LVC1G07

I have two chips which communicate with each other using 1.8v CMOS I/O (1Mbs UART). One chip is on the normal 0v ground plane, but the second chip's ground is at .7v (so its I/O operates at 2.5v for high and .7v for low with reference to first chip's 0v ground), and this is part of the design so can not be changed. 

Im trying to figure out the best way to translate these logic levels so I/O works correctly between them. One option is to just connect them with no level shifting, in which case the the first chip would be seeing 2.5v instead of 1.8v for high (it should be able to tolerate), and .7v for low instead of 0v (which would probably not be reliable for 1.8v low logic which is around .45v to be safe). 

Other option is to use something like TXS0102, with its ground referenced to 0v, Vcca=1.8v and Vccb = 2.5v. Two questions with this, the low .7v signal from Chip 2 will be fed to the input of the TXS0102, but will this be low enough to trigger a 0v output for chip 1? Second when chip 1 is sending a low signal to Chip 2, since it will be driven down to 0v, chip 2 will see that as -.7v. Will this cause issues with the logic gate over time if its logic gate keeps seeing negative voltage for low?

I guess the main issue is how to properly shift the low level logic, since the TXS0102 will properly take care of the high logic in the upstream and downstream directions. I guess I would need some sort of logic gate that would "catch" a certain voltage range like chip 2's .7-1.15 low logic range, and force a 0v switch for the second chip but this sounds messy. What would solve this is if there was a chip that has separate ground pins for channel A/B. 

Am I overcomplicating this an is there a simpler way to do this with voltage dividers for slow 1Mbs logic?

  • Hi John,
    Are you also looking to do an auto-bidirectional voltage translation solution for this uneven communication system? This will complicate things.

    My personal recommendation would be to use unidirectional translation (ie not the TXS translator), then you only really have to worry about input thresholds.

    For example, if you were to put an open-drain buffer (for example, SN74LVC1G07) between these two systems powered by 1.8V and the output were pulled up to 2.5V, then your inputs would be 0 to 1.8V and your outputs would be 0.7V to 2.5V.

    There is only one problem with the above scheme -- the negative input clamp diode would be activated on the buffer when you dropped below -0.5V (relative to the device's ground at 0.7V). Adding a series resistor on the input (for slow datarates, a 10k could probably be used) would limit this current and prevent damage to the device or system in general.

    Converting back is a little trickier, since you will have an input range of 0.7V to 2.5V while your output is 0V to 1.8V... the input will be at 0.7V for a 'low' when you really want it to be at 0V. The VIL for the SN74LVC1G097 is 0.7V at 2.5V operation, which is borderline for the application.

    You could achieve this step-down by using a comparator to have a settable input threshold, or you could just count on 0.7V being far enough below the typical threshold of a CMOS device to work (Vt ~= Vcc/2, so 1.25V at 2.5V supply).


    Can you tell me why the system was designed this way? It seems like a pretty bad oversight unless it was intentional for some reason.
  • Its UART so two Unidirection lines. 

    I guess a solution with SN74LVC1G07 going from low side to high side would work...since this is the main issue. Reverse can be just delt with a simple diode in series with the transmission line. A .7v forward voltage diode should drop the voltages to 0 and 1.8v from the high side.

    The chips are powered in parallel series array(so GND of one parallel block is connected to VCC in the next parallel block in series). This is why there is a .7v difference in ground plane per parallel block, and the last chip in the parallel block needs to do this voltage translation in order to communicate with the next block in the series.