Hlavní navigace

Sériový port RS-232C

27. 11. 2008
Doba čtení: 12 minut

Sdílet

V dnešní části seriálu o architekturách počítačů si popíšeme sériový port (RS-232C), který byl původně používán pro připojení terminálů k serveru (buď přímo či přes modem), posléze se však působnost jeho nasazení dosti podstatným způsobem rozšířila, a to i na domácích a osobních počítačích.

Obsah

1. Sériový port RS-232C
2. Simplexní, poloduplexní a plně duplexní přenos dat
3. Princip sériové komunikace a RS-232C
4. Asynchronní přenos dat podle standardu RS-232C
5. Přenosové rychlosti při sériovém přenosu dat
6. Odkazy na internetu
7. Obsah další části seriálu

1. Sériový port RS-232C

V předchozích dvou částech tohoto seriálu jsme se zabývali popisem připojení externích zařízení k osobním počítačům přes paralelní port. Historie tohoto – v současnosti již v několika ohledech technologicky překonaného – portu sahá až k firmě Wang Laboratories a její tiskárně nesoucí označení Model 101 vyrobené v roce 1970. Dnes si popíšeme dokonce ještě starší, ale v mnoha ohledech zajímavější i užitečnější sériový port (RS-232C, někdy poněkud nepřesně označovaný jako UART), který byl původně koncipován pro připojení textových terminálů k jednoduchému modemu či přímo k blízkému serveru, posléze se však působnost jeho nasazení dosti podstatným způsobem rozšířila – na sériový port se v minulosti připojovala například světelná pera, počítačové myši, dotykové LCD, perové i řezací plottery a některé tiskárny s typovým kolečkem, původní „pípací“ i moderní vysokorychlostní modemy, propojovaly se s ním počítače, budovaly jednoduché počítačové sítě apod.

pc3901

Obrázek 1: Konektory umístěné na zadní straně základní desky osobního počítače. Vlevo dole se nachází konektory typu PS/2 pro připojení klávesnice a myši, napravo od nich konektor DB-9 sériového portu a nad ním konektor DB-25 portu paralelního. Zcela vpravo jsou umístěny dva konektory universální sériové sběrnice (USB). Sériový port býval vyveden i na konektor typu DB-25, dnes se však setkáme především s konektorem DB-9.

Tento typ portu je také kromě osobních počítačů dodnes podporován v mnoha dalších zařízeních. Například se pomocí něho mohou programovat regulátory motorů v průmyslových strojích, frekvenční měniče, v případě potřeby se přes něj nastavují některé aktivní síťové prvky (Cisco), mnohé servery (Sun, IBM) stále podporují textové terminály připojené k sériovým portům (v Linuxu to je například program getty a agetty, ale i populární PuTTY tuto možnost nabízí, stejně jako Lotus Notes!) atd. Není tedy divu, že některé desktopy i notebooky tento port stále obsahují (i když nepatrně zvyšuje cenu základní desky, zejména z toho důvodu, že je zapotřebí generovat poměrně vysoká kladná a záporná napětí) a pro ty počítače, které sériový port již nemají v základní výbavě, je možné dokoupit konvertor mezi universální sériovou sběrnicí (USB) a sériovým portem (RS-232C) či mezi kartou typu PCMCIA a RS-232C – viz druhý a třetí obrázek, na kterém jsou dva typy těchto konvertorů vyobrazeny.

pc3902

Obrázek 2: Konvertor mezi universální sériovou sběrnicí (USB) a sériovým portem, který je použitelný i pro ty počítače, které již nemají sériový port na základní desce nainstalovaný.

V dalším textu (a především v navazujícím dílu) se dozvíme, že práce se sériovým portem sice na první pohled nevypadá tak snadně, jako práce s portem paralelním, protože před vlastním přenosem dat je nutné nastavit parametry sériové komunikace, na druhou stranu lze při správně nastavených parametrech informace přes sériový port posílat či naopak přijímat i s využitím vysokoúrovňových API (Application Programming Interface) bez nutnosti „ručního“ ovládání celého portu či dokonce jeho jednotlivých pinů. Zatížení mikroprocesoru je přitom menší, než v případě standardního portu paralelního, především u moderních variant sériových portů, které obsahují poměrně dlouhé vstupní a výstupní fronty (FIFO) určené pro meziuložení posílaných či přijímaných dat.

pc3903

Obrázek 3: Konvertor mezi kartou standardu PCMCIA a sériovým portem. Tento konvertor je určený především pro starší notebooky.

2. Simplexní, poloduplexní a plně duplexní přenos dat

