[Libre-soc-bugs] [Bug 746] I2C needs an Open Drain IO Pad

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Mon Nov 15 22:46:25 GMT 2021


https://bugs.libre-soc.org/show_bug.cgi?id=746

--- Comment #4 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
(In reply to Staf Verhaegen from comment #3)
> I don't see the problem. IC controller will deliver i, o, oe signals; if you
> want to MUX it with a signal that is only output you need to mux 1 on oe. If
> you want to mux it with only input signal you need to mux 0 on oe pin.

I2C is very strange, it is a shared cooperative bus.  even when one master
one slave the SDA data line is timeshared between them.

however SDA it is not a push-push driven line: it is Open Drain with
external pullup 2.2 kOhm resistors at each peripheral.

so you are only allowed to pull it to GND, to signal a zero,
and to indicate a 1 it must be put tristate, letting the 2.2k
resistor bring the line HI.

(actually that might be the other way round: to signal
a *one* pull to GND, to signal a zero it must be tristated)

the danger of multiple slaves going amok and accidentally
getting into a current fight by one trying to push HI and
the other push the line LO if ever they get out of sync is thus
avoided.

two push-push drivers would be a short circuit and would damage
one or both IO Pads.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the libre-soc-bugs mailing list