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.
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:
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ámec | bitů | tolerance (celkem) |
|---|---|---|
| 8N1 | 10 | ±5,3 % |
| 8E1 | 11 | ±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.