Sériový přenos dat je mnohem starší než elektronické počítače. Ostatně už první telegrafní přístroje používaly pro přenos informací (zde jednotlivých písmen, čísel a několika dalších značek) sériového způsobu přenosu – nejedná se samozřejmě o nic jiného, než známý Morseův kód. U Morseova přístroje se na chvíli zastavíme, protože se na něm dobře vysvětluje i problematika jednostranné a oboustranné komunikace. Původní telegrafní přístroje byly propojeny pouze jedním vodičem, celý elektrický obvod se uzavíral přes zem. Kvůli sériovému způsobu zapojení obou záznamových zařízení (papírová páska + elektromagnetem ovládané pisátko) i vysílacích klíčů (to jsou ony páčky, kterými jsou značky telegrafistou vysílány) však mohla znaky vysílat pouze jedna strana, strana druhá je naopak přijímala. Prohození obou stran (přijímací za vysílací a naopak) se řešilo pomocí speciálních značek Morseova kódu – telegrafista na vysílací straně tímto kódem sdělil, že již žádné znaky posílat nebude a naopak očekává nějakou odpověď.

pc3905

Obrázek 4: Telegrafní přijímač a vysílač. Na tomto obrázku je nakreslena konfigurace, při které je možné komunikovat pouze jedním směrem – jedná se o simplexní přenos dat.

Ve slangu oboru IT se jedná o takzvaný poloduplexní přenos dat, který je mj. použit i u sériového portu (například při propojení dvou zařízení pomocí dvou vodičů místo obvyklých vodičů tří), desetimegabitovém i stomegabitovém Ethernetu, sériové sběrnice I2C, modemového a dálnopisného propojení pomocí telefonních linek (zde se místo „komprimovaného“ Morseova kódu používá buď sedmibitový ASCII kód či pětibitový kód CCITT-2 / MTA-2) apod. Složitější a také patřičně dražší varianta telegrafu již podporovala plně duplexní (fullduplex) přenos, při kterém bylo možné současně znaky vysílat i přijímat, ovšem za cenu propojení obou míst pomocí dvojice vodičů místo vodiče jednoho (o další rozšíření možností telegrafu se postaral známý Thomas A. Edison). Podobný způsob zapojení – dvojice vodičů TxD → RxD a RxD → TxD doplněná o společný zemící vodič (GND) – se používá i u sériového portu; ve skutečnosti se jedná o jeho nejtypičtější konfiguraci používané například při vzájemném propojení dvou počítačů, při připojení plotteru k sériovému portu apod.

pc3904

Obrázek 5: Schéma vzájemného propojení dvou telegrafních přístrojů.

3. Princip sériové komunikace a RS-232C

Simplexní i poloduplexní sériová komunikace je založena na vysílání dat rozložených na jednotlivé bity. Kromě vlastních užitečných dat (například textu, který má být zobrazený na textovém terminálu či informací o rotaci kuličky myši a stavu jejích tlačítek) se proud přenášených bitů doplňuje o další informace, typicky o bity sloužící pro synchronizaci, detekci chyb nebo i jejich korekci (opravu). Proud přenášených bitů musí být nějakým způsobem synchronizován, aby přijímací strana jednotlivé bity od sebe rozeznala. Pro tento účel se buď kromě vlastního bitového vodiče používá ještě jeden vodič s hodinovým signálem (synchronní přenos) nebo se informace o synchronizaci vhodným způsobem zkombinuje s proudem přenášených bitů. Například je možné jedničkový bit reprezentovat přechodem z vysoké do nízké úrovně a bit nulový naopak přechodem z úrovně nízké do úrovně vysoké – tím se však zvyšují nároky na frekvenční rozsah vedení. Dále je možné pomocí kódů typu 8 ze 14 zajistit (ovšem na úkor prodloužení bitového proudu), že za sebou nikdy nebude žádná delší sekvence nulových či naopak jedničkových bitů atd. (podobný kód je použit i u kompaktních disků – viz předchozí části tohoto seriálu).

pc3906

Obrázek 6: Relé ovládaná přes sériový port. Na tato relé, která zajišťují elektrické oddělení od počítače, je již možné zapojit i zařízení s vyšší spotřebou.

Sériový port typu RS-232C patří do rodiny zařízení nazývaných UART, což je zkratka znamenající Universal Asynchronous Receiver and Transmitter, neboli universální asynchronní přijímač a vysílač. V tomto názvu je důležité slovo asynchronní, protože naznačuje, jakým způsobem jsou data rozložená na proud bitů přenášena. Asynchronní přenos je typický tím, že se (alespoň teoreticky) v samotných přenášených datech informace o synchronizaci neobjevují, a nepoužívá se ani samostatný synchronizační (hodinový) signál. To by však znamenalo, že přijímací i vysílací strana musí používat naprosto přesný zdroj hodinového signálu použitý pro detekci hranic jednotlivých bitů, což v praxi není možné, protože i komerčně dostupné krystaly, běžně považované za velmi přesné, by již po několika sekundách přenosu měly takovou odchylku, že by přesáhla dobu trvání přenosu jednoho bitu. Proto se i u přenosových zařízení UART synchronizace používá, ale ne na úrovni jednotlivých bitů. Princip si vysvětlíme v další kapitole.

