Návrh pull-upu: dvě nezávislé podmínky
„Dej tam 4k7." Tahle věta zabila víc I²C sběrnic než všechno ostatní dohromady. Pull-up nemá jednu správnou hodnotu — má okno, jeho hranice se počítají ze dvou úplně různých úvah, a to okno se dá zavřít.
- R = ?
Hledá se jedno číslo: rezistor. Nemá jednu správnou hodnotu, ale rozsah — a ten rozsah ohraničují dvě podmínky, které spolu nesouvisí.
- Rmin = (VDD − VOL)/IOL = 967 Ω
Když je na drátě nula, teče rezistorem proud do sepnutého tranzistoru. Ten má svůj jmenovitý proud, a víc po něm chtít nesmíš — jinak nula vyleze nad práh.
- Rmax = tr/(ln(7/3)·C) = 3541 Ω
Nahoru drát netáhne nikdo, jen ten rezistor přes kapacitu. Je to exponenciála a musí se stihnout dřív, než přijde další bit.
- Rmax,svod = (VDD − VIH)/Isvod = 99000 Ω
Každý vstup na drátě si bere trochu proudu i v klidu. Na velkém rezistoru z toho vznikne úbytek — a jednička klesne pod práh, aniž by ji někdo táhl dolů.
- 967 … 3541 Ω (3,7×)
Rezistor musí splnit všechny tři. Zbylý interval je celá odpověď — a když je prázdný, žádný rezistor to nespraví a musí se ubrat kapacita nebo rychlost.
Zdola: kolik toho tranzistor utáhne
Když je na drátě nula, teče rezistorem proud rovnou do sepnutého tranzistoru. Ten má jmenovitý IOL a nad ním mu — přesně podle kapitoly 5 — vyleze úroveň nad práh.
Shora: jak rychle se drát vytáhne
Nahoru nikdo netáhne, takže napětí roste po exponenciále s časovou konstantou RC. Specifikace I²C měří hranu mezi 30 % a 70 % napájení, a ta doba je:
Odkud se to číslo bere: je to logaritmus, ne empirie. Doba mezi 30 % a 70 % je RC·ln(0,7/0,3) = RC·ln(2,333) = 0,84730·RC. Specifikace ho tiskne zaokrouhlené na 0,8473, a když se v této labce porovná s LinkLabem, který používá tu tištěnou hodnotu, liší se výsledky o 2,6 milióntiny — přesně o to zaokrouhlení a o nic jiného. Testy si to hlídají v obou směrech, aby se skutečný rozpor nemohl schovat do volné tolerance.
A ještě jednou shora: svod
Každý vstup na lince si bere klidový proud — jednotky mikroampér, ale sečtené přes dvacet zařízení a čtyři konektory to je klidně sto. Ten proud teče přes pull-up a vyrobí na něm úbytek. Jednička pak nesedí na napájení, ale níž, a při dost velkém rezistoru spadne pod práh.
Když je okno prázdné
Tři podmínky se můžou minout. Na 1 MHz je dovolená hrana 120 ns, takže při 400 pF vyjde Rmax = 354 Ω — a to je míň než Rmin = 967 Ω. Žádný rezistor neexistuje. To není chyba výpočtu, to je odpověď: ta sběrnice je na tu rychlost příliš velká. Řešení je ubrat kapacitu (kratší spoje, míň zařízení), zpomalit, nebo dát opakovač.
Praktická čísla
| situace | C | okno | volba |
|---|---|---|---|
| dvě čidla na desce, 100 kHz | 50 pF | 0,97 – 23,6 kΩ | 4k7 (široko) |
| plná deska, 400 kHz | 150 pF | 0,97 – 2,36 kΩ | 1k5 |
| přes konektor a kabel, 400 kHz | 300 pF | 0,97 – 1,18 kΩ | 1k, a je to těsné |
| 1 MHz na velké sběrnici | 400 pF | — | nejde |
Doporučená hodnota v kalkulačce je geometrický střed okna, ne aritmetický: obě hranice jsou od sebe v poměru, ne v rozdílu, a geometrický střed je jediný bod stejně daleko od obou v tom smyslu, ve kterém na tom záleží.