Rozšířené režimy paralelního portu podle IEEE 1284

20. 11. 2008
Doba čtení: 16 minut

Sdílet

V dnešní části seriálu o architekturách počítačů dokončíme popis práce s paralelním portem. Řekneme si, jakým způsobem je možné paralelní port použít pro obousměrný přenos dat (data lze přenášet buď po čtyřech bitech nebo dokonce po celých bajtech), i jakou technologií jsou řešené paralelní porty ECP a EPP.

Obsah

1. Rozšířené režimy paralelního portu a norma IEEE 1284
2. Režimy činnosti podle normy IEEE 1284
3. Kompatibilní režim – SPP
4. Jednosměrný a obousměrný přenos dat po čtyřech bitech (nibble mode)
5. Jednosměrný a obousměrný přenos dat po osmi bitech (byte mode)
6. Vysokorychlos­tní režim EPP
7. Vysokorychlos­tní režim ECP
8. Odkazy na Internetu
9. Obsah další části seriálu

1. Rozšířené režimy paralelního portu a norma IEEE 1284

V předchozí části tohoto seriálu jsme si popsali základní způsob komunikace počítače s nějakým zařízením (typicky s tiskárnou) přes paralelní port, označovaný také jako LPT, neboli Line Print Terminal. Tento port byl od svého uvedení firmou IBM koncipován tak, aby se k němu daly snadno a bez dalších podpůrných obvodů připojit tiskárny s rozhraním Centronics. Ovšem je ho možné použít i pro další účely, například spolu s osmibitovým digitálně-analogovým převodníkem pro konstrukci jednoduché zvukové karty (Covox, Stereo-Covox), pro ovládání textových i grafických LCD atd. Všechna zmíněná zařízení mají jednu společnou vlastnost – téměř veškeré informace (až na potvrzovací a chybové signály) jsou přenášeny od počítače směrem k připojenému zařízení. V případě, že je zapotřebí data přenášet opačným směrem (vstupní čidla, externí klávesnice, dotykové LCD, skenery) popř. oběma směry (propojení dvou počítačů), rychle zjistíme, že se pro tyto účely původní paralelní port příliš nehodí.

pc3801

Obrázek 1: Číslování pinů na konektorech paralelního portu DB25. Zde je zobrazen konektor umístěný na počítači (typ „samice“).

Ani rychlost přenosu po standardním paralelním portu není nijak závratná, dostačuje pro pomalejší jehličkové a inkoustové tiskárny. Zatížení mikroprocesoru při přenosu je naopak velké, protože standardní paralelní port neobsahuje žádné hardwarově řízené datové fronty, sofistikovaný řadič ani další dnes obvyklé technologie – veškerá komunikace je řízena pomocí datového, řídicího a stavového registru doplněného o jeden přerušovací vstup. Z tohoto důvodu se již po několika letech existence osobních počítačů (kompatibilních s IBM PC) objevily snahy o vylepšení paralelního portu. Vzniklo větší množství různých technologií, které spolu nebyly zcela slučitelné. Když k tomu připočteme i některé velmi nekvalitně provedené kabely (v podstatě neexistovala obecně závazná norma specifikující jejich elektrické charakteristiky), je zřejmé, že se ukázala potřeba existence standardizace i v této oblasti. Takový standard skutečně vznikl – jedná se o normu IEEE 1284. V normě IEEE 1284 jsou poměrně přesně popsány režimy přenosu dat, elektrické charakteristiky portu i mechanické rozměry konektorů a způsob jejich zapojení.

pc3802

Obrázek 2: Číslování pinů na konektorech paralelního portu DB25. Zde je zobrazen konektor umístěný na kabelu (typ „samec“).