pc3907

Obrázek 7: Velmi užitečná věcička, kterou je možné zapojit mezi počítač a jím ovládané zařízení. LED slouží k detekci chyb při přenosu (studený spoj, zkrat mezi dvojicí vodičů atd.).

4. Asynchronní přenos dat podle standardu RS-232C

Sériový port používá, ostatně jako každé jiné přenosové zařízení typu UART, asynchronní přenos dat, při kterém jsou (stále nezbytné) synchronizační značky vkládány na začátek a konec většího celku bitů. V praktických aplikacích se jedná o 5, 6, 7 a nejčastěji o 8 bitů, tedy celý bajt. Jak takový „asynchronní“ přenos vypadá? Obě zařízení, tedy jak přijímací, tak i vysílací strana, se nejprve musí vhodným způsobem nakonfigurovat, aby přijímač věděl, v jakém formátu má data očekávat a jak rychle je nutné vzorkovat datovou linku, neboli jaká je přenosová rychlost. Na obou zařízeních se musí především nastavit počet přenášených bitů v jednom celku, což je oněch pět až osm bitů, přenosová rychlost uváděná v bitech za sekundu (bitrate), délka stopbitu (viz další text) a v některých případech i to, zda a jakým způsobem se přenáší paritní bit, který představuje velmi primitivní podobu detekčního kódu. Toto nastavení musí být na přijímači i vysílači shodné, což je také jeden z důvodů, proč je většina zařízení typu UART konfigurovatelná – pomocí několika konfiguračních registrů se přijímač a vysílač nastaví tak, aby spolu mohly navzájem komunikovat.

pc3908

Obrázek 8: Terminál VT-101, který se připojoval k serveru pomocí sériového portu RS-232C. Buď se jednalo o přímé propojení (pokud byl server ve stejné budově) nebo se používaly jednoduché pomalorychlostní modemy. Zajímavý je také text zobrazený na displeji terminálu. Jedná se o známou hru Adventure, která byla dostupná snad na všech mainframech a později se rozšířila i na domácí a osobní počítače.

Datový vodič se před vlastním přenosem nachází v klidovém stavu, což znamená vysokou úroveň napětí. Tato úroveň může trvat libovolně dlouhou dobu. Před začátkem odeslání pěti až osmi bitů (podle konfigurace) je nejprve poslán takzvaný start bit, který má vždy nulovou hodnotu, tj. je zaručeno, že se klidový stav linky (vysoká úroveň) vždy změní. Na straně přijímacího zařízení se musí co nejpřesněji rozeznat změna stavu linky, tj. sestupná hrana, která reprezentuje začátek start bitu. Od této chvíle přijímacístrana ví, že se přijme předem daný počet bitů s předem nastavenou bitovou rychlostí. Přijímací strana tedy vzorkuje stav linky a podle svých vlastních hodin rozeznává hodnoty jednotlivých bitů. Na konci přenášené sekvence může být (v závislosti na nastavené konfiguraci) přenesen i paritní bit, za nímž ihned následuje takzvaný stop bit. Ten má vždy hodnotu logické jedničky, což znamená vysokou úroveň napětí. Délka stop bitu může být delší než délka ostatních bitů (například lze použít délku rovnou 1,5 násobku či dvojnásobku délky běžného bitu), aby měl přijímač dostatek času na zpracování došlých dat.

pc3909

Obrázek 9: Asynchronní přenos jednoho bajtu (osmi bitů) po sériové lince. Nahoře je zobrazen ideální případ, kdy se hodnoty jednotlivých bitů vzorkují přesně v jejich polovině, dole pak situace, která nastane, pokud vysílač vysílá data rychleji nebo naopak přijímač používá nižší vzorkovací frekvenci – na konci přenosu osmi datových bitů již dochází k chybě.

