GPIO – Understanding Bi-directional Three State IO and Microprocessor GPIO

bidirectionalgpiotri-state

I want to use an MP5010B Electronic Fuse IC. I will enable or disable it by using the Enable/Fault pin which is billed as a bi-directional three state IO.

I will enable or disable this pin using a microprocessor such as an AVR with a GPIO pin.

I also want to monitor the status of the efuse with the same microprocessor.

The relevant part of the IC data sheet that explains the functioning of the enable/fault pin is extraced here:

The Enable/Fault pin is a bi-directional, three-
level I/O with a weak pull-up current (25μA, typ.).
The three levels are LOW, MID, and HIGH. It
functions to enable/disable the part and to relay
fault information.

Enable/Fault as an input:

  1. LOW and MID disable the part.
  2. LOW, in addition to disabling the part,
    clears the fault flag.
  3. HIGH enables the part (if the fault flag is
    clear).

Enable/Fault as an output:

  1. The pull-up current will allow a “wired
    nor” pull-up to enable the part (if not
    overridden).
  2. An under-voltage condition will cause a
    LOW on the Enable/Fault pin, and will
    clear the fault flag.
  3. A thermal fault will set a MID on the
    Enable/Fault pin, and will set the fault
    flag

I do not understand how to employ both this input and this output function at the same time on the AVR. Could someone explain how this interface will look electrically between a 3.3V Arduino and this electronic fuse chip including the state of any internal pullups if needed on the AVR pin ?

Best Answer

The "pin functions" table shows what you should do:

Enable/Fault. A tri-state, bi-directional interface. Leave floating to enable the output. Pull to ground (using an open drain or open collector device) to disable the output. If a thermal fault occurs, this voltage enters an intermediate state to signal that the device is in thermal shutdown.

So your GPIO must never actively drive high.

  • When you want to disable the fuse, configure the GPIO as low output.
  • When you want to enable the fuse, configure the GPIO as an input (this is the only way to prevent it from driving high).
  • Using the ACR's ADC to monitor for the fault condition would be difficult because the ADC requires a signal with an impedance of less than 10 kΩ. You can use a digital input if the switching threshold is below 1.95 V.