I had another run-in with “quasi-bidirectional” ports today. As on the last project where I encountered them, they caused confusion. Today’s encounter was with the PCA9501 I/O port chip.
They should be called “open-drain outputs with moderate pulls connected to an input”.
They are open-drain outputs and can only be used as input ports by writing a logic high and then reading.
The thing that makes them tricky is the built-in pullup in moderately strong. In the circuit I encountered today uses a quasi-bidirectional port as an output to drive the base of a ‘3904. The moderately 100uA pullup is enough to drive the transistor, but I would have to crunch some numbers to know if will work in this circuit over the entire range (the low end) of beta values for a ‘3904.

Adding exteranl pullup is an easy solution in this case because this board’s power budget is not tight.
The tricky part is that quasi-directional ports have a read/write bit, giving the user the impression that it functions as either a push-pull output or a standard input. The port’s ability to source some current furthers this misconception.