V praxi tedy sice může nastat situace, že všechny datové bity mají stejnou hodnotu (to znamená, že všechny jsou buď nulové nebo naopak jedničkové), ale díky přítomnosti start bitu a k němu negativního stop bitu je zaručeno, že se přijímací strana může nejpozději po osmi datových bitech znovu zasynchronizovat. Samotné čtení přenášených bitů je – v závislosti na kvalitě použitého UART – prováděno poměrně sofistikovaným způsobem. Například u některých mikrořadičů i sériových portů použitých v osobních počítačích je vzorkovací frekvence 16× vyšší než bitrate, což znamená, že v průběhu trvání jednoho bitu se ve skutečnosti přečte šestnáct vzorků, které se dále zpracovávají takovým způsobem, aby se vyloučilo rušení, nevyvážená přenosová rychlost atd. Typicky se v úvahu berou hodnoty vzorku 8, 9 a 10, nad kterými se provádí operace 2 ze 3 – tj. dvě stejné hodnoty určují hodnotu celého bitu (na nerušené lince by samozřejmě vždy všech šestnáct hodnot představujících jeden bit mělo být shodných).

Šestnáctinásobná vzorkovací frekvence je nutná především pro co nejpřesnější detekci začátku start bitu, protože od tohoto času jsou odvozeny i začátky všech dalších bitů – nesmíme zapomenout na to, že se v průběhu přenosu celého bloku 5–8 bitů již přijímač nemůže synchronizovat, protože přenášené bity mohou mít stejnou hodnotu (na lince je konstantní napětí).

pc3910

Obrázek 10: Řadič pro osm sériových portů, který se k počítači připojuje přes USB.

5. Přenosové rychlosti při sériovém přenosu dat

Typické přenosové rychlosti sériového portu jsou odvozeny od násobku 300 bitů za sekundu, ovšem rychlosti některých starších zařízení, například dálnopisů, bývají i menší, například 50, 75 či 150 bitů za sekundu (někdy se můžeme setkat i s udáváním Baudrate, ovšem u UART jsou tyto hodnoty stejné, na rozdíl od jiných přenosových zařízení, například modemů). V následující tabulce jsou uvedeny přenosové rychlosti platné při nastavení přijímače i vysílače na přenos osmi datových bitů, jednoho start bitu a stop bitu s délkou odpovídající délce běžného bitu. Toto nastavení se zkráceně zapisuje jako 8N1. Kvůli přítomnosti start bitu a stop bitu je 20 % přenosové doby zdánlivě ztraceno (místo užitečných dat se přenáší synchronizační informace), v praxi je však toto prodloužení přenosové doby většinou přijatelné:

Přenosová rychlost Doba přenosu jednoho bitu Doba přenosu jednoho bajtu
1200 833 µs 8,33 ms
2400 416 µs 4,16 ms
4800 208 µs 2,08 ms
9600 104 µs 1,04 ms
19200 52 µs 520 µs
38400 26 µs 260 µs
115200 8,6 µs 86 µs

Na přijímač a vysílač jsou kladeny poměrně přísné požadavky na dodržení přenosové doby jednotlivých bitů. Odchylka rychlosti pro jeden bit by neměla být v žádném případě větší než 2 %, neboť se tato chyba sčítá a pro osm datových bitů, jeden start bit a jeden stop bit se již dostáváme k hranici 20 % (celkově se přenáší deset bitů v jednom interně nesynchronizovaném bloku). Dalších 6 % nepřesnosti připadá na vrub detekce počáteční hrany start bitu (platí pro vzorkování linky šestnáctinásobnou rychlostí, protože 100/16 dává oněch 6 %, jelikož mezi dvěma vzorky nelze hranu detekovat). Celková chyba při původní odchylce rychlosti 2 % tak může na konci přenosu osmi bitů dosáhnout 26 %. Navíc musí být tři prostřední vzorky v každém bitu stabilní (nesmíme zde přesáhnout hranici bitu, který může mít obecně opačnou hodnotu), proto se ještě musí připočíst „oblast jistoty“, což je 18,75 %. Při kolísání přenosové rychlosti o hodnotu větší než 2 % tedy riskujeme, že se tři prostřední vzorky, na jejichž základě se určuje hodnota bitu, již na konci přenosu ve skutečnosti nebudou nacházet v polovině bitu, ale na jeho horní či dolní hranici, což již vede k chybám při přenosu (frame error).

pc3911

Obrázek 11: Grafický terminál VT-105 se taktéž k serveru připojoval pomocí sériového portu RS-232C.

Cloud 24 - tip 1

6. Odkazy na internetu

7. Obsah další části seriálu

V následující části seriálu o architektuře počítačů si ukážeme, jakým způsobem se dá se sériovým portem prakticky pracovat i na běžném osobním počítači, včetně významu doplňkových signálů typu DTR, CTS, RI apod. Řekneme si, jak lze k počítači připojit například jednoduchý teplotní senzor, jak lze počítače vzájemně propojit sériovým portem (v praxi vyzkoušeno na vzdálenost cca deseti metrů pomocí tří zvonkových drátů :-) a další zajímavosti.

Byl pro vás článek přínosný?