Univerzální asynchronní transceiver (UART, anglicky Universal Asynchronous Receiver-Transmitter, UART ) je uzel výpočetních zařízení určený k organizaci komunikace s jinými digitálními zařízeními. Převádí přenášená data do sériové podoby, aby je bylo možné přenášet po jedné fyzické digitální lince do jiného podobného zařízení. Konverzní metoda je dobře standardizovaná a široce používaná ve výpočetní technice (zejména ve vestavěných zařízeních a systémech na čipu (SoC) ).
Je to logický obvod, na jedné straně připojený ke sběrnici výpočetního zařízení a na druhé straně se dvěma nebo více piny pro externí připojení.
UART může být samostatný čip (jako je Intel I8251, I8250) nebo může být součástí velkého integrovaného obvodu (jako je mikrokontrolér ). Slouží k přenosu dat přes sériový port počítače .
Přenos dat do UART se provádí po jednom bitu v pravidelných intervalech. Tento časový interval je určen zadanou rychlostí UART a udává se v baudech pro konkrétní připojení (což v tomto případě odpovídá bitům za sekundu). Existuje obecně uznávaný rozsah standardních rychlostí: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400; 460800; 921600 baudů. Rychlost ( , baud) a trvání bitu ( , sekundy) jsou propojeny pomocí . Přenosová rychlost je někdy označována slangovým slovem boudrate nebo bitrate .
Kromě informačních bitů UART automaticky vkládá do proudu časové značky, tzv. start a stop bity . Při příjmu jsou tyto extra bity odstraněny z proudu. Obvykle počáteční a koncové bity rámují jeden bajt informace (8 bitů), zatímco nejméně významný informační bit je vysílán jako první, bezprostředně po spuštění. Existují implementace UART, které přenášejí 5, 6, 7 nebo 9 informačních bitů. Minimálním předpokladem jsou zarámované počáteční a koncové bity. Některé implementace UART používají během přenosu dva stop bity, aby se snížila možnost desynchronizace přijímače a vysílače během silného provozu. Přijímač ignoruje druhý stop bit a považuje jej za krátkou pauzu na lince.
Je dohodnuto, že pasivní (při absenci datového toku) stav vstupu a výstupu UART je logická 1. Start bit je vždy logická 0, takže přijímač UART čeká na hranu od 1 do 0 a počítá od je to časový interval poloviny doby trvání bitu (střed přenosu počátečního bitu). Pokud je v tuto chvíli vstup stále 0, je zahájen proces příjmu minimální zprávy. K tomu přijímač počítá 9 bitových trvání za sebou (pro 8bitová data) a v každém okamžiku zachycuje stav vstupu. Prvních 8 hodnot jsou přijatá data, poslední hodnota je testovací hodnota (stop bit). Hodnota stop bitu je vždy 1. Pokud je skutečná přijatá hodnota jiná, UART opraví chybu.
Pro vytváření časových intervalů mají vysílací a přijímací UARTy přesný zdroj času (takto). Přesnost tohoto zdroje by měla být taková, aby součet chyb (přijímače a vysílače) nastavení časového intervalu od začátku startovacího impulsu do středu zastavovacího impulsu nepřesáhl polovinu (nebo lepší než čtvrtinu ) bitového intervalu [1] . U 8bitové zprávy je tato hodnota 0,5/9,5 ≈ 5 %. V praxi by při zohlednění možného zkreslení signálu ve vedení neměla být celková chyba časování větší než 3 %. Vzhledem k tomu, že v nejhorším případě lze sečíst chyby taktů přijímače a vysílače, není doporučená tolerance přesnosti taktování UART větší než 1,5 %.
Protože hodinové bity zabírají část bitového toku, výsledná šířka pásma UART je menší než rychlost linky. Například u 8bitových paketů 8-N-1 zabírají synchronizační bity 20 % toku, což při fyzické rychlosti linky 115200 baudů znamená užitečnou rychlost přenosu dat 92160 bps nebo 11520 bajtů/s.
Informační bity |
počet jednotlivých bitů
informace |
stav paritního bitu v režimu: | |
---|---|---|---|
dokonce | zvláštní | ||
00000000 | 0 | 0 | jeden |
10100010 | 3 | jeden | 0 |
11010010 | čtyři | 0 | jeden |
11111110 | 7 | jeden | 0 |
Mnoho implementací UART má schopnost automaticky kontrolovat integritu dat pomocí bitové parity. Tato funkce se aktivuje nebo deaktivuje zapsáním příslušného inicializačního slova do interního řídicího registru UART. Když je tato funkce povolena, jsou minimální bity informací pro odesílání doplněny koncovým paritním bitem. Při přenosu zprávy logické zařízení spočítá počet jednotlivých bitů v informační části zprávy a pomocí tohoto čísla nastaví paritní bit do jednoho ze stavů v závislosti na počtu jednotlivých bitů a aktuálním režimu kontroly parity. specifikováno.
Existují režimy sudé parity a liché parity . _ _ _ Při sudé paritě je paritní bit nastaven do takového stavu, že součet jednotlivých bitů v balíčku (včetně dat a samotného paritního bitu) je sudé číslo . U liché parity je paritní bit nastaven tak, že součet všech bitů ve vysílání je lichý, jak ukazuje tabulka [2] [3] .
Když je přijat paket, logické zařízení UART automaticky spočítá počet 1 bitů v paketu, včetně paritního bitu. Pokud je v přijaté zprávě porušena parita, je to známka chyby v přenosovém kanálu. Chyby v binárních přenosech jsou redukovány na bitovou inverzi, takže paritní logika může detekovat chyby pouze v případě, že je poškozen lichý počet bitů (v 1, 3 atd.). Pokud došlo k inverzi např. 2 bitů, pak taková chyba není detekována. Když je detekována chyba parity, logika UART nastaví ve svém stavovém slově příznak chyby, který může číst externí zařízení, jako je počítačový procesor, a chyba je správně ošetřena.
Byl vyvinut a přijat krátký způsob zápisu parametrů UART, jako je počet datových bitů, přítomnost a typ paritního bitu, počet stop bitů. Vypadá to jako položka číslo-písmeno-číslo, kde:
Například položka 8-N-1 znamená, že UART je nastaven na 8 datových bitů, žádnou paritu a jeden stop bit. Pro úplnost parametrů je tato položka opatřena indikací rychlosti UART, např. 9600/8-N-1.
Některé UARTy mají schopnost odesílat a přijímat speciální zprávu nazvanou Break. Skládá se ze spojitého nulového stavu linky s dobou trvání zjevně delší než minimální burst, obvykle 1,5 minimálního burstu (pro 8N1 to jsou 15bitové intervaly). Některé komunikační protokoly tuto vlastnost využívají, například protokol LIN používá Break k označení nového rámce.
Raná zařízení UART mohla být tak pomalá, že nemohla držet krok s proudem přijímaných dat. K vyřešení tohoto problému byly moduly UART někdy vybaveny samostatnými výstupy a vstupy řízení toku. Když byla vstupní vyrovnávací paměť plná, logika přijímajícího UART nastavila odpovídající výstup na deaktivaci a vysílací UART by pozastavil přenos.
Později bylo řízení toku přiřazeno komunikačním protokolům (například metoda XOn / XOff ) a potřeba samostatných linek řízení toku téměř zmizela.
V současné době se stále používá řízení toku na hardwarové úrovni, například v (ultra) energeticky účinných mikrokontrolérech.
Logický obvod UART má I/O obvody odpovídající technologii polovodičových obvodů: CMOS , TTL atd. Tato fyzická vrstva může být použita v rámci jednoho zařízení, ale zpravidla není vhodná pro spínaná dlouhá spojení z důvodu nízké ochrany proti elektrickému zničení a rušení. Pro takové případy byly vyvinuty speciální fyzické vrstvy , jako je proudová smyčka , RS-232 , RS-485 , LIN a podobně.
Specifickým druhem fyzické vrstvy asynchronního rozhraní je fyzická vrstva IrDA .
Pro komplexní prostředí existují fyzické vrstvy UART. V jistém smyslu lze standardní počítačový telefonní modem také nazvat specifickou fyzickou vrstvou asynchronního rozhraní. Existují speciální mikroobvody pro drátové modemy vyrobené speciálně jako fyzická vrstva asynchronního rozhraní (tj. protokolově transparentní). Fyzická vrstva rádiového kanálu se také vyrábí ve formě modulů rádiových přijímačů a rádiových vysílačů.
Pro převod logických vstupů a výstupů UART na signály odpovídající fyzické úrovně se používají speciální elektronické obvody, nazývané drivery. Pro všechny oblíbené fyzické úrovně existují integrované ovladače ve formě mikroobvodů.
Logika UART obvykle umožňuje současné vysílání a příjem. Tato schopnost je často označována slangovým slovem duplex . Ne všechny fyzické vrstvy však umožňují současný přenos dat v obou směrech. V takových případech je zvykem mluvit o poloduplexní komunikaci. Existují i řešení, ve kterých je přenos dat fyzicky možný pouze jedním směrem, pak se mluví o simplexní komunikaci.
Původně byl UART určen pro komunikaci mezi dvěma zařízeními na bázi point-to-point. Následně byly vytvořeny fyzické vrstvy, které umožňují propojení více než dvou UARTů podle principu „jeden hovor, několik naslouchání“. Takové fyzické vrstvy se nazývají sítě . Existují implementace typu common bus (kdy jsou všechny transceivery připojeny na jeden vodič) a ring (kdy jsou přijímače a vysílače zapojeny do párů v uzavřeném kruhu). První možnost je jednodušší a běžnější. Druhá možnost je složitější, ale spolehlivější a rychlejší: provozuschopnost všech uzlů je zaručena (vysílající uzel uslyší ozvěnu své zprávy pouze v případě, že je úspěšně předána všemi uzly); jakýkoli uzel může zahájit přenos kdykoli bez obav z rizika kolize. Nejznámějšími fyzickými vrstvami sítě jsou RS-485 a LIN .
Široké využití UART v digitální technologii předurčilo integraci podpory tohoto rozhraní do API mnoha operačních systémů. Toto rozhraní se zpravidla objevuje v dokumentaci OS jako COM port nebo sériový port .
Se sériovými porty ve Win32 se zachází jako se soubory. Funkce CreateFile se používá k otevření portu. Portů může být mnoho, proto se označují jako COM1, COM2 atd. v pořadí, v jakém jsou nalezeny ovladače zařízení. Prvních 9 portů je k dispozici také jako pojmenované kanály pro přenos dat (dostupné pod názvy "COM1", "COM2", ...), tato metoda přístupu je považována za zastaralou. Doporučuje se adresovat všechny porty jako soubory (pojmenované "\\.\COM1", "\\.\COM2", ... "\\.\COMx").
Vyhledávání názvů zařízení PnP v systému se provádí voláním SetupDiGetClassDevs. V registru existuje klíč HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM, který zobrazuje aktuálně dostupné porty COM.
V registru je sekce pro každý port. Tyto sekce mají následující názvy:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serial\Parameters\Serial10000,kde poslední hodnota "Serial10000" je jedinečné číslo pro každý nový COM port přidaný do systému, pro druhý - "Serial10001" atd.
COM porty v operačním systému Unix ( Linux ) jsou soubory znakových zařízení. Tyto soubory jsou obvykle umístěny v adresáři /dev a jsou pojmenovány
Pro programový přístup k COM portu je třeba otevřít odpovídající soubor pro čtení/zápis a volat speciální funkce tcgetattr (pro zjištění aktuálního nastavení) a tcsetattr (pro nastavení nových nastavení). Může být také nutné provést volání ioctl s určitými parametry. Poté při zápisu do souboru budou data posílána přes port a při čtení program přijímá již přijatá data z vyrovnávací paměti COM portu.
Zařízení s názvem "ttyxx" se používají jako serverová zařízení, to znamená, že aplikace, která toto zařízení otevřela, obvykle čeká na příchozí hovor z modemu. Klasickou výchozí aplikací je getty , která čeká na příchozí volání, poté nakonfiguruje COM port podle konfiguračních souborů, vypíše tam „login:“, přijme uživatelské jméno a jako dítě spustí příkaz „loginUserName“ se standardním vstupem. a výstup je přesměrován na COM port. Tento příkaz si zase vyžádá a zkontroluje heslo, a pokud je úspěšný, spustí (ne jako dítě, ale místo sebe voláním execve ve stejném procesu) výchozí uživatelský shell uvedený v souboru /etc/passwd.
Tato technologie historicky vznikla v 70. letech 20. století, kdy byly pod operačním systémem UNIX používány počítače jako PDP-11 (v SSSR se řada nazývala SM EVM ) nebo VAX , umožňující připojení mnoha terminálů pro práci mnoha uživatelů. Terminály – a potažmo celé uživatelské rozhraní – byly propojeny přes sériové porty s možností připojení modemu místo terminálu a následného vytáčení počítače telefonem. Až dosud mají operační systémy typu UNIX terminálový zásobník a obvykle 3 terminálové implementace - sériový port, obrazovka v textovém režimu + konzole klávesnice a „loopback“ k jednomu z otevřených souborů ovládací aplikace (takto jsou implementovány telnetd, sshd a xterm).
Klientská zařízení se sériovým portem pro volání ven se v mnoha (ale ne ve všech) UNIXech nazývají cuaxx.
Vzhledem k tomu, že sériový port v UNIXu je přístupný pouze přes zásobník terminálů, může být řídicím terminálem pro procesy a skupiny (odeslat SIGHUP při odpojení od modemu a SIGINT na Ctrl-C), podpora editace posledního řádku zadaného pomocí šipek na úroveň jádra atd. Vypnutí této funkce, aby se zařízení změnilo na „potrubí“ pro bajtový proud, vyžaduje volání ioctl.
Dostupný ovladač COM.SYS podporuje pouze 4 porty COM, z nichž každý musí mít vlastní přerušovací linku. Chcete-li obsluhovat porty COM se společnou přerušovací linkou, musíte použít ovladač SIO [4] .
Jelikož Android běží na linuxovém jádře, je práce s COM porty v Androidu v podstatě stejná jako práce v Linuxu. Ale mějte na paměti, že pro práci s COM porty v Androidu potřebujete práva root.
V současné době fyzická rozhraní založená na UART prakticky zmizela ze spotřebitelských digitálních zařízení. Snadné použití a množství softwaru, který využíval přístup k externím zařízením přes COM port, však přimělo vývojáře zařízení připojených k počítačům vytvořit ovladače pro virtuální COM porty ( VCP - virtuální COM port). Tedy COM porty, pro které neexistuje odpovídající hardwarový UART.
Pouze ve velmi vzácných úlohách je přijatelné posílat přímý datový tok přes UART. Zpravidla je nutné uvést začátek a konec datového bloku; zajistit kontrolu integrity dat a obnovit ztracené položky; řídit tok dat, aby se zabránilo přetížení vstupní vyrovnávací paměti atd. Pro tyto a mnohé další účely jsou vynalezeny komunikační protokoly - dohody o speciálních souborech dat, které si oba výpočetní systémy vyměňují za účelem úspěšného dokončení úkolu navázání komunikace a přenosu základní data. Algoritmy protokolu závisí na úlohách nastavených pro systém a vlastnostech fyzické vrstvy UART. Protokolový algoritmus je obvykle implementován spíše v softwaru než v hardwaru.
Pro použití s UART je k dispozici široká škála komunikačních protokolů. Nejznámější:
Myšlenka asynchronního přenosu dat se objevila v těch vzdálených dobách, kdy se o standardizaci ještě málo pečovalo a to nejlepší, co se dalo od prodejců různorodých řešení očekávat, bylo otevřené zveřejňování algoritmů pro provoz jejich produktů. Ve skutečnosti tedy neexistuje žádný standard UART jako takový, ale logika provozu UART je popsána jako součást produktu v mnoha dalších standardech: proudová smyčka , RS-232 , ISO / IEC 7816 atd.
UART | |||||||
---|---|---|---|---|---|---|---|
Fyzické vrstvy |
| ||||||
Protokoly |
| ||||||
Oblasti použití | |||||||
Implementace |
|
Mikrokontroléry | ||||||||
---|---|---|---|---|---|---|---|---|
Architektura |
| |||||||
Výrobci |
| |||||||
Komponenty | ||||||||
Obvod |
| |||||||
Rozhraní | ||||||||
OS | ||||||||
Programování |
|
Počítačové sběrnice a rozhraní | |
---|---|
Základní pojmy | |
Procesory | |
Vnitřní | |
notebooky | |
Pohony | |
Obvod | |
Správa zařízení | |
Univerzální | |
Video rozhraní | |
Vestavěné systémy |