By now, 3.3V has become a comfortable and common logic level for basically anything you might be hacking. However, sometimes, you still need to interface your GPIOs with devices that are 5 V, 1.8 V, or something even less common like 2.5 V. At this point, you might stumble upon autosensing level shifters, like the TXB010x series Texas Instruments produces, and decide that they’re perfect — no need to worry about pin direction or bother with pullups. Just wire up your GPIOs and the two voltage rails you’re good to go. [Joshua0] warns us, however, that not everything is hunky dory in the automagic shifting world.
During board bring-up and multimeter probing, he found that the 1.8 V-shifted RESET signal went down to 1.0V — and its 3.3 V counterpart stayed at 2.6V. Was it a current fight between GPIOs? A faulty connection? Voltage rail instability? It got more confusing as the debugging session uncovered the shifting operating normally as soon as the test points involved were probed with the multimeter in a certain order. After re-reading the datasheet and spotting a note about reflection sensitivity, [Joshua0] realized he should try and probe the signals with a high-speed logic analyzer instead.
At a high enough frequency, he’s found the signals constantly oscillating back and forth, as the shifter’s autosensing mechanism was being fooled into switching by the signal reflections at a fast enough rate to confuse the multimeter into reading the signals as being at an in-between voltage. It turns out that even with signals that are meant to change only once in a board’s bootup, these shifters might give you more trouble than they’re worth. Not to worry, however, as you still have myriad ways to level shift any signal you want.
Usually the tolerances are wide enough that it doesn’t really matter. Maybe it would cause problems with some finicky and sensitive circuits, but most of the time things will still recognize the logic levels. I’ve gotten away with simply not using a level shifter because the tolerance for my application was wide enough… A sloppy solution, but workable if you’re doing a quick and dirty one-off and not something that will go into production
I dont understand why you’d not fix this properly given that there are probably other complexities in your circuits? Are you not always going to be thinking in the back of your mind when debugging “I wonder if it’s the logic level issue”? I’m genuinely curious why people do this sort of thing.
You ask a question based on the unproven assertion of an improper fix. First you must prove that omitting level shifters is an “improper fix”.
A 5V tolerant 3V3 MCU communicating with a 5V device that requires 2.6V minimum input voltage does not need any level shifting.
We replaced a level shifter IC with transistors and all the troubles we had with HDMI DDC (i2c at 5V) went away. And saved several cents on the BOM. Plus generic transistors are easier to source.
For I2C you need a specialized Level shifter. Like the one above TXB010x, specifically says that if you need pull ups you need something like the TXS series.
I had this problem at work. I think it might even have been the same part. Two of these connected to each other (with some wire connected for my lab prototype) made a perfect 50 MHz radio transmitter =) Supposedly, there is another part from the same family that can be used for this kind of connection, which won’t oscillate.
Oh, hey, glad to read I’m not the only one who accidentally turned a pair of signal level shifters into noisy RF transmitters.
What an EMC nightmare!
Try txs instead of txb, maybe same package available