LinkLab linka je dohoda, ne drát

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

Dvě strany bez společných hodin

UART má dva vodiče a ani jeden z nich není hodinový. Obě strany si tedy čas měří samy, každá podle svého oscilátoru — a ty dva se nikdy netrefí přesně. Otázka není, jestli se rozejdou, ale jestli se stihnou rozejít dost na to, aby to vadilo.

vysílačpříjemce vzorkujeodchylka+3.00 %posun na posledním bitu0.29 bitupovolená odchylka±5.3 %
Táhni odchylkou hodin a sleduj, kdy se vzorkovací body posunou tak, že spadnou do vedlejšího bitu. U delšího rámce se to stane dřív.

Rozpočet

Příjemce najde sestupnou hranu startu a od ní si odpočítá půl bitu do středu prvního bitu, pak celý bit do dalšího a tak dál. Chyba se sčítá, takže nejhůř je na posledním bitu rámce. Ten se u 8N1 vzorkuje 9,5 bitové doby po hraně, a posunout se smí nejvýš o půl bitu:

tolerance = 0,5 / 9,5 = 5,3 %8N1, vzorkování uprostřed

To je součet obou stran. Když se rozdělí půl na půl, vyjde ±2,6 % na každou — a to je důvod, proč krystal s tolerancí 50 ppm funguje bez problémů, kdežto vnitřní RC oscilátor mikrokontroléru s ±10 % bez kalibrace komunikovat nemůže.

rámecbitůtolerance (celkem)
8N110±5,3 %
8E111±4,8 %
9E2 (nejdelší)13±4,0 %

Proto se v každém rámci znovu startuje. Kdyby se bity posílaly v jednom nepřetržitém proudu, chyba by se sčítala donekonečna a po stovce bitů by byla komunikace nemožná. Start bit rozpočet vynuluje — a přesně tohle je ta cena za to, že se ušetřil hodinový vodič. Jiné sběrnice to řeší jinak: SPI a I²C hodiny prostě mají, CAN se resynchronizuje na každé hraně uvnitř rámce, a proto smí být rámec dlouhý.

Nejčastější příznak v praxi

Když jsou hodiny mimo, nepřijde nic čitelného, ale ani se nic nehlásí — přijde bajt, který dává smysl jako číslo, jen je jiný. Klasickým příznakem je, že to „chodí pomalu, ale rychle ne“, protože chyba v procentech je stejná, ale rezerva v absolutním čase se s rychlostí zmenšuje spolu se vším ostatním. Když se místo textu sypou znaky s vysokým bitem, obvykle sedí rychlost a nesedí počet datových bitů nebo parita.

Vzorce v této kapitole

tol — tolerance hodin
tol = 0,5 / (n − 0,5) [—] kap. 4