Open-drain: výstup, který umí jen dolů
Běžný výstup má dva tranzistory: jeden táhne k napájení, druhý k zemi. Open-drain má jenom ten spodní. Umí tedy vyrobit nulu — a jedničku ne. Ta vzniká tak, že tranzistor vypne a nikdo drát nedrží; vytáhne ho rezistor.
Proč by někdo dělal výstup, který umí míň
Protože takové výstupy se dají spojit. Když spojíš dva normální výstupy a jeden pošle jedničku a druhý nulu, teče mezi nimi zkratový proud (kapitola 10). Když spojíš dva open-drainy, nemůže se to stát: ani jeden neumí táhnout nahoru, takže se nemají čím přetlačovat. Výsledek je logický součin — wired-AND: dokud drží aspoň jeden nulu, je na drátě nula.
Kde se to používá a proč zrovna tam
| kde | proč |
|---|---|
| I²C (obě linky) | víc zařízení, obousměrně, a rozhodčí při souběhu adres |
| přerušení od více čipů | jeden pin místo osmi; kdokoli může zavolat |
| 1-Wire, SMBus, PMBus | totéž o patro níž |
| reset a povolení | kdokoli smí držet čip v resetu, nikdo ho z něj nesmí vytáhnout násilím |
| posun úrovní | rezistor jde na jiné napájení než čip — kapitola 6 |
Co za to
Tři věci, a všechny tři jsou v příští kapitole vyčíslené:
- Hrana nahoru je exponenciála, ne skok. Rychlost linky se najednou určuje rezistorem a kapacitou drátu, ne čipem.
- Proud teče, kdykoli je na drátě nula — a čím rychlejší hranu chceš, tím větší rezistor to nesmí být, tím větší proud.
- Nikdo ti nesmí odpovědět „jedničkou", takže ztracený nebo zaseknutý účastník se pozná jen tím, že drát zůstane dole. Zaseknuté I²C je přesně tohle.
CAN je totéž jinými prostředky. Dominantní stav přebije recesivní úplně stejnou úvahou, jen na diferenciálním páru — a arbitráž bez kolize, kterou popisuje LinkLab, je wired-AND s tímhle chováním. Jedno pravidlo, dvě sběrnice.