Kódování na lince: NRZ, Manchester a stejnosměrná složka
Až doteď jsme mlčky předpokládali, že jednička je vysoká úroveň a nula nízká. Tomu se říká NRZ a je to nejlevnější možnost — a taky ta, která má dva problémy.
Problém 1: dlouhý úsek bez hrany
Když přijde dvacet nul za sebou, na lince se dvacet bitů nic neděje. Příjemce nemá podle čeho doladit hodiny (kapitola 4) a odpočítat dvacet bitů bez opory je moc. Řešení jsou tři a všechna se používají:
- Krátké rámce a start bit — cesta UARTu.
- Vkládání bitů — cesta CANu a USB.
- Kódování, které hranu vynutí — Manchester.
Problém 2: stejnosměrná složka
Když je v datech víc jedniček než nul, průměrné napětí na lince se posune. To by nevadilo, kdyby mezi vysílačem a příjemcem byl jen drát — jenže bývá tam transformátor nebo kondenzátor (kvůli galvanickému oddělení, kvůli bezpečnosti, kvůli rozdílným zemím). A ten stejnosměrnou složku neprojde. Rozhodovací úroveň příjemce se pomalu odplouvá a linka se rozpadne po delší sérii stejných bitů.
Manchester řeší obojí naráz. Každý bit se vysílá jako hrana uprostřed: jednička jako sestupná, nula jako náběžná. Tím je zaručeno, že hrana přijde každý bit, a zároveň je každý bit půl času nahoře a půl dole — stejnosměrná složka je přesně nula, ať jsou data jakákoli. Cena je dvojnásobná šířka pásma, což je hodně.
| NRZ | NRZI | Manchester | |
|---|---|---|---|
| symbolů na bit | 1 | 1 | 2 |
| hrana zaručena | ne | jen na nulách | vždy |
| stejnosměrná složka | závisí na datech | závisí na datech | nula |
| kde | UART, SPI, CAN | USB (+ stuffing) | Ethernet 10BASE-T, RFID, DALI |
A co dnešní rychlé linky
Zdvojnásobit šířku pásma je u gigabitových rychlostí neúnosné, takže se používají kódy, které zaručí hrany i vyváženost za mnohem menší cenu: 8b/10b posílá deset symbolů na osm bitů (režie 25 % místo 100 %) a 64b/66b u 10gigabitového Ethernetu jen 3 %. Princip je pořád ten samý — jen se sledují delší bloky a hlídá se běžící nevyváženost, tedy kolik nadbytečných jedniček se za dobu přenosu nasčítalo.