2
\$\begingroup\$

I’m using an ESP32-S3 to communicate with a 5V-only LCD module with an i8080 parallel bus interface. To shift the levels, I’m using the SN74LVC8T245 bidirectional level shifter. This means I can both read and write from the LCD by switching the direction of the bus part.

In the datasheet for the level shifter it says that the input circuitry is always active and thus there needs to always be a valid level on the input. Since the LCD module sometimes can be tri-stated on the bus pins, I plan on adding pull-ups on that side.

My plan was to configure the ESP32 side bus pins as simultaneous input/output with internal pull-ups in order to avoid the extra discrete components. This way, I can just disable the output when reading but the pull-ups will always be there.

However, between MCU reset and until my code which configures this runs, the pins will be hi-Z inputs without pull-ups which is the default setting after reset. Thus, the MCU side input circuitry of the level shifter will be floating for a brief moment.

So my question is, how long is it okay for pins to be floating during reset of an MCU in general? If nothing must ever be floating, I feel like you would always need external pull-ups or pull downs when connecting an MCU to the input of some other IC. Surely this isn’t what people mean when they say “no floating pins”?

\$\endgroup\$
1
  • \$\begingroup\$ Is anything connected to - driving - these hi-Z inputs during reset/power up? \$\endgroup\$
    – SteveSh
    Commented Jun 22 at 13:33

2 Answers 2

6
\$\begingroup\$

There isn't really an "in general" answer.

How long you can leave a GPIO floating depends on what is connected to it.

If it's a status indicator LED, then it isn't going to cause a problem if it flickers during power on.

If it drives a 100 watt motor that howls like mad for two seconds, driving a machine at full power everytime you turn it on, then that's a problem you're going to need to fix.

If the circuit your GPIO drives will do something undesired when floating, then you need to put in a pull-up or pull-down resistor to set the default behavior to something safe.

In the case of your SN74LVC8T245, you'll probably want to do one of two things:

  1. Provide pull-up resistors on all data pins so that there's a defined state on all pins.
  2. Use a pull-up to hold the OE signal high until your ESP32 has booted, then switch OE low using a GPIO.

Either one of those steps should prevent random data going to the LCD.

\$\endgroup\$
2
  • \$\begingroup\$ Yes, the OE pin is handled but the data sheet still implies that the input circuitry is active even when output is disabled and this should have a valid level still to prevent issues with current consumption. I don’t quite understand how bad this would be. Using pull-ups on both sides would definitely solve it of course. \$\endgroup\$ Commented Jun 22 at 16:25
  • \$\begingroup\$ Another option is to use the SN74LVHC8T245 which has bus-hold functionality that avoids the problem entirely. \$\endgroup\$ Commented Jun 22 at 16:26
4
\$\begingroup\$

If your level shifters says it's not OK then it's not OK and it has nothing to do with in which circuitry the level shifter is, MCUs or no MCUs.

Also note that the data sheet of the level shifter says that the inputs must be at valid levels to guarantee proper operation and minimize power consumption. There is also a link to TI appnote about implications of slowly changing or floating inputs, SCBA004, which may further provide you insight what might happen and why.

The point is, your circuit might be fine if you don't need proper operation or don't care about power consumption until the MCU initializes the IO pins.

Sometimes the worst problems don't happen when power supplies are up and MCU is not yet running code, but before that. This level shifter also requires two supply voltages and it may have certain requirements in which order and how fast the supplies start up and how the IO pins are stable during the powerup.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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