Specifikace hovoří o třech typech konektorů označených 1284-A, 1284-B a 1284-C. První typ je nám již známý konektor DB25 (obsahuje 13+12 pinů umístěných ve dvou řadách, viz první a druhý obrázek), druhý typ je představován původním konektorem rozhraní Centronics (36-pin Champ) a třetím typem je zmenšená varianta 36pinového konektoru Centronics. Také jsou předepsány charakteristiky dvou typů propojovacích kabelů. První odpovídá starším kabelům, druhý typ je lépe stíněný a zaručuje přenos dat do větší vzdálenosti (10m). Nejzajímavější jsou však standardizované přenosové režimy (protokoly), kterých je hned pět. Důležité je, že výchozím režimem by měl vždy být režim kompatibility s původním paralelním portem, aby bylo možné bez dalších úprav komunikovat se staršími zařízeními, především tiskárnami připojenými na jednom konci na paralelní port a na konci druhém na rozhraní Centronics, o němž jsme se zmínili v předchozí části tohoto seriálu. Tyto režimy jsou stručně popsány v další kapitole.

pc3803

Obrázek 3: Vztah mezi piny paralelního portu a třemi I/O adresami, kterými se port řídí.

2. Režimy činnosti podle normy IEEE 1284

Jak jsme si již řekli v předchozích odstavcích, je v normě IEEE 1284 rozlišováno celkem pět od sebe navzájem odlišných režimů přenosu dat. Některé režimy umožňují přenos dat pouze jedním směrem (buď z počítače do připojeného zařízení či naopak), další již zavádějí poloduplexní režim přenosu, ve kterém se data přenáší střídavě mezi oběma zařízeními po osmi datových linkách. První dva režimy zajišťují zpětnou kompatibilitu s původními paralelními porty vyráběnými firmou IBM a mnoha dalšími výrobci (paralelní port byl umístěn například i na některých grafických kartách či multikartách spolu s IDE rozhraním, rozhraním pro joystick či MIDI a sériovými porty), další tři režimy již nejsou zpětně kompatibilní a vyžadují hardwarově upravený paralelní port – například je nutné používat obousměrné datové linky, v některém režimu je využívána hardwarová fronta (FIFO), přímý přístup do paměti (DMA) apod. Avšak právě díky těmto rozšířeným režimům lze k paralelnímu portu připojit například i pevné disky či ZIP mechaniky (dnes se již jedná o překonanou technologii).

pc3804

Obrázek 4: Grafická karta, která obsahuje i řadič paralelního portu (viz pravá část s vyvedeným konektorem a horní část desky s jumpery, pomocí kterých je možné paralelní port povolit či zakázat, popř. zvolit, zda se jedná o LPT1 či LPT2).

Norma popisuje tyto režimy činnosti:

  1. Compatibility mode (SPP) – jednosměrná komunikace od počítače směrem k zařízení (tiskárně) s využitím handshakingu. Zaručena kompatibilita s rozhraním Centronics.
  2. Nibble mode – jednosměrný přenos dat od zařízení do počítače po stavových linkách (jedná se o jediné vstupní linky standardního paralelního portu), přičemž data musí být před přenosem rozdělena na čtveřice bitů.
  3. Byte mode – jedná se o jednosměrný přenos dat v simplexním režimu. Tento mód vyžaduje, aby bylo možné datové piny přepnout do režimu čtení, což původní paralelní port neumožňoval.
  4. Enhanced Parallel Port (EPP) – obousměrný přenos dat v poloduplexním režimu (vysílací a přijímací strany se podle potřeb střídají, protože se musí dělit o stejné datové vodiče). Oproti kompatibilnímu režimu přenosu byla vylepšena komunikace s mikroprocesorem, díky čemuž se snižuje jeho zatížení. Maximální dosažitelná přenosová rychlost dosahuje v tomto režimu hodnoty 2 MB.s-1. Tento režim je většinou nutné v případě potřeby povolit v BIOSu nebo pomocí ovladače paralelního portu.
  5. Extended Capability Port (ECP) – taktéž se jedná o obousměrný přenos dat v poloduplexním režimu, ovšem samotný protokol a význam řídicích signálů se od EPP odlišuje. Je umožněn přímý přístup do paměti (další snížení zatížení mikroprocesoru při přenosu dat) a maximální dosažitelná přenosová rychlost se zvýšila na hodnotu 2,5 MB.s-1 (při použití stíněného kabelu „CC“, jehož charakteristiky jsou popsány v normě IEEE 1284). V minulosti se jednalo o levnější variantu k externímu rozhraní SCSI. I tento režim je nutné povolit v BIOSu či ovladačem paralelního portu.

