470 likes | 619 Views
Sériová rozhraní. Úvodní problém. Představme si, že jsme zaměstnanci autosalonu ve městě A a potřebujeme přepravit n aut do města B. Jakým způsobem je možno tuto operaci uskutečnit?. Paralelní přenos dat. Nejoptimálnější by bylo poslat přímo auta čase t po n silnicích do města B.
E N D
Úvodní problém Představme si, že jsme zaměstnanci autosalonu ve městě A a potřebujeme přepravit n aut do města B. Jakým způsobem je možno tuto operaci uskutečnit?
Paralelní přenos dat Nejoptimálnější by bylo poslat přímo auta čase t po n silnicích do města B. Problém je však, že si těžko můžeme dovolit n silnic na delší vzdálenosti (cena).
Sériový přenos Předpokládejme, že máme jednu silnici. Po této silnici pošleme v řadě n aut do města B v časech 0, t, 2t, 3t … • výhoda: stačí jedna silnice • nevýhoda: převoz aut z místa A do místa B bude časově náročnější než předchozí možnost
Jak rozdělit data? • „Serializace“: vezmeme např. bajt 10101010, zvolme nejvyšší/nejnižší bit a pošleme jej po datové lince, danou operaci zopakujme pro zbylé nižší/vyšší bity • „Deserializace“: z příchozích bitů sestavíme znovu bajt. • Je nějak nutné rozlišit správné pořadí jednotlivých bitů, začátky a konce bajtů a jejich správnost.
Parita • nejjednodušší způsob jak bez nároků na výpočetní výkon zabezpečit přenos dat • vysílač sečte počet jedničkových bitů a doplní doplní paritním bitem dle předem dohodnuté podmínky • SUDÁ PARITA – Počet jedničkových bitů + paritní bit = SUDÉ ČÍSLO • LICHÁ PARITA – Počet jedničkových bitů + paritní bit = LICHÉ ČÍSLO • SPACE PARITY – Tzv. nulová parita – paritní bit je vždy v log. 0 • MARK PARITY - Paritní bit je vždy log. 1
Start/stop bit(y) • start/stop bit se používá k rozlišení začátku a konce rámce • logická hodnota start a stop bitu bývá rozdílná
Přenosová rychlost • přenosová rychlost se vyjadřuje počtem bitů přenesených za jednotku času • její jednotkou je bit/s • při dvoustavovém přenosu tato jednotka splývá s jednotkou tzv. modulační rychlosti Bd (baud) • do počtu bitů patří i start, stop a paritní bity
Typy sériového přenosu • Synchronní • Asynchronní
Synchronní přenos (1) • K datové lince se ještě přidá jedna linka s „synchronizačním“ signálem, který nám určuje, kdy je na datové lince platný bit.
Synchronní přenos (3)(časový průběh) • v ukázce se přenáší po sériové lince bajt 01110010B
Synchronní přenos (4)výhody, nevýhody • Výhodné pro velké objemy dat, přenášené po více vodičích • Nutno jednoznačně určit, kdo vysílá synchronizační impulsy • Možno použít spojitě proměnnou rychlost přenosu, například podle poměru chybovosti • Nutnost synchronizačního vodiče „navíc“ – v podstatě „nepřenáší žádnou informaci“ • Na straně zařízení nepotřebuje nijak složitou elektroniku
Asynchronní přenos (1) • pro přenos máme k dispozici 1 datovou linku • přijímač a vysílač má vlastní zdroj synchronizačního signálu • přenos začíná start bitem, následuje n datových bitů, a končí stop bitem (u něj je definovaná minimální délka) • přijímač se musí umět synchronizovat na start bit • start bit a stop bit mají rozdílnou logickou úroveň
Asynchronní přenos (3)(časový průběh) • v ukázce se přenáší po sériové lince bajt 01110010B
Asynchronní přenos (4)(řešení sériového přenosu) • obvody UART (Universal Asynchronous Receiver Transmitter ): 8251 (Intel, AMD, NEC), 6851 (Motorola), 9902 (Texas Instruments) … • přímo na čipu (8051, PIC, AVR …) • absence, softwarová emulace
Asynchronní přenos (5)(emulace sériového rozhraní) • spočítáme délku datového bitu dle přenosové rychlosti (doba trváni bitu (s)=1/přenosová rychlost (Bd) • každý bajt začíná start bitem, následují datové bity, (parita), a končí stop bit(y) • uspořádání bitů za sebou • první MSB (nejvýznamnější bit) • První LSB (nejméně významný bit) • [startbit][databit1]...[databitn][paritnibit][stopbit(y)] (nazýváme rámcem) • stav linky na přijímači: v klidu 1, rozpojeno 0
Asynchronní přenos (6)(příjem bajtu) • Dokud je na vstupu 1 čekej • Čekej t/2 (start bit ?) • Pokud není na vstupu 0 jdi na 1 • i:=počet bitů bez start bitu, j:=počet datových, příchozí:=0 • Čekej t • if (j>0) { příchozí:=příchozí posun do leva + vstup (v případě na začátku MSB) příchozí:=příchozí + vstup posun do leva o j (v případě na začátku LSB) --j; --i; goto 5}if (i==1+poces stop bitu) {test parity; --i; goto5}if (i!=0) if (příchozí==1) --i; goto 5; else goto error; 7. v příchozí se nachází přijatý bajt
Asynchronní přenos (7)(odeslání bajtu) • Nastav linku na 0, počkej t (start bit) • Natav linku na hodnotu 1. bitu, počkej t • Opakuj 2 pro zbylých n-1 bitů • Jako v 2 pošli paritní bit • Jako v 2 pošli stop bit(y) (stop bit=1)
Asynchronní přenos (8)výhody, nevýhody • Nevýhodné pro velké objemy dat • Levné vedení • Lze použít pro komunikaci mezi mnoha zařízeními • Nutno definovat jednoznačně přenosové rychlosti, změnu rychlosti je třeba ošetřit softwarovou sekvencí • Celkem složitá a drahá elektronika, nutno použít krystalové oscilátory • Až o 20% menší přenosová rychlost užitečných dat při stejné rychlosti komunikace, vzhledem k nutnosti startovacích a paritních bitů
RS The Electronics Industry Association (EIA) RS = recommended standard
Proudová smyčka • vysoce odolná proti rušení • logické logické úrovně: teče, nebo neteče proud 20 mA • odpor vedení až 200 W • možné galvanické oddělení (MIDI optoelektronické)
Základní údaje • sériový port PC je standardu RS 232 • přenosové rychlosti: 110Bd, 150Bd, 300Bd, 600Bd, 1200Bd, 2400Bd, 4800Bd, 9600Bd, 19200Bd, 115200Bd • délka slabiky: 5, 6, 7, 8 bitů • parita: sudá, lichá, mark, space • stop bity: 1, 1.5, 2 • napěťové úrovně: • max I=10 mA • vysílá se od LSB po MSB Úroveň Vysílač Přijímač Logická 0 +5 až +15V +3 až +15V Logická 1 -5 až-15V -3 až -15V Nedefinováno - -3 až +3V
Sériový konektor • DCD (‹) - Data Carrier Detect • RLSD - Receive Line Signal Detect • RxD (‹) - Receive Data • TxD (›) - Transmit Data • DTR (›) - Data Term. Ready • GND - Ground • DSR (‹) - Data Set Ready • RTS (›) - Req. To Send • CTS (‹) - Clear To Send • RI (‹) - Ring Indicator
Popis signálů • DCD - Data Carrier Detect Detekce nosné (někdy jen "CD). Modem oznamuje terminálu, že na telefonní lince detekoval nosný kmitočet. • RXD - Receive Data Tok dat z modemu (DCE) do terminálu (DTE). • TXD - Transmit DataTok dat z terminálu (DTE) do modemu (DCE). • DTR - Data Terminal Ready Terminál tímto signálem oznamuje modemu, že je připraven komunikovat *). • SGND - Signal Ground Signálová zem • DSR - Data Set Ready Modem tímto signálem oznamuje terminálu, že je připraven komunikovat *). • RTS - Request to Send Terminál tímto signálem oznamuje modemu, že komunikační cesta je volná *). • CTS - Clear to Send Modem tímto signálem oznamuje terminálu, že komunikační cesta je volná *). • RI - Ring Indicator Indikátor zvonění. Modem oznamuje terminálu, že na telefonní lince detekoval signál zvonění.
Rozdělení linek • datové: TxD (out), RxD (in) • Pomocné (řídicí): • vstupní: CTS, RI, DSR, DCD • výstupní: DTR, RTS
Sériové rozhraní - porty • Bázová adresa (0x3f8,0x2f8,0x3e8,0x2e8)POST - nalezené porty do 0:0400-0:0406 • base I/O (RW), DLo (W) • base+1 maska přerušení (W), DHi (W) • base+2 id. přerušení (R), řízení FIFO (W) • base+3 řízení linek (RW) • base+4 řízení modemu (W) • base+5 stav linek (R) • base+6 stav modemu (R)
Porty podrobný popis • base • Zápis • DLAB = 1dolní byte dělitele (baud = 115 200/div) • jinakvysílací registr - znak k odvysílání • Čtení • přijímací registr - přijatý znak
Podrobný popis • base + 1 • Zápis • DLAB = 1horní byte dělitele • jinakregistr povolení přerušení • bit 0: od přijatého znaku • bit 1: po odvysílání znaku • bit 2: od stavu linky (error, break) • bit 3: od stavu modemu (CTS, DSR, RI, CD)
Podrobný popis • base + 2 • Zápis • řídící registr fronty • bit 0: povolení FIFO • bit 1: reset přijímací fronty • bit 2: reset vysílací fronty • bity 6,7: velikost fronty (1B, 4B, 8B, 14B) • Čtení • identifikace přerušení • bit 0: 1 - není přerušení, 0 - viz. bity 1,2 • bity 1,2: příčina (změna stavu modemu, vysílání, příjem, změna stavu linky)
Podrobný popis • base + 3 • Zápis • řízení modemu • bit 0: aktivace DTR • bit 1: aktivace RTS • bit 2: aktivace OUT1 • bit 3: aktivace OUT2 (nutné pro fci přerušení v PC)
Podrobný popis • base + 4 • Čtení • registr stavu linky • bit 0: data ready (příjetí znaku) • bit 1: overrun error (ztráta znaku) • bit 2: parity error • bit 3: framing error (špatný stop-bit) • bit 4: break indicated (0 na vstupu) • bit 5: output buffer empty • bit 6: transmit data finished
Podrobný popis • base + 5 • Čtení • registr stavu modemu • bit 0: DCTS - změna stavu CTS • bit 1: DDSR - změna stavu DSR • bit 2: TERI - vzestupná hrana RI • bit 3: DDCD - změna stavu DCD (RLSD) • bit 4: CTS - stav CTS • bit 5: DSR - stav DSR • bit 6: RI - stav RI • bit 7: DCD - stav DCD (RLSD)
Sériové rozhraní - přerušení • COM1 (IRQ4, int 0x0c), COM2 (IRQ3, int 0x0b) • Nastavení • obsluha - vektor přerušení (0x0c resp. 0x0b) • povolit IRQ3,4 na řadiči přerušení • in al, 21h; and al,f7h; out 21h, al • registr povolení přerušení (0x3f9) - požadovaný typ • registr řízení modemu (0x3fc) - OUT2 • Obsluha • odhlásit přerušení řadiči přerušení • mov al, 20h; out 20h, al • zjištění příčiny přerušení (0x3fa)
Řízení toku dat(HANDSHAKING) • potvrzení příjmu dat či připravenost k přenosu a jeho zahájení na úrovni hardwarového nebo softwarového rozhraní • softwarové: na úrovni komunikačního protokolu, specielní znaky v ASCI (XON/XOF) • hardwarové: realizováno pomocnými linkami (DTR/DSR nebo RTS/CTS)
Použitá literatura • Využití rozhraní PC, Kainka B., HEL 1998 • Počítačová rozhraní, Vlach J., BEN 200 • Projektování mikropočítačových systémů, Janeček J., ČVUT 1999 • Sysman • www.hw.cz