3.18. Základy UART

UART (Universal Asynchronous Receiver-Transmitter) je nejstarší a nejjednodušší způsob přenosu bajtů mezi dvěma mikrokontroléry nebo mezi mikrokontrolérem a hostitelským PC. Data přenášejí dva vodiče – jeden pro každý směr – a signál se vrací přes sdílenou zem. Žádná ze stran neběží na sdílených hodinách; obě strany se předem dohodnou na přenosové rychlosti (baud rate) a časování bitů obnovují přímo z datové linky.

3.18.1. Snímek

Každý znak na lince je zabalen do snímku: start bit, datové bity, volitelný paritní bit a jeden nebo dva stop bity.

Průběh signálu UART snímku. Vlevo je signál v klidovém stavu ve vysoké úrovni, poté klesne na nízkou úroveň na dobu jednoho bitu (start bit), následně přenese osm datových bitů v pořadí za sebou a nakonec se vrátí do vysoké úrovně na dobu jednoho bitu (stop bit), než se vrátí do klidového stavu.

Jeden UART snímek: start bit, osm datových bitů a stop bit, každý široký jeden bitový interval (1 / baudrate sekund).

Linka je v klidu ve vysoké úrovni. Přijímač sleduje sestupnou hranu, která označuje začátek nového snímku. Poté vzorkuje datovou linku jednou za bitový interval – obvykle uprostřed každého bitu – a z bitů sestaví zpět znak. Stop bit vrátí linku do klidového stavu, takže lze detekovat další start bit.

3.18.2. Přenosová rychlost (baud rate)

Bitový interval – a tím i rychlost spoje – určuje přenosová rychlost (baud rate), tedy počet bitů za sekundu. 9600, 19200, 38400, 57600, 115200, 230400, 460800 a 921600 jsou standardní hodnoty; 115200 je nejběžnější výchozí hodnotou. Obě strany se musí shodnout na přenosové rychlosti s přesností na několik procent, jinak přijímač vzorkuje bity ve špatných okamžicích a data přijdou poškozená.

Vyšší přenosové rychlosti přenesou více dat za sekundu, ale jsou citlivější na délku kabelu, kapacitu a přesnost hodin na obou koncích. Pro krátké spoje mezi dvěma deskami na jednom pracovním stole funguje rozsah 115200921600 pohodlně.

3.18.3. Zapojení

UART spoj využívá tři vodiče:

Dvě desky označené A a B, propojené třemi vodiči. Pin TX desky A je připojen k pinu RX desky B; pin TX desky B je připojen k pinu RX desky A; a zemnicí piny obou desek jsou propojeny dohromady.

Zapojení UART: TX jedné desky jde na RX druhé a obě země jsou propojeny.

  • TX → RX, oběma směry. Vysílací pin každé desky je přijímacím pinem druhé desky. Častou chybou začátečníků je zapojení TX → TX – dva výstupy bojují proti sobě a na žádném z přijímačů nejsou data.

  • Sdílená zem. Úrovně signálu jsou vztaženy k zemi, takže obě desky musí mít společnou zem, jinak přijímač vidí na lince nesprávné napětí.

3.18.4. Napěťové úrovně a fyzické vrstvy

Úrovně signálu na UART pinech kamery jsou 3,3 V CMOS: zem pro logickou nulu a 3,3 V pro logickou jedničku. Cokoli, co komunikuje pomocí 3,3 V CMOS UART – jiný mikrokontrolér, USB-to-serial adaptér nastavený na 3,3 V, 3,3 V GPS modul – lze připojit přímo.

Poznámka

Zařízení s 5 V CMOS UART (starší mikrokontroléry, některé GPS moduly, některé starší rozšiřující desky se senzory) používají stejné UART rámcování při 5 V logických úrovních. Jejich přímé připojení ke kameře je nebezpečné: 5 V TX budící RX kamery překračuje absolutní maximum vstupního napětí na kamerách, které nejsou tolerantní k 5 V, a 3,3 V TX kamery nemusí dosáhnout vysokého prahu 5 V zařízení pro čistou logickou jedničku.

Převod mezi oběma napětími vyžaduje aktivní budič linky – vyhrazený obousměrný posouvač úrovní (level-shifter) s vlastními budicími tranzistory na obou stranách každé linky. Pasivní posouvače s MOSFETem a pull-up rezistorem z Posun napěťových úrovní zde nestačí: jejich náběžné hrany spoléhají na nabíjení linky přes rezistor, což je v pořádku při spínacích rychlostech, ale příliš pomalé pro UART. Při 115200 baudech trvá každý bit přibližně 8 µs a RC zpomalení pasivního posouvače rozmaže jeden bit do dalšího.

Aktivní budič linky vytváří čisté hrany v obou směrech při plných UART rychlostech. Vyberte součástku dimenzovanou na přenosovou rychlost, kterou bude spoj využívat, zapojte TX a RX kamery na 3,3 V stranu posouvače a zapojte TX a RX 5 V zařízení na 5 V stranu posouvače.

Tři starší fyzické vrstvy používají stejné rámcování, ale jiná napětí, a mezi nimi a 3,3 V mikrokontrolérem potřebují převodník úrovní:

  • RS-232. Používá se na sériových portech stolních PC a některém průmyslovém vybavení. Signál se pohybuje zhruba mezi ±5 V a ±15 V, s klidovým stavem na záporné úrovni. Oproti CMOS má obrácenou polaritu a vysoké napětí; převod zajišťuje čip z rodiny MAX232 / MAX3232 (nebo podobný).

  • RS-422. Standard diferenciálního signalizování pro spoje typu bod-bod (jeden budič, až deset přijímačů). Budič vysílá po symetrickém páru vodičů; přijímač vidí rozdíl mezi nimi a ignoruje soufázový šum po cestě. Plně duplexní spoje používají dva páry – jeden pro každý směr. RS-422 dosahuje vzdáleností od desítek metrů po kilometr v závislosti na přenosové rychlosti a mezi TX / RX kamery a symetrickým párem je zapojen transceiver čip RS-422.

  • RS-485. Vícebodový příbuzný RS-422 – stejné diferenciální signalizování, ale navržené pro zapojení až 32 budičů a přijímačů na jedné sběrnici. Většina spojů je poloduplexních na jediném páru, kde budič i přijímač každého uzlu sdílejí stejné vodiče a software rozhoduje, kdo vysílá. Používá se v průmyslových automatizačních sběrnicích (Modbus, DMX512, Profibus), kde vodiče vedou na velké vzdálenosti a je vysoká úroveň rušení; mezi TX / RX kamery a diferenciálním párem je zapojen transceiver čip RS-485.

Obě stále posílají UART snímky na úrovni jednotlivých bitů. Konfigurace machine.UART kamery (přenosová rychlost, počet bitů, parita, stop bity) je stejná bez ohledu na to, která fyzická vrstva přenáší signál na druhé straně transceiveru.