3. Kompatibilní režim – SPP

Kompatibilní režim (SPP) jsme si v podstatě popsali již v předchozí části tohoto seriálu. Jedná se o režim, ve kterém může počítač komunikovat s tiskárnou, na níž je rozhraní Centronics. Při přenosu dat, která jsou rozdělena na osmice bitů, se využívá metoda handshakingu, jenž je založený na řízení celého přenosu počítačem, ovšem s tím, že tiskárna (či obecně jakékoli připojené zařízení) si sama podle své momentální rychlosti určuje, kdy může přijmout další znak. Oproti poněkud vágně specifikovaným délkám trvání řídicích a stavových signálů u rozhraní Centronics je však norma IEEE 1284 přesnější. Například jasně specifikuje, že data na osmi datových linkách musí být ustálena po dobu minimálně 500 ns a teprve poté je možné vyslat signál Strobe, jehož délka taktéž musí být větší než 500 ns. I poté, co se signál Strobe vrátí do neaktivní úrovně (jedná se o negovaný signál, neaktivní úroveň je tedy logická jednička), musí být data na osmi datových linkách neměnná po dobu dalších 500 ns.

pc3805

Obrázek 5: Funkce a směry toku dat jednotlivých pinů při použití kompatibilního režimu.

I tiskárna musí odpovídat signálem nAck, jehož délka je minimálně 500 ns. Všechny zmíněné časy jsou stanoveny tak, aby spolu mohly komunikovat i čipy vyrobené odlišnou technologií a taktéž aby se zamezilo vlivu různého zpoždění signálu na jednotlivých vodičích při použití dlouhých kabelů. Na druhou stranu se však jedná o limitující faktor – pokud budeme dodržovat všechny předepsané minimální časy trvání signálů a připočteme k nim ještě dobu, kterou stráví mikroprocesor nastavováním řídicího a datového registru i čtením stavového registru (nesmíme zapomenout, že porty jsou dostupné přes pomalou sběrnici ISA), získáme maximální přenosovou rychlost v tomto režimu cca 150 kB.s-1, v reálném provozu se však může jednat i o mnohem menší hodnotu, například jen 15 kB.s-1. To je sice hodnota, která může dostačovat jehličkovým tiskárnám pracujícím v módu tisku textů (nikoli grafiky), ovšem pro tiskárny s PostScriptem, PCL či (v nejhorším případě) pro GDI tiskárny se paralelní port pracující v kompatibilním režimu stává úzkým hrdlem, které tisk zdržuje.

Funkce signálů v kompatibilním režimu:

Pin Jméno signálu Význam
1 nStrobe inverzní puls o délce 500 ns tiskárně potvrzuje, že na datových pinech jsou platná data
10 nAck inverzním pulsem tiskárna potvrdí, že data přijala, napojeno na přerušení
11 Busy tento signál má úroveň logické jedničky po dobu přenosu dat
12 Paper-Out tímto signálem tiskárna posílá informaci o tom, že nemá papír
13 Select signál je nastaven na logickou jedničku, pokud je tiskárna připojena
14 Linefeed rozlišení, zda počítač bude pro odřádkování posílat dvojici znaků CR a LF
15 nError tímto signálem tiskárna posílá informaci o chybě (jakákoli chyba kromě došlého papíru)
16 nInitialize inicializace tiskárny (reset)
17 nSelect-Printer výběr tiskárny (signál je invertovaný, reaguje se na nulovou úroveň)
pc3806

Obrázek 6: Řízení přenosu jednoho bajtu pomocí handshakingu. Signály nStrobe a Data ovládá počítač, zařízení (tiskárna) odpovídá signály Busy a nAck. Minimální doba trvání těchto signálů a jejich vzájemná návaznost je popsána v normě IEEE 1284.

4. Jednosměrný a obousměrný přenos dat po čtyřech bitech (nibble mode)

