UVOD U SERIJSKI PORT
Serijski port PC računara koristi se za serijski prenos podataka (bit po bit)
i samim tim je sporiji od paralelnog porta. Uređaji koji koriste serijsku
komunikaciju koriste dve vrste kablova i to: DCE(Data Communications Equipment)
i DTE(Data Terminal Equipment). DCE koriste modemi, ploteri i sl. dok se DTE
koristi za vezu između PC računara. Električne osobine serijskog porta su
sadržane u EIA(Electronics Industry Association) RS232C standardu čiji su
parametri sledeći:
1. Logička nula
"SPACE" nalazi se u opsegu napona +3 do +25 Volti
2. Logička jedinica "MARK" je u opsegu
-3 do - 25 Volti
3. Oblast između -3 do + 3 Volta nije definisana
4. Napon na kolu ne sme da pređe 25 Volti u odnosu
na masu(GND)
5. Struja kola ne sme preći 500 mA
Pored RS232C standarda postoje i novije verzije EIA-232D
i EIA-232E koje su objavljene 1987 i 1991
godine. Serijski port koristi dve vrste konektora i to D-SUB 25 pinski i D-SUB
9 pinski konektor. Oblik konektora i raspored pinova na njima kao i glavni
signali na pojedinim pinovima dati su na donjoj slici i tabeli.
DSUB-25 |
DSUB-9 |
DSUB-25 |
DSUB-9 |
Signal |
Opis signala |
pin 2 |
pin 3 |
TD |
Transmit Data |
pin 3 |
pin 2 |
RD |
Receive Data |
pin 4 |
pin 7 |
RTS |
Request ToSend |
pin 5 |
pin 8 |
CTS |
Clear To Send |
pin 6 |
pin 6 |
DSR |
Data Set Ready |
pin 7 |
pin 5 |
SG |
Signal Ground |
pin 8 |
pin 1 |
CD |
Carrier Detect |
pin 20 |
pin 4 |
DTR |
Data Terminal Ready |
pin 22 |
pin 9 |
RI |
Ring Indikator |
Značenje pojedinih signala je sledeće:
Signal |
Opis signala |
Značenje signala |
TD |
Transmit Data |
Serijski izlaz podataka(TXD) |
RD |
Receive Data |
Serijski ulaz podataka(RXD) |
RTS |
Request ToSend |
Indicira da je modem spreman za razmenu podataka |
CTS |
Clear To Send |
Kada modem detektuje signal "Carrier" od modema sa druge strane
linije, onda ona postaje aktivna |
DSR |
Data Set Ready |
DCE signalizira da je spreman za rad |
SG |
Signal Ground |
Masa |
CD |
Carrier Detect |
DCE javlja da je veza uspostavljena |
DTR |
Data Terminal Ready |
Indicira DCE uređaju da je DTE spreman |
RI |
Ring Indikator |
Signalizira da je detektovan signal "zvona" na telefonskoj
liniji |
Oblik signala RS232 standarda dat je na donjoj slici:
Kada nema slanja podatka tj. linija je slobodna označeno je MARK naponom.
Prenos počinje kada linija pređe u SPACE stanje što predstavlja START bit. Iza
start bita dolaze bitovi podataka i to tako da je jedinica predstavljena
negativnim naponom a nula pozitivnim. Ovo je najčešće u suprotnosti sa
ustaljenom logikom da je +5 V logička jedinica, a 0 V logička nula. Problem
rešava prijemno kolo konvertujući napone tako da su prilagođeni naponima
interfejsa koji se koristi. Posle bita podatka dolazi bit pariteta koji se
koristi za detekciju greške u prenosu. Iza bita pariteta signal se postavlja u
MARK stanje što označava početak STOP bita. Prema RS232 standardu broj stop
bitova može biti: 1, 1.5 ili 2. Nakon završetka STOP bitova linija je spremna
za slanje novog karaktera. PC računari koriste kao DATA bite najčešće 7 ili 8
bita. Između slanja dva karaktera linija se nalazi u MARK stanju, a u toku
prenosa više puta prelazi iz MARK u SPACE stanje u zavisnosti od broja jedinica
i nula. To znači da se linija može nalaziti
u SPACE stanju najviše u slučaju kada karakter sadrži sve nule. Ova osobina
prenosa upotrebljena je za uvođenje specijalnog znaka nazvanog BREAK(prekid).
Ovaj se signal koristi kako bi prijemniku data signalizacija da je došlo do
problema u slanju podataka.
Serijski prenos počinje tako da predajna strana šalje
prijemnoj strani signal RTS - zahtev za slanjem, dok prijemnik ako je spreman
za prijem odgovara signalom CTS - spreman za prijem. Predajnik zatim šalje
podatke prijemniku. Nakon prijema podataka prijemnik proverava da li su podaci
primljeni bez greške i za to vreme javlja predajniku da je zauzet. Ako su
podaci primljeni bez greške, prijemnik šalje predajniku signal potvrde
ACK(Acknowledgment - ASCII 6), a u slučaju ako se pojavila neka greška, šalje
signal negativne potvrde NAK(ASCII 21). Zavisno od upotrebljenog protokola,
odgovor predajnika na dobijeni NAK signal može biti ponovno slanje podataka.
Protokol za prenos može se izvesti na dva načina i to:
hardverski i softverski. Za realizaciju hardverskog protokola neophodno je da
postoje linije: RTS, CTS i linija za prenos bitova poruke. Softverska
realizacija koristi umesto linija RTS i CTS, ASCII znakove XON i XOFF (nazivaju
su i DC1 i DC3), zbog čega je umesto tri dovoljna samo jedna linija. Kada se
primenjuje ovaj protokol prijemnici i na predaji i prijemu proveravaju svaki
prispeli znak radi utvrđivanja da li je to XON, XOFF ili podatak. Strana koja
ne može da primi karakter kao indikator tog stanja drugoj strani šalje XOFF
znak.
Prilikom serijskog prenosa podataka moguća je pojava sledećih vrsta
grešaka:
·
Greška
uokvirenja(framing error). Do ove greške dolazi u slučaju kada prijemnik
očekuje STOP bit ali se on ne pojavljuje.
·
Greška
prekoračenja(overrun error). Nastaje kada se pojavljuje novi znak u prijemniku
a prethodni nije upotpunosti primljen.
·
Greška
pariteta(parity error). Nastaje kada bit pariteta ne odogovara stanju bitova u
bitovima podatka.
Standardno za vezu dva PC računara koristi se takozvani Null Modem kabal čiji je raspored pinova
dat na donjoj slici:
Iz slike se vidi da su i na prijemnoj
i predajnoj strani spojeni signali DTR, DSR i CD kao i RTS i CTS, dok su
signali TD i RD ukršteni.
Za testiranje serijskog porta i izradu
programa koristi se kabal sa zatvoreno
petljom (LoopBack) prikazan na donjoj slici:
Serijska komunikacija se kod PC
računara izvodi upotrebom Intelovog UART kola 8250 kod XT ili 16450 kod AT
računara. Oba su kola slična s tim što kolo 16450 ima neka poboljšanja. Kolo
8250 ima 10 dok kolo 16450 ima 12 programibilnih jednobajtnih registara. Svaki
port (COM1 i COM2) ima po jedno UART kolo koja se vezuju na linije prekida IRQ3
i IRQ4. Standardno se koriste dva porta a moguće je i više sa adresama i IRQ
prem donjoj tabeli:
Naziv |
Adresa |
IRQ |
COM 1 |
3F8 |
4 |
COM 2 |
2F8 |
3 |
COM 3 |
3E8 |
4 |
COM 4 |
2E8 |
3 |
Bazne adrese COM portova nalaze u BIOS-u na adresama datim u donjoj tabeli:
Startna adresa |
Opis |
0000:0400 |
Početna adresa COM1 |
0000:0402 |
Početna adresa COM2 |
0000:0404 |
Početna adresa COM3 |
0000:0406 |
Početna adresa COM4 |
Serijski port upotrebljava u svom radu
sledeću grupu registara:
Bazna Adresa |
DLAB |
Čitanje/Pisanje |
Skraćeni naziv |
Naziv registra |
+ 0 |
=0 |
Pisanje |
THR |
Transmitter Holding Buffer |
=0 |
Čitanje |
RDR |
Receiver Buffer |
|
=1 |
Čitanje/Pisanje |
DLL |
Divisor Latch Niži Bajt |
|
+1 |
=0 |
Čitanje/Pisanje |
IER |
Interrupt Enable Register |
=1 |
Čitanje/Pisanje |
DLH |
Divisor Latch Viši Bajt |
|
+2 |
- |
Čitanje |
IIR |
Interrupt Identification Register |
- |
Pisanje |
FCR |
FIFO Control Register |
|
+3 |
- |
Čitanje/Pisanje |
LCR |
Line Control Register |
+4 |
- |
Čitanje/Pisanje |
MCR |
Modem Control Register |
+5 |
- |
Čitanje |
LSR |
Line Status Register |
+6 |
- |
Čitanje |
MSR |
Modem Status Register |
+7 |
- |
Čitanje/Pisanje |
- |
Scratch Register |
Transmitter
Holding(THR) i Receiver Buffer(RDR) registar su registri podatka. Prvom
se pristupa prilikom slanja karaktera na port, a drugom u trenutku čitanja
karaktera sa porta. Kako se ove dve operacije međusobno isključuju to je
nemoguće da dođe do kolizije. Registar THR
sadrži bajt koji treba poslati na liniju. Podatak se može upisati kada peti bit
Line Status Registra naznači da je on prazan. RDR registar sadrži poslednji primljeni bajt sa linije. Sadržaj
ovog registra se može pročitati kada je
nulti bit Line Status Registra označen da je primljen. Na offsetu 0 nalazi se i registar Divisor
Latch Niži Bajt u slučaju kada je DLAB=1.
Ovaj se registar kao i sledeći Divisor Latch Viši Bajt koriste se samo u
procesu inicijalizacije UART-a. Proces inicijalizacije se označava
setovanjem sedmog bita u Line Control
Registru(DLAB), tako da ni u ovom
slučaju nemože doći do dvostrukog tumačenja. Za različite brzine prenosa
izražene brojem bita u sekudni(bps) moramo znati trajanje signala koji
reprezentuje jedan bit. Ta se konstanta ne definiše direktno već preko pomoćne
vrednosti koja se dobije iz formula:
Divisor Latch=(clock)/(16 x bps) ili
Divisor Latch=(1843200/(16 x bps) ili
Divisor Latch=(115200)/(bps)
gde clock
predstavlja frekvenciju internog takta UARTa koja je 1.8432 Mhz, a bps je
željena brzina prenosa. Divisor Latch je broj kojim se deli takt UART kola da
se dobije dužina trajanja jednog bita pri željenoj brzini prenosa. Taj se broj
raspoređuje na niži(DLL) i viši(DLH) bajt što je dato u donjoj tabeli.
Brzina (bps) |
Delilac |
DLH |
DLL |
50 |
2304 |
09h |
00h |
300 |
384 |
01h |
80h |
600 |
192 |
00h |
C0h |
2400 |
48 |
00h |
30h |
4800 |
24 |
00h |
18h |
9600 |
12 |
00h |
0Ch |
19200 |
6 |
00h |
06h |
38400 |
3 |
00h |
03h |
57600 |
2 |
00h |
02h |
115200 |
1 |
00h |
01h |
Struktura Interrupt Enable Registra(IER) data je u donjoj tabeli:
Bit |
Opis |
Bit 7 |
Ne koristi se |
Bit 6 |
Ne koristi se |
Bit 5 |
Omogućava Low Power Mod(16750) |
Bit 4 |
Omogućava Sleep Mod(16750) |
Bit 3 |
Omogućava Modem Status Interapt |
Bit 2 |
Omogućava Receiver Line Status Interapt |
Bit 1 |
Omogućava Transmitter Holding Registar
Interapt kada je prazan |
Bit 0 |
Omogućava Received Data Interapt |
Ovim registrom se određuje na koji će
tip prekida UART kolo reagovati. Može se dozvoliti pojava i više tipova
prekida. Prekid se generiše kada se ispuni neki od uslova iz date tabele. Tada
se postavalja odgovarajući bit iz prve kolone kao indikator pojave prekida.
Nakon obrade prekida postavljeni bit se resetuje i UART je spreman da prihvati
sledeći prekid.
Interrupt Identification Register(IIR) ima strukturu kao u donjoj tabeli:
Bit |
Opis |
||
Bitovi 6 i 7 |
Bit 6 |
Bit 7 |
|
0 |
0 |
Ne koristi
se FIFO |
|
0 |
1 |
FIFO je
omogućen ali se ne može koristiti |
|
1 |
1 |
FIFO je
omogućen |
|
Bit 5 |
64 Bajtni
FIFO je omogućen(samo za 16750) |
||
Bit 4 |
Rezervisan |
||
Bit 3 |
0 |
Rezervisan
za 8250 i 16450 |
|
1 |
16550
Time-out Interapt je u toku |
||
Bitovi 1 i 2 |
Bit 2 |
Bit 1 |
|
0 |
0 |
Modem
Status Interapt |
|
0 |
1 |
THR
interapt registar kada je prazan |
|
1 |
0 |
Podatak je
primljen |
|
1 |
1 |
Primljeni
Line Status Interapt |
|
Bit 0 |
0 |
Prekid je u
toku |
|
|
1 |
Ne postoje
prekidi |
Na osnovu ovog registra komunikacioni
programi određuju tip prekida koji se pojavio.
FIFO Control Registar(FCR) ima strukturu kao u donjoj tabeli:
Bit |
Opis |
||
Bitovi 6 i 7 |
Bit 6 |
Bit 7 |
Nivo
Interapta |
0 |
0 |
1 Bajt |
|
0 |
1 |
2 Bajta |
|
1 |
0 |
8 Bajta |
|
1 |
1 |
16 Bajta |
|
Bit 5 |
64 Bajtni
FIFO je omogućen(samo za 16750) |
||
Bit 4 |
Rezervisan |
||
Bit 3 |
Izbor DMA
moda |
||
Bit 2 |
Briše FIFO
slanja |
||
Bit 1 |
Briše FIFO
prijema |
||
Bit 0 |
Omogućav
FIFO metod |
FIFO je registar u koji se može samo
upisivati. Koristi se za kontrolu FIFO bafera koji postoji na UART-ima 16550 i
više. Postavljanjem bita 0 omogućuje predajni i prijemni FIFO a njegovim
resetovanjem se zabranjuje. Bitovi 1 i 2 kontrolišu brisanje prijemnog i
predajnog FIFO bafera. Setovanjem ovih bitova na 1 će samo obrisati sadržaj
FIFO bafera i neće uticati na šift registar. Ova dva bita se sami resetuju i
zato nemoramo bitove setovati na nulu po
završetku. Bit 3 omogućava DMA selektovanje DMA moda koji se može naći na
UART-ima 16550 i više. Bitovi 6 i 7 se koriste da se postavi nivo okidanja na
primajući FIFO. Naprimer ako je bit 7 postavljen na 1 i bit 6 na 0 onda je nivo
okidanja setovan na osam bajtova. Kada je primljeno 8 bajtova podataka u
primajućem FIFO onda je Received Data Interapt postavljen u IIR registru.
Line
Control Registar(LCR) ima strukturu
kao u donoj tabeli:
Bit |
Opis |
|||
Bit 7 |
1 |
DLAB bit |
||
0 |
Omogućen
pristup THR, RDR i IER registru |
|||
Bit 6 |
0 -
Zabranjen Break signal, 1 - Omogućen |
|||
Bitovi 3 : 5 |
Bit 5 |
Bit 4 |
Bit 3 |
Izbor
pariteta |
X |
X |
0 |
Bez
pariteta |
|
0 |
0 |
1 |
Neparan(Odd)
paritet |
|
0 |
1 |
1 |
Paran(Even)
paritet |
|
1 |
0 |
1 |
MARK |
|
1 |
1 |
1 |
SPACE |
|
Bit 2 |
Dužina stop
bita |
|||
0 |
Jedan stop
bit |
|||
1 |
2 stop bita
ako je dužina podatka 6, 7 ili 8 bita, odnosno 1.5 stop bit za podatak dužine
5 bita |
|||
Bitovi 0:1 |
Bit 1 |
Bit 0 |
Dužina
podatka u bitima |
|
0 |
0 |
5 bita |
||
0 |
1 |
6 bita |
||
1 |
0 |
7 bita |
||
1 |
1 |
8 bita |
Ovaj registar omogućava postavljanje
nekih od parametara veze kao i režim rada registara THR, RDR, DLL i DLH. Režim rada navedenih registara određuje njegov sedmi bit DLAB(Divisor Latch Access Byte).
Modem Control Registar(MCR) koristi sledeću strukturu:
Bit |
Opis |
Bit 7 |
Ne koristi se |
Bit 6 |
Ne koristi se |
Bit 5 |
Autoflow kontrola omogućena(samo za 16750) |
Bit 4 |
Bit povratne sprege |
Bit 3 |
Korisnički izlaz #1 |
Bit 2 |
Korisnički izlaz #2 |
Bit 1 |
RTS linija aktivna |
Bit 0 |
DTR linija aktivna |
DTR linija signalizira modemu da je
računar spreman da od njega primi karakter, dok linija RTS signalizira modemu
da je računar spreman da mu pošalje podatak. Korisnički izlaz#1 normalno nije
spojen ali se na nekim karticama koristi za prebacivanje između 1.8432 Mhz
kristala i 4 Mhz kristala koje se koristi za MIDI. Korisnički izlaz#2 se
koristi za spajanje vanjskih kola koja kontrolišu UART-CPU interept procese.
Line Status Regitar(LSR) koristi sledeću strukturu:
Bit |
Opis |
Bit 7 |
Greška u prijemnom FIFO |
Bit 6 |
Prazan Data Holding Registar |
Bit 5 |
Prazan THR registar i može se slati sledeći znak |
Bit 4 |
Detektovan signal prekida (Break) |
Bit 3 |
Greška uokvirenja(Framing error) |
Bit 2 |
Greška pariteta(Parity error) |
Bit 1 |
Greška prekoračenja(Overrun error) |
Bit 0 |
Podatak je primljen i bajt se nalazi u RDR |
Ovaj registar ima prevashodno
namenu da daje izveštaj o stanju na komunikacionoj liniji.
Modem Status Registar(MSR) ima sledeću strukturu:
Bit |
Opis |
Bit 7 |
Aktivira "Data Carrie Detect" (DCD) |
Bit 6 |
Aktivira "Ring Indicator"(RI) |
Bit 5 |
Aktivira"Data Set Ready"(DSR) |
Bit 4 |
Aktivira"Clear To Send"(CTS) |
Bit 3 |
Promena u "Data Carrier Detect"(DCD) |
Bit 2 |
Promena u "Ring Indicator"(RI) |
Bit 1 |
Promena u "Data Set Ready"(DSR) |
Bit 0 |
Promena u "Clear To Send"(CTS) |
Status modema zavisi pre svega
od toga da li je neka linija aktivna ili nije
i da li se status pojedine linije promenio od poslednjeg čitanja ovog
registra.
http://vojo.milanovic.org
© Copyright, 2003 Milanović Vojo
All Rights Reserved.