|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
Comunicatia seriala | ||||||
|
||||||
Descriere generala Comunicaþiile seriale se utilizeaza pe distanþe mici de
ordinul zecilor de metri cat ºi pe distanþe mari (interlocalitaþi),
prin intermediul sistemului telefonic. Transformarea paralel-serie a cuvintelor
de date asociate cu transmisia pe o singura linie (in general un
singur canal), elimina sarcina dificila a asigurarii la
recepþie a sincronismului, intre mai multe semnale electronice transmise
in paralel pe linii fizic diferite. l5h23hb Parmetrii legaturii de date in serie Debitul binar (viteza de transmisie) = numarul maxim de simboluri binare
transmise pe secunda: V(m)=1/* abaudsi Relaþia intre D ºi V(m) este: D=V(m) ? log2n abiþi/si unde n este numarul starilor electrice utilizate in modem. Codurile utilizate in comunicaþii de date In comunicaþia de date, informaþia se transmite sub forma
de caracter, un caracter reprezentind litere, cifre, semn speciale, sau
informaþii pentru comanda comunicaþiei (caractere neafiºabile).
In funcþie de codul utilizat, un caracter se reprezinta prin
5 pina la 8 biþi. Detecþia ºi corecþia erorilor Problema esenþiala in comunicaþia de date, detecþia
ºi corecþia erorilor se face la nivelul funcþional al legaturii
de date. Metoda general utilizata care permite detectarea erorilor este
adaugarea la transmisie a informaþiei de control (redundanta),
aflata in corespondenþa stricta cu conþinutul
informaþional propriu-zis al mesajului. Acest lucru permite efctuarea
la recepþie a unor verificari asupra corectitudinii elementului
protejat (caracter, mesaj, bloc). Transmisia asincrona ºi transmisia sincrona O legatura de date poate fi utilizata in trei moduri
: Transmisia asincrona (START-STOP) In transmisia asincrona, caracterele se transmit ca entitaþi distincte delimitate de bitul de START (nivel"0") ºi debitul (sau biþii) de STOP (nivel "1") ca in fig 1 : fig 1 - caracter in transmisie seriala Intervalul dintre doua caractere poate fi oarecare, linia fiind menþinuta
in acest caz pe nivelul electric corespunzator situaþiei
de repaus ("1" logic). Lungimea unui caracter variaza in
funcþie de codul folosit, intre 5 ºi 8 biþi/caracter.
Durata (minima) a STOP-ului este T, 2T sau 1,5T (valori standard). Transmisiunile de tip asincron se utilizeaza curent pentru viteze mici (* 1200 biþi/s), in legaturile de date prin modem-uri. Pentru legaturi directe, binare pe distanþe mici se pot utiliza ºi viteze mai mari: 2400, 4800, 9600 ºi valori foarte mari dar care nu sunt garantate ºi nici documentate: peste 9600: 19200, 28800, 38400, 57600, 115200. Transmisia sincrona Transmisia sincrona se utilizeaza pe legaturile de date
de viteza mare, fiind preferata datorita eficienþei (majoritatea
protocoalelor de date sunt construite pentru transmisii sincrone). Informaþia
este transmisa sub forma de blocuri de caractere sau biþi
(102-105 biþi) succesivi (fara biþi de START ºi
STOP intre caractere), incadrate de caractere speciale de sincronizare,
delimitare ºi comanda. Protocoale de date Funcþiunile de baza ale unui protocol de date denumit pe scurt
DLC (Data Link Control) sunt : Protocolul BCP Mesajul consta intr-or succesiune de octeti, delimitaþi printr-o secvenþa de sincronizare (doua sau mai multe caractere SYN). Mesajul propriu-zis estecompus din unul sau mai multe blocuri. Pentru funcþionarea corecta. a legaturii de sunt prevazute caractere de comanda care fac parte din codul utilizat (ASCII, EBCDIC, etc). Un bloc se compune dintr-un camp de comanda (header), un cimp de text ºi un cimp pentru detectarea erorilor (LRC sau CRC ). Exemple de caractere de comanda sunt : SOH (Start of Header), STX (Start of TeXt), ETB (End of Intemediate Transmission Block), ETX (End of TeXt), EOT (End Of Trasmission). Protocolul BOP In acest protocol unitatea de transmisie este cadrul, delimitat de doua flaguri (01111110). In interiorul unui cadru se gasesc : cimpurile de comanda, de informaþie, de detectare a erorilor. In aceste protocoale, mesajul propriu-zis este tratat ca o succesiune de biþi situata intre cele doua flaguri. Protocoalele BOP sunt mai flexibile decat BCP in asigurarea “transparenþei” (transparenþa=posibilitatea de a transmite ºi caractere de comanda in interiorul blocului de informaþie, fara ca acestea sa fie interpretate la recepþie drept comenzi ). Exemple de protocoale BOP : SDLC (Synchronous Data Link Control), HDLC (High Level Data Link Control-ISO), ADCCP (Advanced Data Communication Control Procedure-ANSII), etc. Circuite specializate pentru comunicaþia serie Comunicaþia serie in PC-uri este realizata de catre
circuite programabile specializate, care comunica paralel cu UC ºi
serie cu exteriorul. Circuitele specializate pentru comunicaþia serie
(numite ºi intefeþe de comunicaþie serie) se intalnesc
in practici in doua variante : Strutura unui transmiþator/receptor elementar (T/R) Funcþiile de baza ale T/R sunt conversia serie/paralel la recepþie
ºi paralel/serie la transmisie. - intreruperi generate de semnalele electrice asociate la TxRDY ºi TxE Receptorul (R) conþine un caracter serie - paralel in care se
achiziþioneaza in mod serie biþii semnalului pe intrarea
RxD, la eºantionarea cu ceasul RxC. Dupa terminarea recepþiei
unui caracter, acesta este transferat in buferul de recepþie. Acest
lucru este reflectat prin setarea RxRDY=1. Se poate citi un cuvant de
stare sau se genereaza o intrerupere. Cuvantul de stare poate
conþine ºi alte informaþii legate de recepþie.De exemplu,
pentru modul de lucru asincron, cuvantul de stare conþine in
mod tipic urmatorii biþi indicatori : eroare de paritate, eroare de recepþionare
a bitului de STOP (daca este un o in loc de 1), eroare de suprapunere
(overrun), cand un caracter a fost recepþionat ºi transferat
de receptor in buffer peste cel precedent. Porturi seriale intr-un PC Intr-un PC se pot gasi pana la 4 porturi seriale,
adresabile prin servicii BIOS sau DOS. Pentru BIOS primul port serial este 0,
urmatorul este 1, etc. Pentru DOS primul port serial este COM1, al doilea
este COM2, etc. In modul de funcþionare sincrona se presupune
sincronizarea ca operaþie prealabila recepþionarii
ºirului de caractere ce constitue mesajul. Circuitul intra in
modul "cautare" (HUNT) in care biþii recepþionaþi
pe linia RxD sunt inscriþi unul cate unul in tamponul
datelor recepþionate. Dupa fiecare bit anscris are loc compararea
intre conþinutul acestui tampon ºi conþinutul unui registru
incarcat prin program cu caracterul de sincronizare. Cand
cele doua registre au conþinuturi diferite, se aºteapta
recepþionarea bitului urmator ºi operaþia continua
astfel pana ce tamponul datelor recepþionate conþine
caracterul SYN. Daca protocolul de comunicaþie prevede sincronizarea
cu un singur SYN, circuitul iese din modul HUNT ºi SYNDET=1. Trebuie remarcata
necesitatea ca cele doua caractere sa fie caractere succesive,
fara biþi sau caractere straine intercalate intre
ele. Intrarea in modul "cautare" se face in urma
iniþializarii funcþionarii sau in urma conmenzii
prin program a acestui regim. In modul asincron sunt adaugaþi biþii
de START, de paritate (daca este cazul) ºi bitul (biþii) de
STOP. In acest mod un semnal de 0 pe linia RxDpoate semnifica un bit de START.
Daca linia este gasita in starea 0, se trece la recepþia
caracterului, constand din biþi de paritate ºi bit (biþi)
de STOP. Cand intreg caracterul a fost recepþionat, linia
RxRDY indica disponibilitatea acestuia in tamponul datelor recepþionate. Programarea interfeþei seriale Interfata seriala poate fi programata in trei moduri : Programarea prin intermediul serviciilor DOS se face folosind funcþia 0x4b cu INT 21h. Programarea prin servicii BIOS permite o viteza maxima de 9600 bauds, dupa care se pot pierde caractere. Acest fapt se datoreaza modului cum se desfaºoara comunicaþia in PC (de exemplu, la afiºare se face ºi scroll al ecranului care consuma timp). Serviciul 0, INT 14H Acest serviciu seteaza parametrii de comunicaþie : viteza de transmisie, paritatea, numarul de biþi de stop ºi lungimea cuvantului. Paramatrii sunt introduºi in registrul AL : Dupa execuþie intreruperea este dezactivata ºi registrul AX conþine informaþii ce vor fi descrise la serviciul 3. Serviciul 1, INT 14H Acest serviciu este utilizat pentru transmisia unui caracter. Caracterul ce urmeaza a fi transmis este incarcat in registrul AL, DX este incarcat cu numarul portului utilizat (este valabil pentru toate serviciile). Dupa transmisie, registrul AH conþine informaþii despre cum s-a transmis caracterul : daca bitul 7 este setat inseamna ca nu s-a putut transmite octetul. In caz contrar registrul conþine primii 7 biþi de stare (fara bitul de Time-out error). Serviciul 2, INT 14H Cu acest serviciu se face recepþia unui caracter in registrul AL. Daca bitul 7 al registrului AH este setat inseamna ca recepþia a eºuat. In caz contrar, biþii 4, 3, 2,1 sunt biþiicorespunzatori ai registrului de stare. Serviciul 2, INT 14H Acest serviciu returneaza starea portului serial. Registrul AH raporteaza starea liniei de comunicaþie, iar registrul AL starea modemului. Registrul AH (comanda liniei) Registrul AL (comanda modemului) bit 7 = time-out error received line signal detect bit 6 = transmitter shift register empty ring indicator bit 5 = transmitter holding register empty data set ready bit 4 = break detect clear to send bit 3 = framing error delta receive line signal detect bit 2 = parity error trailer edge ring detector bit 1 = oevrrun error delta data set ready bit 0 = data ready delta clear to send Programarea directa a interfeþei seriale Interfaþa seriala este vazuta de programatori ca fiind compusa din 10 regiºtri accesibili ca porturi de intrare sau iesire. Regiºtrii sunt prezentaþi in continuare : nume abreviere adresa in/out transmitter holding register THR xF8h out receiver data register RDR xF8h in baud rate divisor (LSB) BRD (LSB) xF8h out baud rate divisor (MSB) BRD (MSB) xF9h out interrupt enable register IFR xF9h out interrupt ID register IIR xFAh in line control register LCR xFBh out modem control register MCR xFCh out line status register LSR xFDh in modem status register MSR xFEh in Se observa ca prima litera de la adresa este notata cu x. Ea va fi inlocuita cu cifra corespunzatoare portului serial pe care se doreºte a se face comunicaþia. Astfel, daca se utilizeaza COM1, cifra va fi "3", iar daca se foloseºte COM2, cifra va fi "2". Adresa cartelei seriale se afla in zona de date BIOS la adresa 0040:0000H. La offseturile 0002H, 0004H ºi 0006H se afla adresele celor trei cartele ce pot exista in sistem. Recomandarea este ca dupa fiecare citire/scriere din/in port sa se faca o mica bucla de intarziere. Intreruperile hard generate la recepþia/transmisia unui caracter sunt : 0x0C pentru COM1 ºi 0x0B pentru COM2, respectiv IRQ4 ºi IRQ3. Registrul THR (xF8h) Conþine caracterul ce va fi transmis. Primul bit transmis este 0. Registrul RDR (xF8h) Este buferul in care se va regasi caracterul recepþionat Registrul LSB (xF8h) ºi MSB (xF9h) Pentru a accesa aceste registre trebuie ca bitul 7 al registrului LCR sa fie setat. Aceste registre folosesc la programarea ratei de divizare, deci a vitezei de transmisie. viteza MSB (hexa) LSB (hexa) 75 06 00 110 04 17 134,5 03 59 150 01 00 300 00 80 600 00 C0 1200 00 60 2400 00 30 4800 00 18 9600 00 0C 14400 00 08 19200 00 06 28800 00 04 38400 00 03 57600 00 02 115200 00 01 Se observa ca multe din aceste rate nu sunt accesibile BIOS-ului. Registrul IER (xF9h) Controllerul I8259 permite ca numai patru intreruperi sa fie activate sau dezactivate in mod independent. Intreruperile ce pot fi setate respectiv resetate in acest registru sunt codate in primii patru biþi ai registrului.
Prin setarea bitului corespunzator se activeaza intreruperea, iar prin resetare se dezactiveaza. Pentru a avea acces la acest registru trebuie ca bitul 7 (DLAB) LCR sa fie resetat. Registrul.IIR (xFAh) Pot fi programate patru tipuri de intreruperi prin registrul IER. Daca mai mult decat una a fost activata, rutina de intrerupere trebuie sa ºtie datorita carei cauze s-a produs ºi sa acþioneze in consecinþa. Daca numai o singura intrerupere este activa, atunci acest lucru nu mai este necesar. Biþii 1 ºi 2 codeaza tipul de intrerupere pe baza de prioritate bit 2 bit 1 nivel prioritate tipul intreruperii ºi cum se reseteaza Acest registru programeaza parametrii transmisiei Registrul MCR (xFCh) Acest registru permite setarea unui protocol de comunicaþie cu un dispozitiv extern (modem). Bitul 0 controleaza semnalul Dtata Terminal Ready (active pe 1). Bitul 1 controleaza semnalul Request To Send. Bitul 3 controleaza semnalul 2 de la ieºire (TxD). Acesta permite intreruperii generate de interfaþa sa fie plasata pe bus-ul sistem pentru a fi recepþionata de controllerul de intrerupere. Bitul 4 permite realizarea unei bucle de testare pentru verificarea corectitudinii unei porþiuni din programul de comunicaþie seriala. Iniþializarea obiºnuita a acestui registru arata astfel : Registrul LSR (xFDh) Acesta este registrul de stare. El conþine informaþii privitoare la transferul de date. Bitul 0 semnifica Data Ready, deci caracterul a fost recepþionat. Registrul este resetat prin citirea caracterului din portul xFBh. Bitul 1 este pentru eroare de overrun, bitul 2 pentru eroare de framing iar bitul 4 pentru eroare de intrerupere BREAK. Citirea registrului LSR reseteaza biþii de eroare. Bitul 5 arata ca registrul de transmisie este gata sa primeasca un nou caracter. Bitul 6 arata acelaºi lucru ºi suplimentar ca ºi registrul de deplasare este gol. Bitul 7 este nefolosit (=0). Registrul MSR (xFEh) Acest registru conþine informaþii cu privire la starea liniilor modemului. Patru din biþi sunt setaþi daca linia de intrare a interfeþei ºi-a schimbat starea de la ultima citire a registrului de stare.
Probleme 1. Analizaþi programele din fiºierul seriala.c. Primul program permite
interconectare intre doua calculatoare pe seriala prin COM2,
al doilea implementeaza protocolul XON-XOFF, al treilea corupe intreruperea
de ceas, recepþie pe seriala ºi tastatura iar al patrulea
permite comunicarea prin programarea directa a porturilor. |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|