V tomto režimu je možné přenášet data rozdělená po čtyřech bitech (čtveřice sousedních bitů se nazývá nibble, odtud pochází i název popisovaného režimu) směrem od zařízení k počítači. Pro tento účel jsou využity vstupní (z hlediska mikroprocesoru) stavové linky, konkrétně piny 10, 11, 12 a 13, popřípadě i pin číslo 15. Tento režim je možné použít i na starších počítačích, které obsahují pouze paralelní port kompatibilní s rozhraním Centronics a není u něj tedy možné přepnutí datových vodičů do stavu čtení. Veškeré řízení přenosu musí na straně počítače provádět mikroprocesor, včetně zpětného skládání přečtených čtveřic bitů do bajtů či delších slov – řadič paralelního portu žádný obvod pro zpětné složení dat neobsahuje. V minulosti se kombinace kompatibilního režimu a režimu nibble (každý slouží k přenosu dat opačným směrem) nazývala Bi-tronics, i když konkrétní protokol použitý při duplexním přenosu nebyl žádnou normou stanoven – takový protokol musí obsahovat například způsob potvrzování dat, opakování přenosu atd. Režim byl využíván i populárním programem Laplink a jeho následovníky.

pc3807

Obrázek 7: Komunikace v režimu nibble. Nenechte se zmýlit odlišným značením signálů. HostBusy například odpovídá původnímu signálu AutoFeed. Samotná data jsou přenášena po vodičích Busy, Paper-Out, Select a nAck, v některých případech se však místo nAck používá signál nError, přičemž signál nAck je využíván pro hodinové pulsy.

Nibble mode se používá buď pro přenos dat z nějakého externího zařízení, například čidla teploty vybaveného osmibitovým A/D převodníkem, nebo pro propojení dvou počítačů. V prvním případě je nutné data před vlastním přenosem rozdělit na čtveřice bitů. O samotné rozdělení se postará buď samo zařízení (například může být vybavené mikrořadičem) nebo lze použít TTL či CMOS obvod typu 74157, který z osmice bitů na vstupu vybere buď horní nebo dolní čtveřici. Výběr konkrétní čtveřice provádí samotný mikroprocesor v počítači výstupním signálem Strobe. Tyto obvody lze samozřejmě kombinovat a zvětšovat tak počet bitů na vstupu; pro adresování konkrétní čtveřice se v tomto případě dají používat i datové signály paralelního portu. Pokud se nibble mode používá pro propojení dvou počítačů, bývají data přenášena po čtyřech bitech, tj. počítač vysílá pouze po datových linkách D0 až D3 – propojovací kabel v tomto případě zůstává jednoduchý bez nutnosti použití logických členů či multiplexerů.

pc3808

Obrázek 8: Jedno z možných řešení rozdělení vstupní osmice bitů na dvě čtveřice. Výběr konkrétní čtveřice (horní čtyři bity nebo dolní čtyři bity) provádí mikroprocesor signálem Strobe. Existuje i složitější varianta (naznačená na předchozím obrázku), ve které je využit hodinový signál, který sám rozlišuje, která čtveřice bitů se přenáší (sudý nebo lichý puls).

5. Jednosměrný a obousměrný přenos dat po osmi bitech (byte mode)

Výše popsaný nibble mode sice umožňoval jednosměrný i obousměrný přenos dat po standardním paralelním portu, ovšem v praxi se požadoval skutečný paralelní přenos po osmi bitech (ten je teoreticky dvakrát rychlejší při použití stejné frekvence změny logických úrovní). Poměrně jednoduchou úpravou obvodů paralelního portu a přidáním jednoho bitu do řídicího registru je toho možné dosáhnout. Dokonce se spekuluje o tom, že už původní IBM PC mělo mít obousměrný paralelní port, nakonec se však kvůli snížení výsledné ceny přešlo na port jednosměrný (dnes je celý řadič portu umístěn v jižním můstku – south bridge –, původní IBM PC však používalo v té době běžnou TTL logiku). Pro vysílání i příjem dat se využívají datové linky, které musí být možné nastavit jak pro režim zápisu, tak i pro režim čtení. Z tohoto důvodu není tento režim dostupný na všech paralelních portech, protože původní paralelní port umožňoval pouze zápis na datové linky, tj. vysílání dat směrem od počítače k zařízení.

pc3809

Obrázek 9: Jednosměrný přenos dat po osmi bitech. Oproti kompatibilnímu režimu se funkce počítače a zařízení při komunikaci obrací – počítač potvrzuje zapsaná data.

I v tomto režimu se o zpracování přenesených dat musí postarat samotný mikroprocesor (některé paralelní porty, například port pro originální IBM PS/2, mu však mohou práci poněkud ulehčit, protože vyvolávají po přijetí bajtu přerušení). Pro přepínání datových linek z výstupního módu do módu vstupního se používá pátý bit řídicího registru. Řídicí registr je typicky umístěný na adrese 37a popř. 27a, v závislosti na tom, zda se jedná o port LPT1 či LPT2 (uvedené adresy leží v adresovém prostoru I/O zařízení). Pokud se mají data pouze číst, tj. k portu je připojeno zařízení typu A/D převodník nebo skener, je situace jednoduchá – port se přepne do režimu čtení a tok bajtů je postupně načítán a programově zpracováván. V případě obousměrné komunikace je nutné, aby se počítač a zařízení v posílání dat střídaly, což je ovšem věcí přenosového protokolu na vyšší vrstvě (tento režim již není základní normou IEEE 1284 specifikován).

6. Vysokorychlostní režim EPP

Vysokorychlostní režim EPP (Enhanced Parallel Port) je navržen pro poloduplexní přenos dat, při němž se vysílací a přijímací strany podle potřeby střídají ve využívání osmi datových vodičů. Oproti kompatibilnímu režimu přenosu byla vylepšena komunikace s mikroprocesorem, díky čemuž se snižuje jeho zatížení (to je důležité u multitaskových operačních systémů). Maximální dosažitelná přenosová rychlost dosahuje v tomto režimu hodnoty 2 MB.s-1 (reálně se běžně přesahuje hodnota 500 kB.s-1, zmíněné 2 MB.s-1 pouze se stíněným kabelem typu „CC“ na kratší vzdálenosti – cca dva metry). Tento režim je většinou nutné v případě potřeby povolit v BIOSu nebo pomocí ovladače paralelního portu. Samotný paralelní port je rozšířen o další registr nazvaný EPP Data Port, jehož adresa je o jedničku vyšší, než adresa řídicího registru. Následuje stručný popis přenosu jednoho bytu z počítače do připojeného zařízení (zde je nutné říci, že v ideálním případě se veškerá komunikace odehraje v pouhém jednom taktu sběrnice ISA):

  1. Nejprve program zapíše data do I/O portu EPP Data Port. Řadič paralelního portu tuto událost detekuje, protože si hlídá zápis do tohoto portu.
  2. Signál nWrite je snížen na logickou nulu a data jsou zapsána na datové piny (nWrite odpovídá původnímu signálu nStrobe).
  3. Signál nDataStrobe je snížen na logickou nulu, čímž je zařízení informováno, že jsou signály na datových vodičích ustáleny (signál nDataStrobe odpovídá signálu lineFeed).
  4. Nyní řadič portu čeká na odpověď zařízení, tj. na změnu signálu nWait (což je původní signál Busy) z logické nuly na logickou jedničku.
  5. Po přijetí tohoto signálu je nDataStrobenWrite vrácen na původní hodnotu, čímž je přenos jednoho bytu dokončen.
  6. Zařízení se vrátí do režimu příjmu dalšího bytu, což se projeví návratem stavu signálu nWait do stavu logické nuly.
pc3810

Obrázek 10: Přenos jednoho bytu z počítače na zařízení v režimu EPP.

Režim EPP zavádí i novou možnost – na paralelní port je možné připojit až 128 zařízení, přičemž před zahájením komunikace je pomocí „adresového“ bytu určeno, které zařízení má data přijímat nebo naopak vysílat. V praxi se však tato možnost prakticky vůbec neujala.

7. Vysokorychlostní režim ECP

Vysokorychlostní režim ECP (Extended Capability Port), který byl navržen firmami HP a Microsoft, představuje nejvyspělejší možnost komunikace počítače a zařízení připojeného k paralelnímu portu. Podobně jako u výše popsaného režimu EPP, je i zde použit poloduplexní přenos po společných osmi datových linkách. Maximální dosažitelná přenosová rychlost se zvýšila na hodnotu 2,5 MB.s-1 (při použití stíněného kabelu „CC“, jehož charakteristiky jsou popsány v normě IEEE 1284). Dalšího zvýšení objemu data přenesených za jednotku času se může dosáhnout použitím komprimace RLE (run-length encoding); teoreticky lze data zkomprimovat v poměru 64:1, ale jen v případě, že se jedná o konstantní proud bytů. Reálně dosažitelné hodnoty jsou většinou mnohem menší, jedině u GDI tiskáren a jednodušších skenerů se komprimace uplatňuje ve větším měřítku.

pc3811

Obrázek 11: Přenos jednoho bytu z počítače na zařízení v režimu ECP.

V minulosti se jednalo o levnější variantu k externímu rozhraní SCSI, tento režim bylo možné použít i při přímém propojení dvou počítačů – v době, kdy síťová karta ještě nebyla nezbytnou součástí každého počítače, bylo propojení paralelním kabelem poměrně často praktikováno. Důležité je, že v režimu ECP je možné využít hardwarově řízené fronty (FIFO) a i samotný přenosový protokol je upraven tak, aby přenos dat mohl být prováděn relativně nezávisle na mikroprocesoru. I v tomto režimu lze zařízení adresovat, takže se teoreticky na jeden paralelní port může připojit až 128 zařízení.

pc3812

Obrázek 12: Přenos jednoho bytu ze zařízení do počítače v režimu ECP.

bitcoin_skoleni

8. Odkazy na Internetu

  1. Linux I/O port programming mini-HOWTO
    http://www.faq­s.org/docs/Li­nux-mini/IO-Port-Programming.html
  2. A tutorial on Parallel port Interfacing
    http://logix4u­.net/Legacy_Por­ts/Parallel_Por­t/A_tutorial_on_Pa­rallel_port_In­terfacing.html
  3. Introduction to the IEEE 1284–1994 Standard
    http://www.fa­po.com/1284in­t.htm
  4. IEEE 1284
    http://en.wiki­pedia.org/wiki/I­EEE_1284
  5. Parallel port
    http://en.wiki­pedia.org/wiki/Pa­rallel_port
  6. Interfacing the Standard Parallel Port
    http://www.be­yondlogic.org/spp/pa­rallel.htm
  7. LPT Line Print Terminal
    http://en.wiki­pedia.org/wiki/LPT
  8. IEEE Standard 1284
    http://www.un­docprint.org/for­mats/communica­tion_protocol­s/ieee_1284
  9. Jan's Parallel Port FAQ: Answers to some frequently asked questions about the PC's parallel port
    http://www.lvr­.com/jansfaq.htm
  10. Powering devices from PC parallel port
    http://www.epa­norama.net/cir­cuits/lptpower­.html
  11. IEEE 1284
    http://ckp.made-it.com/ieee1284­.html
  12. IEEE 1284 – Updating the PC Parallel Port
    http://zone.ni­.com/devzone/cda/tut/p­/id/3466
  13. ECP Parallel LPT port (IEEE-1284A) pinout
    http://pinouts­.ru/ParallelPor­ts/ParallelEC­P_pinout.shtml

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

V následující části seriálu o architekturách počítačů si popíšeme sériový port (RS-232C), který byl původně – dávno před vznikem osobních počítačů – koncipován pro připojení textového terminálu k modemu, posléze se však působnost jeho nasazení dosti podstatným způsobem rozšířila, a to i na osobních počítačích. Uvidí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 je nutné nastavit parametry sériové komunikace, na druhou stranu se však i dnes jedná o standardní způsob komunikace (zejména s pomalejšími zařízeními, jako jsou modemy, jednoúčelová čidla, měřicí a řídicí průmyslové systémy, myši, vstup dotykových displejů, perové a řezací plottery či terminálové rozhraní) a při správně nastavených parametrech je možné data 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ů.

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.