Sunteți pe pagina 1din 109

ECHIPAMENTE PERIFERICE

A T
Laborator 1 N
I O
T
IC
T R
E S
R

Universitatea din Piteşti


1.Structura unui sistem de calcul

Microprocesoarele, dar mai ales microarhitecturile de prelucrare a informatiei (procesoarele,


controlere sau chiar calculatoare sau multiprocesoare integrate pe un cip), au determinat o adevărata
revoluŃie în industria calculatoarelor, atât prin performantele deosebite obŃinute printr-o proiectare
optimizată, dedicată uneori, cât şi prin preŃurile de vânzare tot mai scăzute, evident la aceeaşi putere de
calcul. De exemplu, un microprocesor din generaŃia zilelor noastre depăşeşte performanŃele unui
supercalculator de acum 5 ani, iar preŃul este de sute de ori mai mic. Cercetătorii susŃin că peste 65% din
această creştere se datorează îmbunătăŃirilor realizate la nivel architectural, restul fiind de natură
tehnologică.
O măsură a complexităŃii sistemelor numerice este numărul de transistoare folosite în circuitele
integrate din sistem. Gordon Moore, unul din colaboratorii lui Noyce şi cofondator al firmei INTEL, a

A T
observat după primii 5 - 6 ani de dezvoltare a tehnologiei circuitelor integrate că numărul de tranzistoare
integrate într-un singur cip se dublează la fiecare 18 luni. Această regulă a fost strict respectată în ultimii 30
de ani, fiind cunoscută ca legea lui Moore. Figura de mai jos reprezintă evoluŃia numărului de tranzistoare
pe cip, începând cu anul apariŃiei primului circuit integrat şi până la apariŃia procesorului Pentium 4 (circa

N
42 milioane de tranzistoare). Celelalte puncte de pe grafic marchează alte momente importante când au
apărut diverse microprocesoare din familia Intel - x86: 286, 386, Pentium II, Pentium III sau Pentrum 4. Se

O
poate estima că în mai puŃin de 10 ani se va depăşi probabil numărul de 1 miliard de tranzistoare pe cip.

I
T
IC
T R
E S
R
Numărul de tranzistoare pe cip se dublează la aproximativ 18 luni

Din punct de vedere al pieŃei de vânzări a calculatoarelor, se disting trei tipuri de calculatoare.
Calculatoarele personale (desktop-uri) sunt cele mai populare şi au utilizare generală, fiind
destinate utilizatorilor (obisnuiti) din toate categoriile profesionale. Poate costa de la câteva sute de Εuro
până la cca. 10.000 Εuro (pentru configuraŃii hard-soft mai sofisticate de tip staŃii de lucru - workstations).
Piata de PC-uri (Personal Computers) impune găsirea unor compromisuri suboptimale performanŃă – cost.
ProducŃia anuală este de ordinul sutelor de mii de desktop-uri.
Serverele sunt destinate sa ofere servicii tot mai sofisticate de retea, inclusiv ca noduri de Internet,
în locul mainframe-urilor de acum un deceniu si mai bine. Caracteristicile lor cele mai importante se
focalizează pe fiabilitate, disponibilitate, scalabilitate si viteza de procesare. Aceste servere costă între
10.000 Euro si 10.000.000 Euro (supercalculatoare) şi absorb zeci de milioane de microprocesoare pe an.
Sistemele dedicate (Embedded Systems) au dezvoltarea cea mai dinamică, estimarea producŃiei la
nivelul anului 2004 fiind de cca. 500 milioane de astfel de sisteme pe an. AplicaŃiile sunt diverse (aparate
foto digitale şi camere video, aparatura electrocasnică, telefoane mobile, imprimante, comenzi auto, jocuri
electronice etc.), iar costuri variază între 10 Euro si 10.000 Euro. Multe dintre aceste sisteme au programele
scrise de producator, având un grad de programabilitate relativ redus, iar memoria de lucru are capacităŃi
relativ reduse (în creştere continuă în ultimii ani).

A T
N
Schema bloc a unui microsistem: (Microprocesor, amplificatoare de magistrale, magistrale de adrese,
date comenzi si stari, module memorie ROM si RAM, porturi I/O lente, porturi I/O

O
rapide – interfeŃe DMA, program incarcator - POST, programe BIOS)

I
T
Microprocesorul este elementul central al structurii, responsabil cu aducerea din memorie, decodificarea si
execuŃia instrucŃiunilor maşina, codificate binar. În conformitate cu aceste instructiuni, microprocesorul

IC
generează secvenŃial toate semnalele (adrese, date, comenzi) necesare memoriilor si interfetelor pe care le
gestionează. Contine (pe un singur cip) registri interni, unitati de execuŃie, o unitate de comanda cablata sau
microprogramata, bus-uri interne de interconectare etc. Toate microprocesoarele (unitatea centrala de

T R
procesare – CPU) conŃin, în general, următoarele componente:
• unitatea primară de stocare, care stochează datele şi instrucŃiunile în timpul funcŃionării PC-ului
• unul sau mai multe unităŃi aritmetico-logice (ALU) care realizează toate calculele
• o unitate de control care supervizează toate activităŃile CPU prin controlul fluxului de date şi instrucŃiuni de
la RAM la ALU

E S
• soclul procesorului, care este o grila formata din găuri mici care menŃin CPU-ul în contact cu placa de bază
• un soclu pentru introducere forŃata (zero-insertion force (ZIF) socket), care îmbunătăŃeşte manevrabilitatea

R
CPU-ului prin adăugarea unei pârghii pe soclu (pentru a uşura scoaterea sau montarea acestuia.)
• un ventilator (cooler) care răceşte forŃat CPU-ul
Bus-ul de adrese este unidirectional de tip tree state (TS). Prin intermediul acestui bus microprocesorul
pune adresa de acces la memorie sau la porturile I/O (Input/Output). Lumea externa a microprocesorului
este constituita exclusiv din memorie si interfetele de intrare – iesire. Acestea sunt resursele care pot fi
accesate (scrise, respectiv citite) de catre microprocessor prin intermediul interfetelor de I/O.
Bus-ul de date este de tip bidirectional TS. Prin intermediul acestui bus microprocesorul aduce din
memorie instructiunea, respectiv citeste data (operandul) din memorie sau dintr-un port de intrare
(arhitectura Princeton de memorie). La scriere microprocesorul plaseaza pe bus-ul de date rezultatul pe care
doreste sa-l scrie în memorie sau într-un port de iesire. La citire, rezultatul este preluat prin intermediul
acestui bus din memorie sau dintr-un port de intrare. În ambele cazuri, microprocesorul activeaza adresa
respectiva pe bus-ul de adrese împreuna cu semnalele de comanda aferente (Read, Write, Memorie,
Interfata etc.) pe bus-ul de comenzi. Pe bus-ul de stari, dispozitivele slave (memorii, interfete) comunica
informatii referitoare la modul de desfasurare al transferului.
Memoria poate fi vazuta intr-o prima abordare ca o stiva de locatii binare (cuvinte), fiecare cuvânt fiind
caracterizat de o adresa binara unica . Memoria este caracterizatã prin doi parametri de bazã:
- capacitatea (numărul de locatii pe care le contine)
- latenta (timpul de acces) care este o caracteristicã intrinsecã a circuitului de memorie si reprezintã in
principiu timpul scurs din momentul furnizãrii adresei de cãtre microprocesor pânã in momentul in care
memoria a încheiat operatia comandatã (citire sau scriere).
Fireşte, se doresc capacitati cât mai mari si latente cât mai mici, cerinte în general contradictorii.
Între busul de adrese si memorie exista un decodificator N:2N pentru a selecta unul din dispozitivele externe
sau memoria.

Organizarea de principiu a memoriei


A T
N
Din punct de vedere al accesului (dar şi tehnologic) memoriile se impart în:

O
 ROM (Read Only Memory) – EPROM, EEPROM

T I
 RAM (Random Acces Memory): SRAM (static) sau DRAM (dinamic)
Memoriile EPROM sunt memorii rezidente care pastreaza continutul si dupa decuplarea tensiunii
de alimentare. Ele sunt reprogramabile în sensul în care pot fi sterse prin expunere la raze ultraviolete si
reînscrise pe baza unui dispozitiv special numit programator de EPROM –uri. EPROM-urile pastreaza asa

IC
numitul program monitor înscris de catre fabricant care este primul program procesat de catre sistem
imediat dupa alimentarea (resetarea) sa. Acest lucru este absolut necesar întrucât continutul memoriilor

R
RAM este neprecizabil imediat dupa alimentare. Prin urmare, imediat dupa RESET continutul PC-ului este
initializat si va pointa spre prima instructiune din programul monitor rezident în EPROM.Rolul programului

S T
monitor este de a efectua o testare sumara a microprocesorului si a celorlalte componente ale
microsistemului, dupa care va initia încarcarea sistemului de operare (Linux, Windows etc.) de pe disc în
memoria RAM. Dupa aceasta programul monitor da controlul sistemului de operare rezident acum în RAM.
De asemenea ROM-ul contine rutinele de intrare – iesire BIOS.

E
SRAM: sunt memorii deosebit de rapide (timp de acces ta = 1 ns ÷15 ns), având capacitate de integrare

R
redusa (sute de kocteŃi/circuit).
DRAM: constituie peste 90 % din memoria oricarui sistem de calcul datorita faptului ca ofera densitati mari
de integrare (64 Mbiti – 512 Mbiti /chip) si timpi de acces “relativ rezonabili” ta < 50 ns, în scădere
continuă. Un al avantaj îl constituie puterea absorbita care este redusa (fiind realizate în tehnologie MOS).
Corelarea timpului de acces al acestor memorii cu viteza mare de execuŃie a microprocesorului constituie
una dintre marile probleme tehnologice si arhitecturale în ingineria calculatoarelor. Rezultă două
dezavantaje importante: accesare ( citire / scriere ) complicată ; necesitatea regenerării memoriei DRAM.

2. Magistrale şi standarde de magistrala

Aşa cum am văzut, un sistem de calcul se compune dintr-un set de componente (unitate centrala,
memorie, interfete de intrare/iesire si dispozitive periferice) care schimba informatii intre ele. In modelul de
calculator propus de J. Von Neumann comunicaŃia dintre componentele sistemului se realizează prin legaturi
dedicate intre perechi de componente. Aceasta abordare este relativ rigida, limitind in mare măsura scalabilitatea
sistemului. Adaugarea de noi componente este dificila si implica modificarea componentelor deja existente.
Introducerea conceptului de magistrala a revolutionat modul de proiectare a noilor sisteme de calcul.
Magistrala este un mediu comun de comunicatie intre componentele unui sistem de calcul; fizic este
alcatuit dintr-un set de semnale care faciliteaza transferul de date si sincronizarea intre componentele
sistemului. Prin standardizarea magistralelor, sistemele de calcul au devenit deschise, si un numar mai mare
de producatori au putut sa realizeze componente pentru o anumita structura de calculator (module de
memorie, interfete de intrare/iesire, echipamente periferice), bazându-se numai pe specificaŃiile magistralei.
Cele mai cunoscute foruri internationale de standardizare care au activitate in domeniul magistralelor
sunt IEEE, ANSI si IEC. In tabel sunt prezentate cele mai utilizate magistrale, din care nu toate sunt formal
standardizate.
Standard IEEE Nume popular Domenii de utilizare
488 GPIB Magistrala pentru instrumente de laborator
583,596,.683 CAMAC Magistrala pentru achizitie de date si instrumentatie
696 S 100 Microsisteme de dimensiune medie
796, P1296 MULTIBIS I, II Microsisteme de dimensiune medie
P896 Futurebus Sisteme multiprocesor
P996 PC bus Pentru calculatoare personale
P1014 VME bus Sisteme microprocesor performante ( bazate pe familia
Motorola 68000)
P1196 Nubus Sisteme multiprocesor

T
Unibus Minicalculatoare , PDP 11
QBus Minicalculatoare, VAX
SCSI
A
Magistrala pentru periferice (disc, banda)
In ultima perioada au aparut o serie de noi standarde de magistrala, care incearca sa tina pasul cu

N
cerintele de comunicare ale noilor generatii de procesoare. În general, o magistrală performantă trebuie să
aibă următoarele caracteristici:

I O
– uşurinŃă în exploatare – aşa fel încât să nu mai fie nevoie de configurări şi proceduri de setup;
– rapiditate – pentru ca interfaŃa să nu producă o gâtuire a comunicaŃiilor;

T
– siguranŃă în exploatare – astfel încât erorile să fie rare şi să existe sisteme de corecŃie a erorilor apărute;
– flexibilitate – pentru conectarea unui număr cât mai mare de periferice;

IC
– costuri scăzute – astfel încât utilizatorii (şi producătorii ce realizează interfeŃele pentru produsele lor) să
nu vadă în acesta un impediment;
– consum scăzut de energie – pentru a economisi energia calculatoarelor portabile;

perifericele lor.

T R
– suport din partea sistemului de operare – astfel încât proiectanŃii să nu fie nevoiŃi să scrie drivere pentru

S
Structura magistralei
O magistrala se compune dintr-un set de semnale si un set de reguli care guverneaza transferul de

E
informatii si accesul la mediul de comunicatie. Informatiile transferate pot fi: date, comenzi (instructiuni) si
informatii de control si sincronizare. Regulile se refera la:

R
- caracteristicile fizice si electrice ale componentelor conectate pe magistrala (ex: nivele de tensiune,
curenti, incarcare, tip conectori, etc.)
- secventa de generare a semnalelor necesare pentru efectuarea unui transfer
- timpi limita pentru diferitele faze ale unui transfer si timpi de mentinerea unui anumit semnal
- interconditionarile functionale si temporale intre diferitele tipuri de semnale
Functie de numarul semnalelor utilizate pentru transferul de date, magistralele pot fi de doua tipuri:
magistrale paralele si magistrale seriale. Magistralele seriale se utilizau rar ca mijloc de comunicatie intre
componentele de baza ale unui calculator (unitate centrala, memorie, interfete de intrare/iesire) datorita
vitezei de transfer relativ scazute. Se utilizeaza acum din ce în ce mai mult la conectarea perifericelor unui
calculator şi în anumite sisteme dedicate bazate pe microcontrolere, la care costul si dimensiunea redusa
sunt parametri definitorii. In continuarea acestei lucrari ne vom referi la magistralele paralele.
In acceptiunea clasica, o magistrala se compune din urmatoarele tipuri de semnale:
- semnale de date – semnale bidirectionale utilizate pentru transferul de date si instructiuni; la un moment
dat o singura unitate poate sa emita pe liniile de date; numarul de linii de date (ex: 8, 16, 32, 64, 128)
determina dimensiunea maxima a cuvintului de date care poate fi transferat la un moment dat şi implicit
viteza medie de transfer a magistralei;
- semnale de adresa – utilizate pentru specificarea adresei modulului destinatie sau sursa; numarul de linii
de adresa determina spatiul maxim de adresare permis de magistrala (ex.: 24 linii de adresa determina
un spatiu de adresare de 224=16 Mlocatii);
- semnale de comanda, control, intrerupere şi arbitrare a accesului
- semnale de comanda – utilizate pentru specificarea directiei de transfer (ex: dinspre procesor sau
catre procesor) si a tipului de modul adresat (ex. modul de memorie, modul de intrare/iesire, modul
de memorie program, controler de întreruperi, etc.)
- semnale de control – utilizate pentru reglarea conditiilor de transferare a datelor (ex: temporizarea
deschiderii/inchiderii amplificatoarelor de magistrala)
- semnale de intrerupere – permit semnalizarea unor evenimente interne sau externe si implicit
determina intreruperea executiei programului curent
- semnale de ceas – folosite pentru sincronizare si pentru generarea unor semnale de frecventa
programabila
- semnale de arbitrare a accesului – folosite pentru arbitrarea (controlul) accesului pe magistrala (in
cazul magistralelor multimaster);
- semnale de alimentare – folosite pentru alimentarea modulelor sistemului

Magistralele pot fi clasificate după mai multe criterii:


a. modul de lucru (in raport cu semnalul de ceas): magistrale sincrone (ex. magistrala procesorului) /
magistrale asincrone (ex.: ISA, EISA, MULTIBUS, etc.)

A T
b. numarul de unitati master conectate pe magistrala: magistrale unimaster – exista un singur modul
master pe magistrala; nu necesita mecanisme de arbitrare a magistralei ;magistrale multimaster – permit
conectarea mai multor unitati master pe acelasi tronson de magistrala; magistrala trebuie sa contina
semnale de arbitrare si un protocol de transfer al controlului pe magistrala (ex: MULTIBUS)

N
c. modul de realizare a transferului de date: magistrale secventiale – regula de baza: ciclurile de transfer
se desfasoara secvential, la un moment dat cel mult un ciclu de transfer este in curs de desfasurare;

I O
majoritatea magistralelor clasice folosesc acest principiu de transfer; magistrale tranzactionale –
transferul de date se efectueaza prin tranzactii; o tranzactie este divizata in mai multe faze si mai multe

T
tranzactii se pot desfasura simultan cu conditia ca tranzactiile sa fie in faze diferite; aceasta restrictie
provine din faptul ca fiecare faza a unei tranzactii foloseste un subset din multimea semnalelor

IC
magistralei; teoretic, la aceste magistrale factorul de crestere a vitezei (in comparatie cu o magistrala
clasica) este egal cu numarul de faze in care se divide o tranzactie (ex: magistrala procesorului Pentium)
d. lungimea cuvântului transferat la un moment dat: magistrale seriale / magistrale paralele.

T R
Practic, o magistrală este o cale de comunicare între două sau mai multe componente ale unui
PC, prin care se realizează transferul de date, adrese şi comenzi. Din punct de vedere al vitezei de

S
transfer, magistralele PC-urilor includ două categorii:
- magistrale de mare viteză care conectează microprocesorul cu memoria cache externă şi memoria

E
RAM, numite şi magistrale locale ale PC-ului;
- magistrale cu viteză redusă care conectează ansamblul microprocesor, memorie internă, cu

R
dispozitivele periferice de intrare/ieşire prin adaptoare incorporate în placa de bază sau prin
intermediul conectorilor de extindere.

Magistralele PC-ului
Suportul fizic al magistralei poate fi divers:
- traseele de cupru de pe placa de bază şi conectori;
- cabluri (panglici) cu fire;
- fibra optică etc.

Magistrale locale de mare viteză


Magistralele locale de mare viteză includ magistrala microprocesorului, magistrala de memorie
RAM şi magistrala de adrese.
Magistrala procesorului
Magistrala procesorului este calea de comunicare dintre CPU şi cele mai apropiate componente
de controlerul magistralei (controlerul magistralei se materializează printr-un set de cip-uri, motiv
pentru care se regăseşte în tehnica de calcul sub denumirea chipset); magistrala este utilizată pentru a
realiza transferul datelor între CPU şi magistrala principală a PC-ului sau între CPU şi memoria cache de
pe placa de bază (memoria cache externă microprocesorului).

A T
N
I O
T
IC
T R
Magistrala microprocesorului

Deoarece scopul magistralei procesorului este de a transfera informaŃii de la şi către CPU cu


mare viteză, această magistrală operează la o viteză mult mai mare decât orice altă magistrală a

S
sistemului. Magistrala este formată din circuite electrice care transferă date, adrese şi realizează funcŃii
de control, în sistemul de bază al unui Pentium, magistrala procesorului are 64 de linii de date, 32 de

E
linii de adresă şi linii de control; Pentium Pro, Pentium II, III şi IV au 36 de linii de adresă, celelalte

R
linii fiind ca la Pentium.
Magistrala procesorului operează la aceeaşi frecvenŃă cu care CPU-ul operează extern,
frecvenŃă mai mică decât frecvenŃa internă de lucru. De exemplu, un Pentium ce lucrează intern la
2000 MHz operează extern Ia 666 MHz. La multe PC-uri, frecvenŃa internă este exprimată ca un multiplu
(1,5 x, 2,5 x, 3 x, ...; uneori setabil) al frecvenŃei magistralei procesorului.
Magistrala procesorului este conectată la procesor prin intermediul pinilor introduşi în soclu şi
poate transfera un bit pe o linie de date în unul sau două cicluri de ceas. Pentru a determina rata de
transfer a magistralei procesorului, se va multiplica lăŃimea magistralei (64 de biŃi pentru Pentium), cu
frecvenŃa magistralei. Astfel, la microprocesoare Pentium, a căror placă de bază rulează la o frecvenŃă de
666 MHz şi transferă un bit la fiecare ciclu de ceas pe fiecare linie de date, există o rată maximă de
transfer de 5328 Mbytes/sec (sau MB/sec sau MBps):

- 668 [MHz] x 64 [biŃi] = 42.624 [MbiŃi/sec]


- 42.624 [MbiŃi/sec] / 8 [biŃi] = 528 [Mbytes/sec]

Rata maximă de transfer (numită si lăŃime de bandă a magistralei) nu reprezintă lăŃimea de


bandă cu care se operează în mod obişnuit, existând o serie de factori (proiectarea chipset-urilor, a
memoriei ş.a.) care o influenŃează în sensul încetinirii.
Magistrala de memorie
Magistrala de memorie este folosită pentru a transfera informaŃii între CPU şi memoria RAM;
ea poate fi o parte a magistralei procesorului, sau implementată separat într-un controler responsabil
cu transferul informaŃiilor dintre magistrala procesorului şi magistrala de memorie. Sisteme ce lucrează
la o frecvenŃă a plăcii de bază mai mare de 16 MHz, ciclează la rate ce depăşesc posibilităŃile chip-
urilor de DRAM; deoarece toate sistemele actuale includ plăci de bază care lucrează la o frecvenŃă
de peste 16 MHz există un controler special pentru memorie, ce va controla interfaŃa dintre magistrala
mai rapidă a procesorului şi magistrala memoriei principale.
InformaŃiile ce se transmit prin magistrala de memorie sunt transferate la o viteză mai mică
decât informaŃiile transferate prin magistrala procesorului. Cip-urile pentru memorie sau formatele
fizice SIMM/DIMM (Single Inline Memory Modules / Dual Inline Memory Modules) sunt conectate
la magistrala de memorie cam în acelaşi mod în care sunt conectate la magistrala de I/O prin
conectori specifici perifericele.
Este de remarcat faptul că magistrala memoriei RAM este întotdeauna de aceeaşi lăŃime cu
magistrala procesorului, ceea ce înseamnă că într-un sistem pe 64 de biŃi cum sunt

A T
microprocesoarele Pentium, magistrala de memorie va avea 64 de biŃi. Aceasta defineşte mărimea
unui banc de memorie. Pentium are 64 de biŃi şi necesită două formate SIMM de 72 de pini (32 biŃi fiecare).
Unele sisteme, utilizează formatul DIMM de 168 de pini (64 biŃi fiecare).

N
Pe piaŃa se găsesc mai multe tipuri de memorii. Se mai folosesc memorii de tip SDRAM:
PC133(133MHz, 1 GB/s); PC100(100MHz, 800 MB/s); PC66(66MHz, 533 MB/s).

I O
T
IC
Sunt însă prea lente pentru noile tipuri de calculatoare şi de aceea sunt preferate cele de tip DDR

R
pentru acces mult mai rapid la date stocate în această unitate: PC3200 (DDR400), 200MHz DDR, 3.2 GB/s;
PC2700 (DDR333), 167MHz DDR, 2.7 GB/s ; PC2100 (DDR266), 133MHz DDR, 2.1 GB/s; PC1600
(DDR200), 100MHz DDR, 1.6 GB/s.

S T
E
R
Având în vedere tipurile de memorii prezentate mai sus, este evidentă superioritatea celor de tip
DDR. In momentul de fata încep se fie folosite si memoriile DDR 2.
O tehnologie folosita la un moment dat în câteva sisteme INTEL este cea a memoriilor de tip
RAMBUS DRAM: PC1066, 533MHz DDR, 2.1 GB/s si PC800, 400MHz DDR, 1.6 GB/s.
RAMBUS a fost inventat pentru a reduce numărul de trasee pe placa de bază care să se ocupe cu
slotul de memorie; în timp ce SDRAM şi DDR foloseşte magistrale de 64 de biŃi de date, interfaŃa RDRAM
este de doar 16 biŃi de date şi lucrează la aceeaşi viteză. Dificultatile tehnologice in obtinerea frecventelor
mari au făcut ca acest model sa nu se impună.

Alte tipuri de memorii utilizate la diferite tipuri de sisteme PC mai vechi: SIMM de 30 de pini o altă
memorie de sisteme cu procesor Pentium 386 sau 486, dar mai lente ca viteză decât cele pe 72 pini; SIMM
pe 72 de pini memorie ce ajunge la PC66 (adică să lucreze până la o frecvenŃă de 66 MHz), folosite pe
vechile calculatoare de tip Pentium 486.
Pentru laptop-uri şi notebook-uri se utilizează: SODIMM memorii de tip DDR ce sunt conectate în
sloturi prevăzute cu 200 de pini; DIMM-uri micro de 144 de pini folosite în calculatoare de tip notebook;
SODIMM de 144 de pini folosite la laptop-uri.

Dispozitivele de stocare a datelor


O alta componenta care se conectează la magistrala de date a sistemului este unitatea HDD(Hard
Disk Drive). Prezentam aici aceste dispozitive din cauza similaritatii cu ale circuitele de memorie.
Deşi procesorul este componenta cu dinamica evoluŃiei cea mai importanta, componenta cea mai
„sensibila” pentru utilizator, intr-un calculator, este cea care stochează datele utilizatorului: unitatea
HDD(Hard Disk Drive). Chiar daca procesorul sau memoria pot sa aibă preŃ mai mare, datele stocate pe
HDD se pot dovedi de o valoare care depaseste cu mult valoarea hardware-ului in sine. Iată de ce
producătorii acestor dispozitive se străduiesc sa crească fiabilitatea acestor componente.
Structura unui hard-disk este o îmbinare intre elemente mecanice foarte fine si componente
electronice de vârf, care asigura controlul scrierii/citirii datelor, de aceea dispozitivul HDD reprezintă un
microsistem in sine: Are un controller, are memorie folosita pentru bufferii de scriere/citire, are magistrala

A T
care transfera datele intre magistrala sistemului si mecanismul de scriere/citire, precum si partea mecanica.
Exista dispozitive HDD conectate prin interfaŃa SCSI, EIDE, USB, PCMCIA, etc. Toate acestea se mai pot
clasifica in dispozitive externe si dispozitive interne. Fiind tot un dispozitiv de stocare a datelor, asemeni
memoriilor, multe din definiŃiile valabile pentru acestea se pot aplica si unitatilor HDD. Exista insa si
termeni specifici, care sunt prezentaŃi in continuare.
N
Seek time:

I O
Preferabil ar fi ca HDD-ul sa stocheze datele pe discurile sale intr-un mod continuu. Acest lucru nu este

T
intotdeauna posibil. De aceea datele trebuie cautate. Timpul de căutare mediu se numeste Average Seek
Time, si este definit ca media aritmetica a tuturor timpilor de căutare (timp minim, timp maxim, etc.)

IC
Valorile sunt in zona a 8ms pana la 12ms, in funcŃie de aplicaŃie si sistem de operare, dar poate fi si mai
redus (aproximativ 33%) datorita faptului ca datele pot fi plasate in foarte aproape unele de altele.

Rotation latency (rotational delay):


R
Timpul necesar pentru un sector sa se roteasca sub capul de citire se numeste rotational delay. In

T
majoritatea cazurilor latenta medie este calculata la jumatatea HDD-ului, si, de exemplu, pentru o viteza de

S
rotatie de 3600RPM, avem

E
R
Pentru accesul la informatia de pe disk exista si cateva componente mecanice: cateva milisecunde pentru
mutarea capului de citire peste track-ul dorit, si alte cateva milisecunde pentru ca sectorul dorit sa ajunga
sub capul de citire.

Transfer time:
Aceasta componenta a tipului de acces la disk reprezinta timpul necesar pentru transferul unui bloc de biti,
de obicei un sector, sub capul de citire/scriere. Acest timp depinde de dimensiunea blocului, de viteza de
rotatie, de densitatea de inregistrare si de viteza circuitelor ce conecteaza HDD la calculator. Valoarea ratei
de transfer era de 2-8MB pe secunda in 1995, 15-20 MB in 1997, 30-35 MB in 2001, si 50-60 MB in 2004.

Read ahead:
Asemenea circuitelor de memorie, transferul datelor de pe hard-disk poate fi oprimizat prin diferite tehnici.
Una dintre acestea implica citirea de pe HDD in memoria sistemului a mai multor date decat este necesar, in
speranta ca viitoarele cereri de date se vor regasi in datele deja citite. Acest procedeu se numeste read-
ahead.

Controller time:
Acest timp apare datorita faptului ca toate procesele de conectare/deconectare (I/O) si de read-ahead sunt
gestionate de un controler care introduce o anumita latenta.
Intarzierea pentru procesarea stivei de cereri (Queuing delay):
O alta componenta care se adauga la timpul de acces este timpul in care se asteapta ca stiva de cereri catre
HDD sa se elibereze.

Exemplu: Care este timpul mediu de citire sau scriere a unui sector de 512 octeti pentru un HDD? Timpul
mediu de cautare este de 9ms, rata de transfer este de 4MB/s, discurile se rotesc cu 7200RPM, controller
time este de 1ms. Se considera ca disk-ul nu este folosit, deci nu exista queuing delay.
Raspuns: Average disk access= average seek time + average rotational delay + transfer time + controller
overhead. In acest caz, avem:

Daca vom considera timpul real de căutare (aproximativ 33% din valoarea medie), răspunsul devine:
3ms+4.15ms+0.125ms+1ms=8.3ms

Densitatea de date (Areal density)

T
Industria HDD-urilor se preocupa continuu de imbunatatirea capacitatii acestora. Imbunatatiririle in
capacitate sunt exprimate de obicei prin areal density (masurata in biti /inch 2 )

A
N
In 1988 rata de imbunatatire a densitatii era de 29% pe an, deci se dubla la fiecare trei ani. Astazi, aceasta

I
de biti/inch 2 , iar in 2004 densitatea era de 50Gbiti/inch 2 .O
rata a ajuns la 60% pe an, deci este de dua ori mai mare. In 1995 cea mai mare densitate era de 644 milioane

Magistrala de adrese
T
IC
Magistrala de adrese este actualmente inclusă în magistrala de memorie şi cea a procesorului;
astfel, sistemul de magistrale al unui Pentium constă în 64 de linii de date, 32 de linii de adresă (36 la

R
Pentium Pro, Pentium II, III şi IV) şi câteva linii de control. Liniile de adresă formează magistrala de
adrese, fiind considerată parte a procesorului şi a magistralei de memorie.

S T
Magistrala de adrese este folosită pentru a indica ce adresă de memorie sau ce adresă de pe
magistrala sistemului să fie folosită într-o operaŃie de transfer de date. Magistrala de adrese indică cu
precizie unde va avea loc următorul transfer pe magistrală sau în memorie; de asemenea, controlează
spaŃiul de memorie pe care CPU îl poate adresa direct.

E
R
Magistrale de intrare/iesire
Magistrala de I/O prin conectorii de extindere de pe placa de bază fac posibilă comunicarea dintre
microprocesor şi periferice, respectiv adăugarea de noi componente la PC, cu scopul extinderii
posibilităŃilor de lucru. Se pot conecta componente cum sunt placa de sunet, placa video, interfaŃa pentru
plăcile de reŃea, adaptoarele gazdă SCSI, modem-uri etc.
Majoritatea PC-urilor au cel puŃin un controler IDE (primar şi secundar), un floppy controler, două
porturi seriale, un port paralel şi două porturi USB implementate direct pe placa de bază; la ele se pot
adăuga un port de mouse, un adaptor video, un adaptor gazdă SCSI sau o interfaŃă pentru reŃea. Dacă
sunt integrate tot în placa de bază nu ar mai fi necesare conectori pentru extensie, magistrala de I/O fiind
utilizată doar pentru comunicarea cu CPU. Indiferent dacă sunt integrate pe placa de bază sau sunt instalate
în conectori de extensie, controlerele au un comportament identic.
Actualele tipuri de magistrale folosesc o tehnologie numită bus mastering, ce constă dintr-un
adaptor cu procesor propriu ce execută operaŃii independent de CPU; în vederea măririi vitezei de
lucru. Tehnologia se bazează pe un arbitru de magistrală constituit dintr-un cip ISP (Integrated System
Peripheral) având rolul de a prelua temporar controlul total asupra sistemului, mărind astfel viteza de
execuŃie a operaŃiilor I/O.
ISP-ul determină care dispozitiv câştigă controlul folosind un nivel cu patru niveluri de prioritate:
- sistemul de reîmprospătare a memoriei;
- transferuri DMA;
- CPU-ul;
- bus master.
O placă de adaptare bus-mastering anunŃă ISP-ul când solicită controlul sistemului; ea va primi controlul
după ce au fost îndeplinite priorităŃile. Diferitele tipuri de magistrale de I/O pot fi identificate după
arhitectura lor. Principalele arhitecturi de magistrale de I/O sunt:
- ISA(Industry Standard Architecture);
- MCA (Micro Channel Architecture);
- EISA (Extended ISA);
- VESA (Vendors Electronics Standards Association) magistrală locală (magistrală VL);
- PCI (Peripheral Component Interconnect) magistrală locală;
- PC card (sau PCMCIA - Personal Computer Memory Card Industry Association);
- AGP (Accelerated Graphics Port) - interfaŃă mai curând decât magistrală video;
- SCSI (Small Computer System Interface);
- Fire Wire (IEEE-l 394);
- USB (Universal Serial Bus]
- SAS (Serial attached SCSI)
- FC (Fibre Channel)
- Ethernet etc.
A T
N
DiferenŃele dintre magistrale constau, în principal, în cantitatea de date care o pot transfera la un
moment dat şi viteza la care o pot face. Fiecare arhitectură de magistrală este implementată printr-un set
de cip-uri (chipset) conectate la magistrala procesorului şi magistrala de memorie.

I O
Magistralele de intrare/ieşire ISA, MCA şi EISA au o viteză relativ mică. Pe măsură ce viteza
magistralei CPU creştea, magistralei de intrare/ieşire îi erau aduse doar îmbunătăŃiri simbolice, în
principal prin lărgirea bus-ului (vezi tabelul de mai jos).
T
IC
Magistrală LaŃime Rată de transfer
Ceas Avantaje Dezavantaje
(bus) Bus max
Viteză redusă, jumperi şi
ISA

Micro channel
8 MHz 16-biŃi

10 MHz 32-biŃi
T R
8 Mbytes/sec
(64 Mbits/sec)
40 Mbytes/sec (240
Cost redus, compatibila, rar
utilizată

Mai rapidă decât ISA


comutatoare DIP, va fi scoasă
din uz
Scoasă din uz

PCI
133
MHz

E S
64- biŃi
Mbits/sec)
1 Gbytes/sec
(8 Gbits/sec)
Foarte rapidă, Plug & Play, Incompatibilă cu sistemele
domină piaŃa
Proiectată pentru uz
vechi, costă puŃin mai mult

R
Viteză mai redusă decât PCI,
industrial use, hot
132 Mbytes/sec (1 necesită adaptor pentru
CompactPCI 33 MHz 64- biŃi swapping/Plug & Play,
Gbit/sec) utilizare cu PC, Incompatibilă
ideală pentru sisteme
cu sistemele vechi
embedded
Viteză redusă, necesită un
20 Mbytes/sec (160 Ideală pentru laptop-uri, hot
PCMCIA 10 MHz 16- biŃi driver special pentru PC
Mbits/sec) swappable, Plug & Play
desktop
Cost redus, Ideală pentru
Mai lentă decât PCI sau
1.5 Mbytes/sec (12 laptop-uri, hot
USB 1.1 - serial Firewire, incompatibilă cu
Mbits/sec) swapping/plug & play,
periferice vechi
până la 127 unităŃi / port
Toate avantajele USB plus
incompatibilă cu periferice
60 Mbytes/sec (480 viteză mult mai mare,
USB 2.0 - serial vechi, viteză comparabilă cu
Mbits/sec) posibil de conectat
PCI
periferice audio - video

O soluŃie de arhitectură ar fi mutarea unor periferice într-o parte unde pot accesa viteza ridicată a
magistralei CPU - într-un mod asemănător cu al cache-ului extern. Modul de dispunere se numeşte
magistrală locală deoarece dispozitivele periferice pot accesa acum magistrala care era locală între CPU şi
cache-ul extern.
Sloturile magistralei locale sunt diferite de sloturile magistralei existente, pentru a evita conectarea
adaptoarelor proiectate pentru magistrale lente, în locul celor rapide.

Primele magistrale ISA de 8 biŃi şi 16 biŃi au avut o arhitectură de magistrală locală; sistemele
aveau magistrala CPU asemănătoare cu magistrala principală şi viteza tuturor componentelor era cea a
procesorului. De când sistemul ISA funcŃionează la frecvenŃe nu mai mari de 8 MHz, magistrala ISA a
trebuit să fie decuplată de la magistrala CPU deoarece plăcile de extindere, memoria şi alte componente
nu puteau Ńine pasul, în 1992 o extensie a magistralei ISA (numită Magistrala Locală VESA) şi-a făcut apariŃia
pe PC-uri, anunŃând o reîntoarcere la arhitectura de magistrală locală.
ÎmbunătăŃirile aduse de magistralele locale nu înlocuiesc vechile standarde (precum ISA); sunt
proiectate doar ca o extensie a acestora. Prin urmare, un sistem poate avea la bază un ISA sau EISA şi mai
multe sloturi de magistrale locale, cum ar fi AGP; ele sunt eficiente pentru cei ce utilizează Windows şi
OS/2, deoarece sunt folosite în special la plăcile de accelerare video pe 32 (64) biŃi.
Magistrala PCI (Peripheral Component Interconnect) apărută în iunie 1992 şi îmbunătăŃită în aprilie
1993, a reproiectat tradiŃionala magistrală PC-ului, inserând o altă magistrală între CPU şi magistrala de
I/O prin intermediul punŃilor, în locul introducerii directe în magistrala microprocesorului, a fost introdus un
nou set de chipuri de control în vederea extinderii acesteia.

A T
Magistrala PCI adaugă un nou strat configuraŃiei magistralei tradiŃionale; ea ocoleşle magistrala
standard I/O şi foloseşte magistrala sistemului pentru a mări viteza ceasului de magistrală, preluând
avantajele căii de date a CPU. Sistemele ce includ magistrala PCI au apărut la jumătatea anului 1993 şi au
devenit baza sistemelor de calcul de înaltă performanŃă.

N
InformaŃiile sunt transmise prin magistrala PCI la o frecvenŃă de 33 MHz, prin lăŃimea maximă a
magistralei de date a CPU. Când magistrala de date a CPU este 32 de biŃi, ea asigură o rată de transfer de
132 MB/s:
33 MHz x 32 biŃi = l ,056 MbiŃi/sec
I O
1,056 MbiŃi/sec : 8 = 132 Mbytes/sec.
T
Pentru magistrala pe 64 de biŃi, lungimea de bandă se va dubla, aceasta însemnând că se pot transfera date

IC
la o rată de transfer de 264 MB/sec. Viteza reală de transfer a datelor este mai mică, dar mult mai mare
decât a oricărei alte magistrale. Un motiv pentru care acest transfer este mai rapid este faptul că
magistrala PCI poate opera concurent cu magistrala microprocesorului (dar nu o înlocuieşte); astfel, CPU

ale sistemului.

T R
poate prelucra date într-un cache extern în timp ce magistrala PCI transferă informaŃii între alte componente

E S
R

Locul magistralei PCI


Un adaptor PCI foloseşte propriul său conector care este diferit de conectoarele ISA, MCA sau
EISA. Mărimea unei plăci adaptoare PCI poate fi aceeaşi cu cea a plăcilor adaptoare folosite pentru
magistrala I/O a sistemului.
Structura magistralei cuprinde trei tipuri de configuraŃii, fiecare proiectată pentru un anumit tip
de sistem în funcŃie de cerinŃele de alimentare specifice. ConfiguraŃia de 5 V este destinată PC-urilor, cea de
3,3 V pentru laptop-uri, iar configuraŃia universală este pentru plăci de bază şi plăci de extensie care
funcŃionează în ambele tipuri de sisteme.
O altă caracteristică a magistralei PCI este faptul că ea a fost modelul pentru Intel PnP (plug in
play). Aceasta înseamnă că plăcile PCI nu au jumperi şi nici comutatoare, fiind configurate prin intermediul
software-ului. Sisteme PnP sunt capabile să configureze în mod automat adaptorii, în timp ce sistemele
nonPnP cu sloturi ISA trebuie să configureze adaptorii printr-un program care este de obicei, parte a
configuraŃiei CMOS a sistemului. La finele anului 1995 cea mai mare parte a PC-urilor au inclus PnP
BIOS, care permite configurarea automată.

Industry Standard Architecture (ISA)


• introdus de IBM cu PC-ul IBM în 1984

biŃi, cât şi 16 biŃi


• avea pini în plus pentru a se putea adapta la un slot mai mare
• funcŃiona la 8 Mhz
T
• suporta iniŃial numai sloturi pe 8 biŃi; slotul ISA a fost mai târziu îmbunătăŃit pentru a suporta atât 8

A
N
• suporta bus mastering, adică capacitatea de a transfera datele de la un periferic la altul fară

O
intervenŃia procesorului sau folosirea de memorie RAM
• permitea numai o magistrală
Arhitectura Micro Channel (MCA)
• elaborată în 1987 de către IBM
T
• folosită în cele mai multe modele de IBM PS/2 şi RS/6000
I
• funcŃiona iniŃial la 10 MHz
• disponibil în versiuni de 16 şi 32 biŃi
IC
R
• suporta bus mastering pentru 16 magistrale
• permitea setarea automată cu programul disponibil de pe o dischetă de boot. Această dischetă

T
permitea interfaŃarea plăcii pentru funcŃionarea fără probleme: o primă formă de configurare

S
automată a plăcilor de extensie (PnP - plug and play).
Extended Industry Standard Architecture ( EISA )

E
• elaborat de fabricanŃii de PC pentru a concura cu magistrala MCA de la IBM
• suportă noua interfaŃă de 32 biŃi la fel ca şi MCA, dar este totodată compatibilă cu magistrala de 16
biŃi ISA
R
• viteza magistralei era limitată la 8 MHz pentru a asigura compatibilitatea cu cele de mai sus
• avea două rânduri de conectori: cel de sus pentru plăci ISA şi cel de jos pentru plăci EISA.
Conectorul de la margine era de 2 ori mai înalt şi folosea un slot mai mare
• suporta bus mastering şi permitea folosirea mai multor magistrale principale (master)
• folosea un software de configurare de la EISA, asemănător cu cel de la MCA
Softul de configurare putea să controleze numai placi EISA. Pentru a instala placi ISA trebuia să le
configurezi manual.
Magistrala locală Vendors Electronics Standards Association (VESA) sau magistrala VL
• introdusă in 1992 ca magistrală video
• oferea una sau două conexiuni de mare viteză de 32 biŃi
• cuprindea un slot de mare viteză care putea funcŃiona la aceeaşi viteză cu cea a procesorului, dar
erau compatibile numai cu plăci făcute special pentru acest slot
• nu era inclus software de instalare (ca la MCA şi la EISA)
• nu existau standarde pentru această magistrală şi problemele de compatibilitate erau curente
• noua magistrală PCI a înlocuit rapid magistrala VL
Magistrala locală PCI (Peripheral Component Interconnect)
• făcută de Intel pentru procesorul Pentium
• introdusă în 1992
• suportă viteze de până la 133 Mhz
• suportă până la 10 plăci PCI într-un singur calculator
• suportă aplicaŃii de 32 şi 64 biŃi
• suportă bus mastering şi permite mai multe magistrale master
• suportă configurarea software a plăcilor
• suportă plug and play
Magistrala Personal Computer Memory Card Industry Association (PCMCIA)
• elaborată în 1990 şi îmbunătăŃită în 1995
• creată de un grup de fabricanŃi japonezi
• cunoscută sub numele de PC card
• folosită mai întâi în laptop-uri, palmtop-uri şi alte calculatorare portabile
• făcută pentru memorie dar folosită de asemenea pentru modem-uri şi hard disk-uri
• interfaŃă iniŃială de 16 biŃi, iar mai apoi în 1995 de 32 biŃi
• Conectarea sub tensiune (hot-swappable) şi cu autoconfigurare (Card Identification Structure)
• la început nu suporta bus mastering; versiunile de după 1995 suportă
• viteza magistralei, iniŃial limitată la 6 MHz, era în 2000 limitată la 33 MHz
• disponibilă în 3 versiuni
1.
2.
Tipul 1 (gros de 3.3 mm) pentru memorie
A T
Tipul 2 (gros de 5 mm) pentru dispozitive I/O cum sunt plăcile de reŃea şi modem-urile
3. Tipul 3 (gros de 10,5 mm) pentru hard disk-uri
• plăcile mai subŃiri se vor conecta în slot-uri mai înguste N
• oferea performanŃe similare magistralei PCI
• sistemele portabile folosesc aceste tipuri de plăci
I O
T
• funcŃionează la 3,3 V pentru economie de energie electrică la laptop-uri
Accelerated Graphics Port (AGP)

IC
• destinat exclusiv magistralelor video de mare viteză
• creşte semnificativ calitatea şi viteza pentru graficele tridimensionale (3D)
• evită disputa de bandă la magistrala PCI

T R
• permite 528 MB/sec între slotul AGP şi procesorul Pentium. Prin comparaŃie, magistrala PCI are o
capacitate de 132 MB/sec care este împărŃită la toate plăcile PCI
• foloseşte memoria RAM a sistemului pentru redarea imaginilor 3D, care cer de obicei mai mult de

S
20 MB de RAM. Plăcile AGP aveau iniŃial 2 sau 4 MB de RAM
• AGP este numai pentru sisteme cu Pentium II cu chipset Intel 440LX, dar noul AGP-2 este pentru

E
toată piaŃa; AGP-2 oferă rată de transfer standard de 500MB/sec

R
Small Computer System Interface

Small Computer System Interface (SCSI)- definit de standardul ANSI X3T9.2 - este o magistrală
de date independentă care funcŃionează fară intervenŃia directă a procesorului calculatorului. Structura sa de
comandă este mai complexă decât tipurile precedente, permiŃând operaŃii multiple de citire şi scriere în
acelaşi timp. Aceasta o face ideală pentru sistemele de operare multitasking, cum ar fi Windows **. SCSI
oferă câştig clar de performanŃă atunci când este folosită în servere şi în sisteme de operare multitasking
avansate, dar operează la aproximativ aceleaşi viteze ca alte tipuri de drivere în sistemele de operare cu un
singur utilizator, cum este MS-DOS.
SCSI a fost dezvoltat ca urmare a efortului în comun între Shugart Associates, NCR şi ANSI.
Standardul ANSI SCSI-1 a apărut în 1986 şi defineşte comenzile, modurile de transfer, caracteristicile
semnalului şi lungimile de cablu agreate. Acest standard a suportat iniŃial o magistrală paralelă de 8 biŃi care
opera la 5 Mb/sec. Dispozitivele externe folosesc un singur cablu, dar cele interne pot folosi acelaşi cablu
cu conectori multipli. SCSI-2 a apărut în 1990 pentru rezolvarea problemelor de compatibilitate şi
performanŃă. Au fost oferite trei versiuni de interfaŃă SCSI-2: Fast SCSI, Wide SCSI şi Fast/Wide SCSI.
• Fast SCSI are un conector cu 50 pini si transferă câte 8 biŃi odată, adică în jur de 10Mb/sec.
• Wide SCSI transferă 16 biŃi de date odată, ceea ce înseamnă 20 Mb/sec. Conectorul are 68 pini şi
interfaŃa suportă până la 16 dispozitive.
• Fast/Wide SCSI combină ratele îmbunatăŃite de transfer cu lăŃimea mare a bus-ului de date.
Fast/Wide SCSI transferă 16 biŃi de date odată la viteze de 20 Mb/sec. Conectorul Fast/Wide are 68
pini.
SCSI este o magistrală independentă de date ce constă dintr-unul sau mai multe dispozitive SCSI şi
un adaptor gazdă. Adaptorul gazdă conferă conectarea la magistrala de date a calculatorului şi întreŃine
funcŃionarea magistralei SCSI. Magistrala suportă de asemenea mai multe adaptoare gazdă SCSI.
Similar cu alte magistrale de date, SCSI necesită ceriŃe specifice terminării si adresării pe care
trebuie să le respectaŃi în timpul instalării şi configurării. Terminarea implică instalarea rezistoarelor
electrice, sau terminatoarelor, la fiecare capăt de magistrală; astfel comenzile şi datele să pot circula
neîntrerupt de-a lungul magistralei. Terminarea corectă previne reflexia de semnal la capetele magistralei,
lucru care poate strica datele.
Toate magistralele de date cer terminaŃii electrice. Magistrala SCSI trebuie sa aibă câte o terminaŃie la
fiecare capăt al cablului pentru a evita erorile în date, performanŃă slabă a magistralei şi căderi repetate de
transmisie. Terminarea incorectă este cauza celor mai multe probleme a unei magistrale SCSI. Trebuie să
terminaŃi fiecare dispozitiv la capătul magistralei SCSI şi să deactivaŃi terminarea dacă dispozitivul este în
mijlocul magistralei.
SCSI suportă următoarele trei metode de terminare:

A T
• Terminarea pasivă este cea mai veche, mai simplă şi mai puŃin de încredere metodă. O matrice de

N
rezistoare la fiecare capăt al cablului oferă terminaŃia dorită. RezistenŃa adiŃională din partea firului
cablului sau a contactelor conectoarelor poate schimba rezistenŃa totală a terminaŃiei, suficient

O
pentru a cauza probleme când folosiŃi viteze mai mari pe magistrală.

magistralele de date.
T I
• TerminaŃia activă adaugă reglări de tensiune şi rezistoare pentru a oferi terminaŃii care simt
variaŃii minore in rezistenŃa magistralei. TerminaŃia activă este folosită la viteze mari pe

• TerminaŃia perfectă forŃată (Forced Perfect Termination – FPT) adaugă diode la regulatoarele

IC
de tensiune şi la configuraŃiile de tensiune pentru a menŃine terminarea eficientă tot timpul. FPT
elimină totodată reflexiile de semnal pe magistrala SCSI şi este metoda preferată de terminare
pentru SCSI-2 şi 3.

T R
Pentru toate tipurile de SCSI, terminarea activă oferă o terminare de magistrală mai eficientă şi inşiruirea de
comenzi permite cereri simultane de pe magistrală. ImbunătăŃirea interfeŃei SCSI a facut posibilă utilizarea
ei ca suport pentru CD-ROM-uri, scannere şi media detaşabile.

E S
Cele cinci metode de bază pentru schimbarea terminaŃiei sunt următoarele:
• Adăugarea sau eliminarea fizică a rezistoarelor din socluri sau dispozitive SCSI interne
• Schimbarea unui comutator terminal
• Eliminarea sau adăugarea conectoarelor pe dispozitive SCSI externe

R
• Utilizarea programului de setup care a fost inŃial sărit
• Nu se face nimic dacă documentaŃia spune că terminaŃia este automată pentru acel dispozitiv

Fiecare dispozitiv de pe o magistrală SCSI trebuie să aibă o adresă unică. Atunci când instalaŃi un
dispozitiv SCSI trebuie să setaŃi manual o adresă unică de la 0 la 7 pe o magistrală de 8 biŃi, sau de la 0 la
15 pe o magistrală de 16 biŃi. Cu toate că de obicei nu contează pe care din ele îl folosiŃi, atâta vreme cât
fiecare este unic, numerele cele mai mari au prioritate mai mare. Dispozitivele SCSI comunică direct între
ele, astfel că prioritatea dispozitivului nu are nici o influenŃă în performanŃă. Prioritatea numerelor de
identitate (ID) a dispozitivelor SCSI este 7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8.
Prin setarea inŃială ID pentru adaptorul gazdă SCSI este 7, ID pentru majoritatea hard discurilor este
0, iar CD-ROM-urile şi driver-ele cu bandă au 2. Unele adaptoare gazdă SCSI oricum cer ca discul de boot
să fie pe ID 0.

Magistrala SCSI trimite date electrice în următoarele două moduri:


• SCSI cu un singur capăt (Single-ended SCSI) reprezintă cea mai comună metodă; se trimite
semnalul de date printr-un fir al panglicii. Datorită faptului că panglica nu are imunitate pentru
EMI, datele se pot erona. Pentru minimizarea problemelor de interferenŃă, cablurile SCSI cu un
singur capăt sunt limitate la lungimi foarte mici care descresc pe masură ce viteza magistralei
creşte.
• SCSI diferenŃial (Differential SCSI) trimite semnalul de date prin două fire printr-un semnal cu
polarităŃi opuse pe fire. Când sistemul primeşte cele două semnale, acesta le compară. Orice
interferenŃă care ar interveni în timpul transmisiei va avea acelaşi efect şi aceeaşi polaritate pe
ambele fire. In acest mod, sistemul poate cu uşurinŃă detecta şi elimina interferenŃa. SCSI
diferenŃial suportă lungimi de cablu mult mai mari decât tipul precedent.

SCSI cu un singur capăt şi diferenŃiale sunt incompatibile. Conectarea dispozitivelor de acelaşi tip pe
aceeaşi magistrală va avea ca rezultat un defect electric instantanee la ambele dispozitive. Evident, că le
puteŃi converti pe ambele în tipul opus prin folosirea adaptoarelor.

Fire Wire
IEEE (Institute of Electrical and Electronic Engineers) şi-a propus redefinirea mediului şi metodei
transferurilor seriale pentru creşterea ratei de transfer a interfeŃei prin care sunt cuplate dispozitivele

T
periferice la PC; în acest scop au elaborat standardul IEEE-1394 pentru înlocuirea atât a porturilor seriale
cât şi a porturilor paralele, a porturilor SCSI şi chiar a adaptoarelor video. Standardul IEEE-1394 a utilizat o

A
nouă tehnologie de magistrală numită Fire Wire, foarte rapidă, ce poate atinge o rată de transfer de 100
Mb/s, 200 Mb/s şi 400 Mb/s, rate solicitate în special de dispozitivele multimedia audio şi video. La un

N
adaptor IEEE-1394 pot fi cuplate în cascadă un număr de 63 de dispozitive periferice; conectarea la placa
de bază se poate realiza fie printr-o interfaŃă dedicată IEEE-1394, fie printr-un adaptor PCI. Tehnologia

I O
elaborată se bazează pe o combinaŃie dintre tehnologia serială a portului RS-232C, cu facilităŃile
protocoalelor SCSI, cu viteza magistralei locale şi cu facilitatea racordării plăcilor MIDI.
Majoritatea plăcilor PC oferite de Adaptec, FAST Multimedia, Matrox şi altele, includ în prezent

T
editarea şi captarea video digitală; conexiunile IEEE-1394 sunt încă o raritate pe plăcile de bază prezente
(Adaptec şi Texas Instruments oferă plăci adaptoare cu suporturi IEEE-1394).

IC
USB (Universal Serial Bus) înlătură dezavantajele menŃionate, asigurând o rată de transfer de 1,5

T R
Mb/s, 12 Mb/s, respectiv 480 Mb/s şi posibilitatea connectării a până la 127 de dispozitive periferice printr-
un singur cablu. Introdus în 1996, USB furnizează mecanismul de bază pentru conectarea majorităŃii
dispozitivelor periferice, introducând o tehnologie proprie şi o terminologie adecvată. USB divide
componentele seriale în două clase numite hub (centru) şi funcŃii :
-
-

E S
centrele (hub-urile) furnizează suportul prin care se pot cupla funcŃiile;
funcŃia este reprezentată de orice dispozitiv care poate fi cuplat la PC, incluzând tastaturi, mouse-
uri, modemuri, plotter-e, scannere, imprimante şi altele.

R
USB acŃionează ca o magistrală ce permite o mare varietate de dispozitive (periferice) conectate la
PC, partajând toate dispozitivele cuplate prin aceleaşi semnale. InformaŃiile ce se transferă pe magistrală
sub formă de pachete pot fi recepŃionate de toate funcŃiile; pentru accesul unei anumite funcŃii PC-ul va
adăuga adresa corespunzătoare la pachetul emis, astfel că pachetul va fi recepŃionat numai de funcŃia care
are adresa specificată.
Suportul fizic al USB este un port, un conector ce aparŃine unui hub (centru); fiecare port
conectează un singur dispozitiv, în timp ce hub-ul include mai mulŃi conectori pentru cuplarea mai multor
dispozitive.
În acest context, PC-ul acŃionează asemănător unui hub de bază, numindu-se gazdă (host);
circuitul din PC care controlează acest centru de bază şi sistemul USB se numeşte controlerul de
magistrală (fiecare USB include un singur controler). Pentru a putea să lucreze, hardware-ul USB necesită
un protocol USB ce constituie partea cea mai complexă a proiectării USB; acesta limitează numărul
funcŃiilor cuplate la magistrală la 127, datorită celor şapte biŃi care constituie adresa fiecărei funcŃii (27 =
128), una fiind rezervată. Lungimea maximă a cablului USB poate fi de cinci metri.
Pe de altă parte, USB solicită un suport software specific; orice unitate cu un conector USB are
integrat software-ul din construcŃie. La rândul său, sistemul de operare trebuie să dispună de driver-ele
corespunzătoare fiecărei funcŃii instalate, drivere care creează comenzile sau pachetele de date pentru
fiecare dispozitiv; de asemenea, va conŃine un driver USB care furnizează o serie de servicii. CPU
furnizează canalul (pipe) pentru dirijarea datelor către diferitele funcŃii.
Aşa cum s-a menŃionat anterior, transferul de date pe magistrala USB se realizează în pachete:
Câmp de Identificator al
Date Control erori
sincronizare 8 pachetului
0-1032 bytes 16 biŃi
biŃi 8 biŃi

Structura generică a pachetului de date USB

2.DISPOZITIVELE PERIFERICE

Perifericele de intrare cuprind:


• tastatura permite introducerea manuală a datelor sau comenzilor;
• mouse-ul facilitează operarea la calculator prin pozitionări, selectări de informatii,
actionarea asupra unor obiecte de control si optiuni de meniu;
• scanner pentru introducerea imaginilor în sistemul birotic, unde vor fi retinute pe
principii digitale;
• microfon si interfată pentru sunet pentru captarea directă de dispozitii si mesaje,
comentarii si rapoarte, interviuri, tratative, conferinte etc.
A T
• cameră de luat vederi si interfată audio-video compatibilă pentru înregistrarea imaginilor
si transformarea lor în formă digitală;
N
• cititorul de CD (DVD) preia, pe principii optice, informatiile de pe discuri compacte (optice);

I O
• lectorul optic de microfilme si interfată specifică transferă imaginile documentelor înregistrate optic pe
peliculă sub formă de microfilm (eventual din arhiva electronică), astfel încât acestea să poată fi proiectate si
pe monitorul calculatorului.
T
Perifericele de iesire cuprind:

IC
• monitorul alb-negru sau color, care asigură afisarea informatiilor (ca interfată fizică se utilizează placa
video);

T R
• imprimanta pentru tipărirea (alb-negru sau color) a datelor, textelor / documentelor sau imaginilor;
• plotter-ul pentru trasarea de schite, planuri, desene de specialitate alb-negru sau color;
• inscriptorul de CD-uri permite scrierea de informatii pe discurile compacte optice;

E S
• interfată audio pentru transmitere de sunete (memorate sau în curs de receptie) în retele locale sau la distantă.
Se pot folosi dispozitive electronice de tipul amplificatoarelor de sunet, difuzoarelor (speaker pentru
calculator), incintelor acustice. Speaker-ul calculatorului emite mesaje si alte informatii sonore;

R
• videoproiector - care preia imaginile ce s-ar afisa pe monitor si le proiecteză pe un ecran;
• imprimanta pentru microfilm si interfata sa permite transferul documentelor din memoria internă a
calculatorului pe suportul specific, integrat în arhiva electronică.

Perifericele de intrare-iesire cuprind:


• unităti de suporturi magnetice (discuri fixe, flexibile, dischete de ZIP pentru memorarea digitală, sub formă
de fisiere, a unor tipuri diverse de date: numerice, texte / documente, sunete, imagini. În functie de natura
informatiei continute si modul de creare, fisierele vor avea tipuri specifice (documente, imagini, sunete etc.),
ceea ce se va reflecta în numele lor (extensie). Fiecare tip de fisier va si prelucrat de un produs soft specific.
• unităti audio-analogice de bandă magnetică si interfata lor - sunt echipamente electronice, de uz larg sau
profesionale, destinate înregistrării, stocării si redării informatiei sonore sub formă analogică. Este vorba
despre casetofoane, magnetofoane, reportofoane, dictafoane care folosesc casete si benzi magnetice.
• unităti video-analogice si interfata lor cu sistemul informatic sunt echipamente electronice de tip video
cu ajutorul cărora se poate înregistra pe banda magnetică specifică informatie audiovizuală; aceasta se
poate ulterior prelucra si reda cu echipamente de tip videoplayer / videorecorder.
• aparat telefonic si interfată telefonică pentru:
o receptarea mesajelor sonore comunicate analogic sau digital si înregistrarea lor digitală
o transmitere de mesaje înregistrate direct sau sub formă de fisiere digitale
• aparat telefax si interfată telefax pentru:
o receptionarea mesajelor fax, tipărirea lor directă la imprimanta fax si eventual înregistrarea lor digitală
o transmiterea la distantă a documentelor de tip fax, în regim imediat (direct din document) sau memorat
(prin lectura documentului din memoria internă sau externă a calculatorului)
• telecopiator cu:
o interfată de intrare pentru receptionarea, locală sau la distantă, a imaginilor de tip document
o interfată de iesire pentru transmiterea, către un copiator, situat local sau la distantă (prin retele de
comunicatii), a unor imagini (documente) memorate digital
• interfată video pentru:
o receptionarea imaginilor si secventelor sonore transmise prin retele locale de televiziune cu circuit închis
sau retele TV la distantă
o transmiterea de imagini si sunete prin aceleasi tipuri de retele

Întreruperile
Atunci când primim date la unul din porturile calculatorului, exista doua metode pentru a citi starea
acestora:

A T
o Prima metoda implica testarea la intervale regulate a intrărilor pentru a determina daca au apărut
date. In cazul in care detectam o schimbare de stare a portului, consideram ca s-au primit date si
iniŃiem procedura de citire a acestora din port. Metoda este mai simpla, dar implica folosirea

N
continua a procesorului, luând din timpul acestuia, care putea fi folosit pentru rezolvarea altor
procese si calcule.

I O
o A doua metoda consta in folosirea întreruperilor. Acum procesorul isi desfăşoară activitatea in mod
normal, si doar când se primesc date in port atenŃia acestuia este directionata pentru preluarea

T
datelor. AtenŃionarea se face prin emiterea unei cereri de întrerupere. In momentul in care aceasta
este primita, procesorul termina executarea instrucŃiunii curente, plasează in stiva adresele si datele,

IC
si trece la executarea rutinei de tratare a întreruperii (Interrupt Service Routine - ISR), care poate
prelua datele din port si le plasează intr-un buffer. După terminarea tratării întreruperii procesorul
reia lucrul de unde a rămas. Metoda este mai grea din punct de vedere al programatorului, insa

Întreruperile si arhitectura INTEL


T R
procesorul nu mai pierde timp in scanarea portului.

E S
Întreruperile nu trebuie asociate in întregime cu dispozitivele de intrare/iesire. Familia 8086 asigura
256 de întreruperi, multe din acestea exclusive de tip software.
Seria 8086 de microprocesoare are Tabela vectorilor de întreruperi la adresa 0000:0000 si se întinde

00 - 01
R
pe 1024 octeŃi. Tabela conŃine adresele rutinelor de tratare a întreruperilor -Interrupt Service Routines
(ISR), toate de 4 octeŃi lungime.
INT (Hex) IRQ
Exception Handlers
Common Uses
-
02 Non-Maskable IRQ Non-Maskable IRQ (Parity Errors)
03 - 07 Exception Handlers -
08 Hardware IRQ0 System Timer
09 Hardware IRQ1 Keyboard
0A Hardware IRQ2 Redirected
0B Hardware IRQ3 Serial Comms. COM2/COM4
0C Hardware IRQ4 Serial Comms. COM1/COM3
0D Hardware IRQ5 Reserved/Sound Card
0E Hardware IRQ6 Floppy Disk Controller
0F Hardware IRQ7 Parallel Comms.
10 - 6F Software Interrupts -
70 Hardware IRQ8 Real Time Clock
71 Hardware IRQ9 Redirected IRQ2
72 Hardware IRQ10 Reserved
73 Hardware IRQ11 Reserved
74 Hardware IRQ12 PS/2 Mouse
75 Hardware IRQ13 Math's Co-Processor
76 Hardware IRQ14 Hard Disk Drive
77 Hardware IRQ15 Reserved
78 - FF Software Interrupts

Pe un PC, 15 întreruperi sunt hardware si inca o întrerupere care este nemasacabila. Restul
vectorilor de întrerupere sunt folosiŃi pentru întreruperi software si tratarea exceptiilor (exception handlers).
Rutinele de tratare a excepŃiilor intervin cand are loc o eroare. Un exemplu de astfel de întrerupere e
reprezentat de primul vector de întrerupere, care conŃine adresa pentru eroarea Divide By Zero. Daca o
astfel de eroare apare, microprocesorul începe execuŃia codului care se gaseste la adresa 0000:0000.

T
Întreruperile Hardware

A
Programmable Interrupt Controller (PIC) este cel care tratează întreruperile hardware. Majoritatea
PC-urilor au doua, plasate la adrese diferite. Una dintre ele tratează IRQ de la 0 la 7 si cealaltă IRQ de la 8

N
la 15, dând in total 15 linii IRQ individuale, deoarece al doilea PIC este cascadat primului, folosind IRQ2.
Cea mai mare parte a initializarii PIC-urilor se face de către BIOS, deci nu trebuie sa avem grija

I O
decât de doua instrucŃiuni. PIC are facilitatea de mascare a IRQ-urilor individuale, astfel încât acestea sa nu
ajungă la procesor. Prin urmare prima instrucŃiune este Operation Control Word 1 (OCW1) care setează
care IRQ sunt mascate si care nu.

T
Deoarece sunt doua PIC-uri plasate la doua adrese diferite, trebuie sa determinam care PIC trebuie

IC
folosit. Primul este l adresa de baza 0x20h si controleaza IRQ 0 pana la 7. Formatul Operation Control
Word 1 este mai jos.
Bit Disable IRQ Function
7
6
5
IRQ7
IRQ6
IRQ5
T R Parallel Port
Floppy Disk Controller
Reserved/Sound Card
4
3
2
S
IRQ4

E
IRQ3
IRQ2
Serial Port
Serial Port
PIC2
1
0
R IRQ1
IRQ0
Keyboard
System Timer
Daca se dezactivează IRQ 2 la care e conectat PIC2, dezactivam implicit întreruperile 8-15. Al
doilea PIC este localizat la adresa de baza 0XA0h si controlează IRQ 8- 15. Formatul Operation Control
Word este prezentat in continuare.
Bit Disable IRQ Function
7 IRQ15 Reserved
6 IRQ14 Hard Disk Drive
5 IRQ13 Maths Co-Processor
4 IRQ12 PS/2 Mouse
3 IRQ11 Reserved
2 IRQ10 Reserved
1 IRQ9 Redirected IRQ2
0 IRQ8 Real Time Clock
Pentru a activa un IRQ, acesta trebuie inversat fata de tabelul de mai sus. De exemplu, activarea lui
IRQ 3 se face prin trimiterea octetului 0xF7 ca OCW1 la PIC1.
Pentru a nu afecta alte IRQ-uri deja activate, se foloseşte mascarea. De exemplu, pentru acelaşi caz,
putem folosi pentru activare:
outportb(0x21,(inportb(0x21) & 0xF7);
OCW1 se trimite pe adresa de baza +1.
Aceeaşi procedura se aplica pentru dezactivarea unui IRQ. FuncŃia aplicata in acest caz este insa
OR la continutul OCW1. De exemplu : outportb(0x21,(inportb(0x21) | 0x08);
Cealalta instrucŃiune PIC de care trebuie sa avem grija este End of Interrupt (EOI). Ea este trimisa
către PIC la sfarsitul rutinei de tratare a întreruperii, pentru ca acesta sa poata reseta registrul In Service
Register. EOI se poate trimite folosind outportb(0x20,0x20); pentru PIC1 sau outportb(0xA0,0x20); pentru
PIC2.

Programmable Interrupt Controller

T
Aşa cum am discutat cererile de întreruperi (Interrupt ReQuests - IRQ's) ale PC-ului sunt tratate de
doua 8259 Programmable Interrupt Controller. Daca la inceputul dezvoltarii PC-urilor, PIC-urile erau
externe, in modelele mai noi acestea sunt integrate in chipset.
A
N
I O
T
IC
T R
E S
R
Aceasta este diagrama PIC, in care se observa 8 linii separate de cereri de întreruperi care intra in
Interrupt Mask Register (IMR) pentru a vedea daca sunt mascate sau nu. Daca sunt mascate, cererile nu mai
sunt procesate in continuare. Daca nu sunt mascate, cererea este înregistrata de Interrupt Request Register
(IRR).
Registrul Interrupt Request Register tine toate cererile IRQ pana când acestea sunt tratate. Daca este
necesar, registrul poate fi citit prin setarea unor biŃi in cuvântul de control Operation Control Word 3.
Priority Resolver este cel care selectează IRQ cu prioritatea maxima. Întreruperile cu numar mic sunt
prioritare (ex. IRQ0 este prioritar fata de IRQ1)
Dupa determinarea cărui IRQ trebuie procesat, procesorul trebuie atentionat sa execute ISR. Acest
proces este executat prin trimiterea unei cereri INT catre procesor (prin activarea liniei INT a procesorului).
Procesorul va termina instrucŃiunea care este executata, apoi va confirma primirea cererii prin trimiterea
unui puls INTA (Interrupt Acknowledge).
La primirea INTA de la procesor, IRQ-ul procesat de PIC este stocat in registrul In Service Register
(ISR) care indica ce IRQ este tratat in prezent. In acest moment bitul IRQ-ului din IRR este resetat pentru
ca intreruperea nu mai este in stadiul de cerere ci este deja tratata.
Un alt puls INTA este trimis de procesor pentru a semnaliza PIC-ul sa plaseze un pointer de 8 biti pe bus-ul
de date, corespunzand numarului IRQ-ului. Daca trebuie tratat un IRQ de catre PIC2 atunci acesta trebuie
sa trmita pointerul catre procesor. PIC1 va selecta PIC2 pentru a trimite pointerul prin plasarea identitatii
PIC2 pe liniile de cascadare dintre PIC-uri (aceeste linii constau intr-o magistrala compusa din 3 linii).
Cei mai semnificativi 5 biti ai acestui pointer sunt initializati prin Initialization Command Word 2
(ICW2). Acestia sunt 00001 pentru PIC1 si 01110 pentru PIC2. Ultimii 3 biti sunt setaŃi in functie de ce
IRQ trebuie tratat. De exemplu, daca IRQ3 cere tratare, atunci pointerul va fi compus din 00001 pentru
primii 5 biti si 011 pentru ultimii trei, echivalând cu 0x0B care este chiar vectorul de întreruperi al lui IRQ3.
Pentru PIC2, daca IRQ10 cere tratare, atunci 01110010 va fi trimis, reprezenand 72h. IRQ10 este
conectat la IR2 din PIC2, deci 010 sunt folosiŃi pentru cei mai puŃin semnicativi biŃi.
După ce ISR se termina, trimite un EOI (End of Interrupt), care reseteaza In Service Register. Daca cererea
provine de la PIC2, atunci EOI trebuie trimis către ambele PIC-uri.
PIC-ul trece apoi la reluarea procesului pentru întreruperea cu prioritatea cea mai mare. Daca nu
mai exista cereri de întreruperi, PIC asteapta pentru apariŃia uneia.

Redirectarea IRQ2/IRQ9

Redirectarea lui IRQ2 poate cauza unele confuzii. In calculatoarele XT originale exista un singur
PIC, deci doar 8 IRQ-uri. Cum acestea nu mai erau suficiente si cum se dorea pastrarea compatibilitatii cu
hardware-ul deja existent, se propune noua configuratie, ca in continuare:
Procesorul are o singura linie pentru întreruperi,

A T
deci al doilea controler trebuia conectat la primul intr-o
configuraŃie master/slave. Pentru aceasta a fost selectat
IRQ2. Dispozitivele care foloseau pana atunci IRQ 2 au

N
fost redirectionata către IRQ9, deoarece nici un dispozitiv
nu mai folosea aceasta întrerupere.

O
O alta problema era ca dispozitivele care foloseau

T I
IRQ2 instalau ISR la INT 0x0A. Prin urmare s-a folosit o
rutina ISR la adresa 71h, care trimite EOI către PIC2 si
apoi cheamă ISR la INT 0x0A. In limbaj de asamblare,
secventa este urmatoarea:

IC
MOV AL,20
OUT A0,AL ; Send EOI to PIC2
INT 0A ; Call ISR for IRQ2

T R IRET
Rutina trebuie doar sa trimita EOI catre PIC2,
pentru ca se stie ca o rutina ISR scrisa pentru IRQ2 va

E S trimite EOI la PIC1. Acest exemplu distruge conŃinutul


AL, care trebuie salvat in stiva. Deoarece PIC2 este
iniŃializat ca slave prin IRQ2, orice cerere folosind PIC2 nu va activa ISR pentru IRQ2. Pointerul de 8 biŃi
este asigurat de PIC2.

R
Adresele PIC (Programmable Interrupt Controller)

Cele doua PIC-uri din calculator sunt initializate de BIOS, deci nu trebuie sa avem aceasta grija.
Totuşi listam mai jos cuvintele de comanda pentru 8259 PIC si cele compatibile. Primul tabel este pentru
PIC1, al doilea pentru PIC2.
Address Read/Write Function
Write Initialization Command Word 1 (ICW1)
Write Operation Command Word 2 (OCW2)
20h Write Operation Command Word 3 (OCW3)
Read Interrupt Request Register (IRR)
Read In-Service Register (ISR)
Write Initialization Command Word 2 (ICW2)
Write Initialization Command Word 3 (ICW3)
21h
Write Initialization Command Word 4 (ICW4)
Read/Write Interrupt Mask Register (IMR)
Pentru PIC2:
Address Read/Write Function
Write Initialization Command Word 1 (ICW1)
Write Operation Command Word 2 (OCW2)
A0h Write Operation Command Word 3 (OCW3)
Read Interrupt Request Register (IRR)
Read In-Service Register (ISR)
Write Initialization Command Word 2 (ICW2)
Write Initialization Command Word 3 (ICW3)
A1h
Write Initialization Command Word 4 (ICW4)
Read/Write Interrupt Mask Register (IMR)

Initialization Command Word 1 (ICW1)

Daca PIC-ul a fost resetat, trebuie iniŃializat cu 2 pana la 4 cuvinte de iniŃializare (Initialization Command

Bit(s)
7:5
Function
Interrupt Vector Addresses for MCS-80/85 Mode.
T
Word), înainte de a incpe procesarea IRQ-urilor. Iată cele patru posibile cuvinte de iniŃializare (ICW):

A
4 Must be set to 1 for ICW1
N
O
1 Level Triggered Interrupts
3

2
0
1
0
Edge Triggered Interrupts
Call Address Interval of 4
Call Address Interval of 8
T I
IC
1 Single PIC
1
0 Cascaded PICs

0
1
0

T R
Will be Sending ICW4
Don't need ICW4
PIC 8259 ofera multe functii care nu sunt folosite in PC, in special pentru microprocesoare MCS-

S
80/85. Tot ce trebuie sa urmărim este daca sistemul nostru ruleaza in modul single (cu un PIC) sau in modul
cascadat (cu doua PIC-uri) si daca ICW 4 mai este necesar. Pentru PC acesta este necesar.

E
R
Initialization Command Word 2 (ICW2)

Bit 8086/8080 Mode MCS 80/85 Mode


7 I7 A15
6 I6 A14
5 I5 A13
4 I4 A12
3 I3 A11
2 - A10
1 - A9
0 - A8

ICW 2 selectează care informaŃie despre vector este trimisa pe bus in timpul celui de al doilea puls
INTA. In modul 8086, doar bitii 7:3 sunt folosiŃi. Acestia sunt 00001000 (0x08) pentru PIC1 si 01110000
(0x70) pentru PIC2. Daca se doreşte relocarea Tabelei Vectorilor de Întreruperi, atunci folosiŃi acest
registru.
Initialization Command Word 3 (ICW3)

Exista doua ICW3 diferite, unul pentru PIC master si celalalt pentru PIC slave.
Bit Function (master)
7 IR7 is connected to a Slave
6 IR6 is connected to a Slave
5 IR5 is connected to a Slave
4 IR4 is connected to a Slave
3 IR3 is connected to a Slave
2 IR2 is connected to a Slave
1 IR1 is connected to a Slave
0 IR0 is connected to a Slave
Pentru PIC slave, este folosit:
Bit(s) Function (slave)
7
6
5
Reserved. Set to 0
Reserved. Set to 0
Reserved. Set to 0 A T
4 Reserved. Set to 0
N
3
2:0
Reserved. Set to 0
Slave ID
I O
000
001
Slave 0
Slave 1
T
010
011
Slave 2
Slave 3
IC
100
101
Slave 4
Slave 5

T R
S
110 Slave 6
111 Slave 7

E
Initialization Command Word 4 (ICW4)

Bit(s)
R
Multe din functiile cestuia nu sunt folosite in PC. Trebuie doar setat modul 8086/8080 prin bitul 0.
Function
7 Reserved. Set to 0
6 Reserved. Set to 0
5 Reserved. Set to 0
1 Special Fully Nested Mode
4
0 Not Special Fully Nested Mode
3:2 0x Non - Buffered Mode
10 Buffered Mode - Slave
11 Buffered Mode - Master
1 Auto EOI
1
0 Normal EOI
1 8086/8080 Mode
0
0 MCS-80/85
Operation Control Word 1 (OCW1)

Dupa ce ICW-urile au fost trimise către PIC, se pot trimite cuvintele de control - Operation Control Words,
in orice ordine si in orice moment către PIC. Acestea sunt prezentate in continuare.
Bit PIC 2 PIC 1
7 Mask IRQ15 Mask IRQ7
6 Mask IRQ14 Mask IRQ6
5 Mask IRQ13 Mask IRQ5
4 Mask IRQ12 Mask IRQ4
3 Mask IRQ11 Mask IRQ3
2 Mask IRQ10 Mask IRQ2
1 Mask IRQ9 Mask IRQ1
0 Mask IRQ8

Operation Control Word 2 (OCW2)

A
interes este comanda EOI non-specifica, care trebuie trimisa la sfarsitul ISR.
T
Acest cuvânt selecteaza cum functioneaza procedura EOI (End of Interrupt). Singurul lucrul care prezintă

N
Bit(s) Function
7:5 000 Rotate in Auto EOI Mode (Clear)
001 Non Specific EOI
010 Reserved
I O
011 Specific EOI
100 Rotate in Auto EOI Mode (Set)
T
IC
101 Rotate on Non-Specific EOI
110 Set Priority Command (Use Bits 2:0)

4
3
Must be set to 0
Must be set to 0
T R
111 Rotate on Specific EOI (Use Bits 2:0)

2:0

S
000 Act on IRQ 0 or 8
001 Act on IRQ 1 or 9

E
010 Act on IRQ 2 or 10

R
011 Act on IRQ 3 or 11
100 Act on IRQ 4 or 12
101 Act on IRQ 5 or 13
110 Act on IRQ 6 or 14
111 Act on IRQ 7 or 15

Operation Control Word 3 (OCW3)

BiŃii 0 si 1 ne dau posibilitatea să citim Interrupt Request Register (IRR) si In-Service Register
(ISR). Citirea registrului se face la adresa de baza. De exemplu, pentru citirea ISR, trebuie setaŃi amândoi
biŃii in 1 si apoi următoarea citire din registru (0x20 pentru PIC1 sau 0xA0 penrtu PIC2) returnează starea
ISR (In-Service Register).
Bit(s) Function
7 Must be set to 0
6:5 00 Reserved
01 Reserved
10 Reset Special Mask
11 Set Special Mask
4 Must be set to 0
3 Must be set to 1
1 Poll Command
2
0 No Poll Command
1:0 00 Reserved
01 Reserved
10 Next Read Returns Interrupt Request Register
11 Next Read Returns In-Service Register

A T
N
I O
T
IC
T R
E S
R
ECHIPAMENTE PERIFERICE

A T
N
Laborator 2 I O
T
IC
T R
E S
R

Universitatea din Piteşti


Introducere

Portul paralel este cel mai folosit port pentru conectarea machetelor de dezvoltare.
Portul permite 9 biţi de intrare si 12 biţi de ieşire, prin aceasta reducând necesarul de circuite
externe pentru implementarea multor sarcini simple. Portul este compus din 4 linii de control, 5
linii de stare si 8 linii de date. Portul se prezintă sub forma unui conector tip D cu 25 de pini.
Porturile mai noi sunt standardizate sub standardul IEEE 1284 care a apărut in 1994. Acest
mod defineşte 5 moduri de operare:
• Mod compatibilitate
• Mod nibble
• Mod Octet
• EPP - Enhanced Parallel Port
• ECP - Extended Capabilities Mode

A T
Scopul acestora este proiectarea de noi driveri si dispozitive periferice compatibile intre
ele precum si compaatibile cu SPP (Standard Parallel Port). Modurile compatibilitate, Nibble
& Byte folosesc doar hardware-ul original din portul paralel, in vreme ce modurile ECP si EPP

N
necesita hardware specializat care poate rula la viteze mai mari, păstrând compatibilitatea cu
SPP.

I O
Modul compatibilitate (Centronics) poate trimite date doar a viteza maxima de 50kB pe
secunda dar poate atinge 150kB pe secunda. Pentru a recepţiona date, trebuie schimbat modul

T
in Nibble sau Byte. Nibble poate recepţiona 4 biţi (catre PC). Modul Byte foloseşte funcţia
bidirecţionala pentru a receptiona 8 biţi.

IC
Modurile ECP si EPP folosesc hardware adiţional pentru generarea si administrarea
handshaking. Pentru a scoate un octet (de exemplu către imprimanta) folosind modul

• Scriere octet in portul de date


T R
compatibilitate, software-ul trebuie sa urmeze etapele:

• Verificare daca imprimanta este ocupata. In acest caz, daca se trimit date, acestea se
pierd.
S
• Trecere pin Strobe (pinul 1) in starea low. Acesta semnalizează imprimanta ca datele
E
plasate pe linii de date (pinii 2-9) sunt cele corecte

R
• Plasare pin Strobe in starea high după aproximativ 5 us de la plasarea in starea low.
Aceasta limitează viteza la care poate rula portul. Pentru a evita acest lucru, modurile ECP si
EPP lasă hardware-ul sa verifice daca imprimanta este ocupata, si sa genereze semnalele
corecte de Strobe. Acest lucru înseamnă ca doar o instrucţiune trebuie executata, deci viteza
creste. Aceste porturi pot transfera 1-2MB pe secunda. Portul ECP are in plus avantajul de a
folosi canalele DMA si bufferii FIFO, astfel încât datele pot fi transportate fara folosirea
instrucţiunilor de I/O.

Proprietăţile hardware

Mai jos este prezentat un tabel cu pinii portului D-25 si cei ai conectorului Centronics 34.
Conectorul cu 25 de pini este cel mai folosit in calculatoare, in vreme cel Centronics se
intilneste mai ales la imprimante. Conectorii sunt specificaţi de standardul IEEE 1284, si sunt
de trei tipuri: tipul A – cel cu 25 de pini; tipul B – cel Centronics; tipul C- un conector mai mic,
cu 36 de pini, recomandat pentru proiecte noi, dar care nu s-a impus.
Direction Hardware
Pin No (D-Type 25) Pin No (Centronics) SPP Signal Register
In/out Inverted
1 1 nStrobe In/Out Control Yes
2 2 Data 0 Out Data
3 3 Data 1 Out Data
4 4 Data 2 Out Data
5 5 Data 3 Out Data
6 6 Data 4 Out Data
7 7 Data 5 Out Data
8 8 Data 6 Out Data
9 9 Data 7 Out Data
10 10 nAck In Status
11
12
13
11
12
13
Busy
Paper-Out / Paper-End
Select
In
In
In

A TStatus
Status
Status
Yes

N
14 14 nAuto-Linefeed In/Out Control Yes
15 32 nError / nFault In Status

IO
16 31 nInitialize In/Out Control
17 36 nSelect-Printer / nSelect-In In/Out Control Yes

T
18 - 25 19-30 Ground Gnd

Tabelul de mai sus foloseşte n in fata denumirii semnalului pentru a indica faptul ca

IC
semnalul este activ low. De exemplu, daca la imprimanta a avut loc o eroare, atunci linia
nError trece in zero. Daca imprimanta funcţionează corect, linia este in starea high. „Hardware
inverted” înseamnă ca semnalul este inversat de hardware-ul portului paralel. Un exemplu in

T R
acest sens este semnalul Busy. Daca +5V se aplica pe acest pin si registrul de stare este citit,
acesta va indica 0 in bitul 7 din registrul de stare(Status Register).
Iesirea portului paralel este conforma nivelului TTL de tensiune. Curentul oferit variaza

E S
de la port la port. Majoritatea porturilor paralele implementate in ASIC ofera maxim 12mA.
Alte valori luate din cataloage sunt urmatoarele: Sink/Source 6mA, Source 12mA/Sink 20mA,
Sink 16mA/Source 4mA, Sink/Source 12mA. Deoarece aceste valori sunt destul de diferite, se

R
recomanda folosirea bufferilor pentru interfatarea cu portul paralel.

1. Standardul Centronics

Acesta este unul din primele standarde


apărute pentru transferul de date intre PC si
imprimanta. Majoritatea imprimantelor folosesc
acest protocol pentru handshake. Acesta este in
mod normal implementat folosind SPP si control
software. Schema protocolului este reprezentata
mai jos.

Datele se aplica mai intai pe pinii portului


paralel 2 pana la 7. PC-ul verifica daca
imprimanta este ocupata (urmareste daca Busy
este low), apoi trebuie acţionat strobe (in starea low), se asteapta 1 us, si se actioneaza strobe
din nou (in starea high). Datele se citesc de obicei de catre imprimanta pe frontul crescator al
pulsului de Strobe. Odata ce imprimanta a acceptat datele, aceasta trimite o confirmare printr-
un puls negativ de aproximativ 5 us pe linia nAck.
De multe ori PC-ul ignora nACK pentru a reduce timpul. Atunci cand se va discuta
modul ECP, exista un Fast Centronics Mode care executa procesul de handshake fara a mai fi
nevoie de interventia programatorului. Tot ce trebuie sa facă acesta este sa scrie datele catre
portul I/O. Hardware-ul urmareste daca imprimanta este ocupata, si generează pulsul de Strobe.

Adresele porturilor

Portul paralel are trei adrese de baza folosite in mod curent. Adresa 3BCh a fost
introdusa pentru portul paralel prezent pe primele placi video. Aceasta adresa a dispărut pentru
un timp, când placile video nu au mai fost proiectate cu porturi paralele, insa au reapărut cu
plăcile de baza care pot modifica adresele din BIOS.
T
LPT1 foloseşte de obicei adresa de baza 378h, in vreme ce LPT2 foloseste adresa 278h.
Adresele se pot modifica de la o maşina la alta.
A
Address
3BCh - 3BFh
Notes:
N
Folosita pentru porturi paralele incorporate in placi video; nu suparta adrese ECP
378h - 37Fh
278h - 27Fh
Adresa uzuala pentru LPT 1
Adresa uzuala pentru LPT 2
I O
T
Atunci cand porneste computerul, BIOS-ul (Basic Input/Output System) determina

IC
numarul de porturi, si le asociaza etichetele LPT1, LPT2, LPT3. Prima adesa cautata este
3BCh. Daca este găsită, atunci i se asociază eticheta LPT1, după care incepe cautarea adresei
378h, apoi 278h, procedând in mod similar. Iată ca este posibil ca portul LPT2 sa nu fie gasit la

alegerea adresei porturilor paralele.


T R
adresa 278h, ci la adresa 378h. In plus anumiţi producători plasează comutatoare care permit

Pentru usurintă, se vor consulta tabelele oferite de BIOS pentru a afla adresa portului

S
paralel. Atunci când acesta aloca adrese dispozitivelor paralele, ele sunt stocate la locaţii

E
pricise in memorie, deci pot fi gasite.
Start Address Function

R 0000:0408
0000:040A
0000:040C
LPT1's Base Address
LPT2's Base Address
LPT3's Base Address
0000:040E LPT4's Base Address (Note 1)
Fiecare adresa ocupa doi octeti. Programul următor arata cum se pot citi aceste adrese ale
porturilor paralele.
#include <stdio.h>
#include <dos.h>

void main(void)
{
unsigned int far *ptraddr; /* Pointer catre locatie Adresa Port*/
unsigned int address; /* Adresa Port */
int a;

ptraddr=(unsigned int far *)0x00000408;

for (a = 0; a < 3; a++)


{
address = *ptraddr;
if (address == 0) printf("Nu am gasit port pentru LPT%d \n",a+1);
else printf("Adresa desemnata pentru LPT%d este %Xh\n",a+1,address);
*ptraddr++;
}
}

Regiştrii software - Standard Parallel Port (SPP)

Offset Name Read/Write Bit No. Properties


Base + 0 Data Port Write Bit 7 Data 7
Bit 6 Data 6
Bit 5 Data 5
Bit 4 Data 4
Bit 3 Data 3
Bit 2
Bit 1
Bit 0
A T Data 2
Data 1
Data 0

N
Adresa de baza, numita de obicei Port de date sau Registru de date este folosita pentru
scoaterea datelor pe portul paralel (pinii 2-9). In mod normal acest port poate fi doar scris.

datele la aceasta adresa.


I O
Daca se citeşte din el, e obţine ultimul octet trimis. In modul bidirecţional, se pot recepţiona

Offset
Base + 1
Name Read/Write
Status Port Read Only
T
Bit No.
Bit 7
Properties
Busy

IC
Bit 6 Ack
Bit 5 Paper Out

T R Bit 4
Bit 3
Bit 2
Select In
Error
IRQ (Not)

E S Bit 1
Bit 0
Reserved
Reserved
Portul de stare, este un port din care se poate doar citi. Portul de stare este compus din

R
5 pini: 10,11,12,13 si 15, un registru de stare IRQ si doi biţi rezervaţi. Bitul 7 (Busy) este activ
low, la fel ca bitul 2 (daca nIRQ este 1, atunci nu a apărut o întrerupere).
Offset Name Read/Write Bit No. Properties
Base + 2 Control Read/Write Bit 7 Unused
Port Bit 6 Unused
Bit 5 Enable Bi-Directional Port
Bit 4 Enable IRQ Via Ack Line
Bit 3 Select Printer
Bit 2 Initialize Printer (Reset)
Bit 1 Auto Linefeed
Bit 0 Strobe

Portul de control a fost proiectat ca un port in care se poate doar scrie. Liniile Strobe, Auto
Linefeed, Initialize si Select Printer sunt inversate, exceptând linia Initialize.
Aceste ieşiri pot fi folosite si pentru intrari de semnal. Acest lucru se întâmpla in cazul
in care calculatorul a plasat un pin in starea high, iar dispozitivul perifieric doreste sa il treacă
in starea low. In acest caz portul ar fi scurtcircuitat. Iată de ce aceste linii sunt de tipul open
collector(sau open drena pentru dispozitive CMOS). Aceasta indica doua stari: una low si una
de inalta impedanta HiZ (circuit deschis).
In mod normal placa imprimantei are rezistente care asigura nivelul de „1” logic, dar nu
toate sunt astfel dotate, unele având ieşiri totem pole, sau chiar open collector. Pentru siguranta
se poate monta un rezistor extern, care poate functiona in paralel cu cel intern daca acesta
exista.
Un rezistor extern de 4.7k poate fi folosit pentru a ridica pinii in starea high. Când dispozitivul
extern schimba starea pinului in low, rezistenta externa previne scurtcitcuitul, si o noua valoare
poate fi citita Iata cum cei 4 pini ai portului de control pot fi folositi pentru transfer de date
bidirectional. Totusi, portul de control trebuie setat ca xxxx0100 pentru a fi in stare sa citească
date, adică toţi pinii trebuie sa fie in +5V pentru a putea fi trasi in starea low (0).

T
Bitii 4 si 5 sunt controlaţi intern. Bitul 4 activează IRQ, iar bitul 5 activează portul
bidirectional (adica pot fi introdusi 8 biţi de date DATA0-7) daca portul il suporta. Bitii 6 si 7
sunt rezervati.
A
Porturile bidirectionale
N
I O
Schema de mai jos arata o forma simplificata a registrului de date al portului paralel. La

T
inceput, logica paralela era implementata cu logica 74LS, astăzi, toate componentele sunt
integrate in circuite ASIC, dar modul de operare a rămas acelaşi.

IC
T R
E S
R
Porturile ce nu erau bidirectionale se fabricau cu 74LS347 având pinul Output Enable
legat permanent in starea low, deci porturile de date erau exclusiv iesiri. La citirea din registrul
de date al portului paralel, datele ies din 74LS244 care este conectat la iesirile de date. Daca s-
ar putea suprascrie configurarea lui 74LS347, avem un port bidirectional!
Porturile bidirectionale folosesc bitul de control 5 conectat la intrarea de Output Enable,
pentru a putea dezactiva circuitele de iesire. In acest mod se pot citi liniile de date fara a avea
conflicte sau scurgeri excesive de curent.
Atunci când bitul 5 este setat in 1, pinii 2- 9 intra in starea de înalta impedanţa. Odată
aflati in aceast stare, se pot introduce date pe aceste linii, care se pot citi din portul de date de la
adresa de baza. Orice data scrisa in portul de date va fi stocata dar nu va fi disponibila la pinii
de date. Pentru încetarea funcţionarii lucrului in modul bidirecţional, se setează bitul 5 din
portul de control in starea 0.
Totuşi nu toate porturile paralele functioneaza in mod similar. Unele necesita ca bitul 6
din controlul portului sa fie setat pentru activarea modului bidirecţional si setarea bitului 5
pentru dezactivarea modului bidirecţional. Pentru a fi siguri de implementarea portului paralel,
se poate testa cu o sonda pentru a fi siguri de bidirectionalitate.

Folosirea portului paralel pentru a introduce 8 biţi de date

Daca portul paralel nu suporta modul bidirectional, exista o metoda prin care se pot
introduce maxim 9 biţi simultan. Pentru a face acest lucru, se folosesc 5 linii ale portului de
stare si cele 4 intrari de tip open collector ale portului de control.

A T
N
I O
T
IC
R
Intrările portului paralel pot fi alese in aşa fel încât sa ne fie mai uşor la programare.
Busy este MSB (bitul 7) al portului de stare, apoi in ordine crescătoare sunt Ack, Paper Out si

T
Select, care formează nibble-ul cel mai semnificativ al portului de control. Intrările barate sunt

E S
inversate hardware. Portul de stare are doar un port inversat.
Portul de control este folosit pentru a citi cel mai puţin semnificativ nibble. Aşa cum am
descris înainte, portul de control are ieşirile de tip open collector. Daca conectam intrările
noastre direct la port, va rezulta un conflict daca intrarea este in starea high si portul încearcă

R
sa o tragă in jos. Iată de ce trebuie folosiţi inversori open collector.
Totuşi aceasta protecţie nu este necesara întotdeauna. Daca dispozitivele pe care le
conectam sunt insotite de o rezistenta de pull-up sau daca avem grija ca sa iniţializam portul de
control cu xxxx0100, astfel încât toţi pinii portului de control sa fie in stare high, atunci nu
trebuie sa ne preocupam de aceasta protecţie.
Rezistentele de pull-up trebuie sa fie in medie de 4.7k. Pentru a trage linia in starea low,
dispozitivul trebuie sa suporte o cădere de curent de 1mA, care se poate dovedi prea mare
pentru diferite dispozitive de putere mica. Cu atât mai mult pentru rezistente de pull-up de 1k,
care duc la un curent de 5mA.
Invertoarele open collector au fost alese in locul bufferilor open collector pentru ca sunt
mai uşor de procurat. Se port folosi si tranzistori in locul acestora.
Intrarea D3 este conectata prin inversor către Select Printer, care este bitul 3 al portului
de control. D2, D1 & D0 sunt conectate la Init, Auto linefeed si Strobe, pentru a forma nibble-
ul inferior.
Primul lucru care trebuie făcut este sa scriem xx0100 in portul de control. Aceasta
plaseaza toate liniile portului in starea high, pentru a putea fi trase in jos in cazul introducerii
de date.
outportb(CONTROL, inportb(CONTROL) & 0xF0 | 0x04);
Se citeşte nibble-ul cel mai semnificativ din portul de stare. Pentru aceasta mascam
rezultatul cu 0xF0. Busy este inversat hardware, dar acesta nu ne interesează in acest moment.
a = (inportb(STATUS) & 0xF0);
Se citeşte nibble-ul cel mai puţin semnificativ din portul de stare prin mascare cu 0x0F.
Rezultatul se obţine prin efecturea operaţiei de sau intre cele doua valori, având grija sa
inversam biţii 2 si 7 (prin folosirea operatie XOR)
a = a |(inportb(CONTROL) & 0x0F); /* Read LSnibble */
a = a ^ 0x84; /* Toggle Bit 2 & 7 */

Modul nibble

A T
Acest mod reprezintă modalitatea cea mai folosita de citire a 8 biţi de date fara a plasa
portul in modul invers si sa se folosească liniile de date. Modul nibble foloseşte 4 circuite
MUX 2:1 pentru a citi cate un nibble de date la un moment dat. Prin software se asamblează
cele doua părţi ale octetului. Singurul dezavantaj este cel ca tehnica este mai lenta. Ea necesita

N
mai multe instrucţiuni pentru a face citirea si necesita prezenta unui circuit integrat extern.

I O
T
IC
T R
E S
R
Circuitul 74LS157 continand 4 MUX 2:1 funcţionează asemeni cu 4 comutatoare. Când linia
A/B este in starea low, intrarea A este selectata, iar 2A trece către 2Y. Ieşirile Y sunt conectate
la portul de stare al portului paralel, astfel încât reprezintă nibble-ul cel mai semnificativ.
Pentru a putea folosi circuitul, trebuie iniţializat multiplexorul pentru a folosi intrările A
sau B. Vom citi mai întâi nibble-ul cel mai puţin semnificativ (A/B IN stare low). Strobe este
inversat hardware, deci bitul 0 al portului de control trebui setat in 1.
outportb(CONTROL, inportb(CONTROL) | 0x01);
Acum putem citi nibble-ul din portul de stare. Pentru aceasta ştergem nibble-ul mai putin
semnificativ prin mascare, apoi shiftam rezultatul in poziţia corecta (deoarece el este stocat pe
pozitia celul mai semnificativ nibble)
a = (inportb(STATUS) & 0xF0);
a = a >> 4;
Pentru obtinerea nibble-ului cel mai semnificativ procedam similar, insa nu mai avem nevoie
de shiftare, deoarece acest se afla deja pe pozitia corecta. Trebuie sa avem grija sa si comutam
multiplexorul actionand Strobe.
outportb(CONTROL, inportb(CONTROL) & 0xFE);
a = a |(inportb(STATUS) & 0xF0);
byte = byte ^ 0x88;

Ultima linie inversează doi biţi inversaţi de linia Busy la citire. Procesul trebuie sa ia in
considerare eventuale intarzieri aparute la citire, deci in cazul citirii de rezultate incorecte, se
vor adăuga întârzieri in program.

IRQ pentru portul paralel

Întreruperile portului paralel nu sunt folosite pentru tipărire sub DOS sau Windows.
Acestea se pot dovedi utile in aplicaţiile utilizatorilor, de exemplu pentru semnalizarea unor
situaţii care trebuie tratate prioritar. Este mult mai uşor sa primim semnalizări de acest tip decat
sa interogam portul in mod constant.
Întreruperile portului paralel sunt in general IRQ5 sau IRQ7, dar pot sa fie si altele daca

T
acestea sunt deja folosite. Este totodată posibil ca întreruperile sa fie complet dezactivate, daca
portul este folosit exclusiv pentru tipărire. Întreruperile pentru portul paralel pot fi

A
activate/dezactivate prin folosirea bitului 4 al registrului de control Enable IRQ Via Ack Line.

N
Odată activate, întreruperile apar la tranziţia din low in high pe linia nAck (anumite sisteme
reactioneaza insa la tranziţia inversa).

I O
Următorul program prezintă o modalitate de testare a frontului pe care apar întreruperile
pentru portul calculatorului. Totodată reprezintă si o metoda de verificare a lucrului cu

T
întreruperi. Se verifica daca intreruprile sunt generate pe frontul crescător sau descrescător al
liniei nAck. Pentru a folosi programul trebuie doar sa se lege doar una dintre liniile de date (2-

IC
9) la pinul Ack (pin 10). Cel mai uşor se realizează prin scurtcircuitarea intre DATA7 (pin9) si
Ack (pin 10).
#include <dos.h>

#define PORTADDRESS 0x378


T R
/* Introduceti adresa portului */

S
#define IRQ 7 /* introduceti IRQ */

#define DATA PORTADDRESS+0


#define STATUS PORTADDRESS+1
#define CONTROL PORTADDRESS+2
E
#define PIC1 0x20
#define PIC2 0xA0
R
int interflag; /* Interrupt Flag */
int picaddr; /* Adresa de baza Programmable Interrupt Controller (PIC) */

void interrupt (*oldhandler)();

void interrupt parisr() /* Interrupt Service Routine (ISR) */


{
interflag = 1;
outportb(picaddr,0x20); /* End of Interrupt (EOI) */
}

void main(void)
{
int c;
int intno; /* Interrupt Vector Number */
int picmask; /* PIC's Mask */

/* Calculare Interrupt Vector, Adr. PIC si masca folosita. */


if (IRQ >= 2 && IRQ <= 7) { intno = IRQ + 0x08;
picaddr = PIC1;
picmask = 1;
picmask = picmask << IRQ;
}
if (IRQ >= 8 && IRQ <= 15) { intno = IRQ + 0x68;
picaddr = PIC2;
picmask = 1;
picmask = picmask << (IRQ-8);
}
if (IRQ < 2 || IRQ > 15)
{
printf("IRQ Out of Range\n");
exit();
}

outportb(CONTROL, inportb(CONTROL) & 0xDF); /* Ne asiguram ca portul este iesire */


outportb(DATA,0xFF);
oldhandler = getvect(intno); /* Salvare Old Interrupt Vector */
setvect(intno, parisr); /* Setare New Interrupt Vector Entry */
outportb(picaddr+1,inportb(picaddr+1) & (0xFF - picmask)); /* Un-Mask Pic */
outportb(CONTROL, inportb(CONTROL) | 0x10); /* Activare IRQ pt. portul paralel */

clrscr();
printf("Testare front activare intreruperi\n");

A T
printf("IRQ %d : INTNO %02X : PIC Addr 0x%X : Mask 0x%02X\n",IRQ,intno,picaddr,picmask);
interflag = 0; /* Reset Interrupt Flag */

N
delay(10);
outportb(DATA,0x00); /* Tranzitie din High in Low */
delay(10); /* Asteptam */

else

I O
if (interflag == 1) printf("Interuperile au loc la o tranzitie din High in Low a ACK.\n");

{ outportb(DATA,0xFF); /* Tranzitie din Low in High */

T
delay(10); /* Asteptam */
if (interflag == 1) printf("Interuperile au loc la o tranzitie din Low in High a ACK.\n");
else printf(" Nu se detecteaza activitate la intreruperi!\n Verificati nr. IRQ, adresa

IC
port sau legare fire.");
}

R
outportb(CONTROL, inportb(CONTROL) & 0xEF); /* Dezactivare IRQ's port paralel*/
outportb(picaddr+1,inportb(picaddr+1) | picmask); /* Mask Pic */

T
setvect(intno, oldhandler); /* Restaurare vector intreruperi vechi inainte de iesire*/
}

E S
La momentul compilării acest fişier generează câteva avertizări. Acestea sunt normale,
deoarece sunt generate de condiţiile care testează care IRQ este folosit, iar cum acesta este
definit ca o constanta, rezultatul nu se modifica. Totuşi, codul propus poate fi uşor portat in

R
diferite programe care accepta de exemplu IRQ ca parametru in linia de comanda.

Sa urmărim in continuare funcţionarea acestui exemplu.


Prima parte a rutinei principale calculează vectorul de întreruperi, adresa PIC si masca
folosite pentru activarea întreruperilor portului paralel. După ce si rutina de tratare a
întreruperilor (ISR) a fost scrisa, trebuie sa activam întreruperile portului paralel. Aceasta se
face prin setarea bitului 4 din registrul de control al portului paralel:
outportb(CONTROL,inportb(CONTROL) | 0x10);
Înainte de activarea întreruperilor se scrie 0xFF in portul paralel pentru activarea liniilor de
date intr-o stare cunoscuta. Acum toate liniile trebuie sa fie in starea high. Rutina de tratare a
întreruperilor doar setează un fanion (interflag) pentru a putea determina când are loc o
întrerupere. Acum putem scrie 0x00 in portul de date, cauzând tranziţia liniei de acknowledge
(Ack) din 1 in 0 deoarece este conectata la una din liniile de date.
Daca întreruperea are loc pe tranzitia din high in low, putem testa acest lucru prin
verificarea fanionului, si daca este cazul, programul informează utilizatorul. Daca nu a avut loc
o întrerupere, fanionul nu e setat. Putem scrie 0xFF in portul de date, cauzând tranziţia liniei
nACK si va seta fanionul de întrerupere. Daca este setat, intreruperea are loc pe tranzitia din 0
in 1.
Daca fanionul de întreruperi nu este setat, înseamnă ca întreruperile nu functioneaza,
deci trebuie sa ne asiguram ca IRQ-ul si adresa de baza sunt corecte.

Modurile portului paralel in BIOS

Majoritatea porturilor paralele au mai multe moduri de functionare:


• Printer Mode (numit si Default sau Normal Modes)
• Standard & Bi-directional (SPP) Mode
• EPP1.7 sau SPP Mode
• EPP1.9 sau SPP Mode
• ECP Mode


ECP sau EPP1.7 Mode
ECP sau EPP1.9 Mode
A T
N
Printer mode – este modul de baza. Este portul paralel standard doar in modul fara
caracteristici bidirecţionale. Bitul 5 al portului de control nu va fi functional. & Bi-directional

I O
(SPP) Mode este modul bidirecţional. Folosind acest mod, bitul 5 din portul de control va
inversa direcţia portului, astfel încât valori pot fi citite pe liniile de date. EPP1.7 si SPP Mode

T
este o combinatie intre Enhanced Parallel Port si SPP. Acesta are acces la registrii SPP (Data,

IC
Status si Control) cat si acces la registrii EPP. Bitul 5 inversează direcţia portului prin
actionarea sa in registrul de control. EPP 1.7 nu are bitul de time-out.
EPP1.9 si SPP Mode este similar modului anterior cu exceptia faptului ca acum exist acces la
bitul time-out.

T R
ECP Mode provine de la Extended Capabilities Port, si poate fi setat folosind registrul de
control extins ECP (Extended Control Register). In acest mod EPP Mode nu este disponibil.

in plus acces la modul EPP.


E S
„ECP sau EPP1.7 Mode” si „ECP sau EPP1.9 Mode” oferă posibilitatile modului ECP, oferind

Aceste moduri sunt configurabile din BIOS. Acest lucru se poate face si prin software, dar nu
este recomandat.
R
Modurile portului paralel si registrul de control extins ECP

Modul recomandat pentru folosire este ECP si EPP 1.9 Mode. Registrul de control
extins ECP este standardizat de standardul Microsoft: „Extended Capabilities Port Protocol and
ISA Interface Standard”.
La activarea modului ECP, un nou set de registri devin disponibili la adresa de
baza+0x400h. Registrul extins de control ECP se afla la adresa de baza+0x402h. Trebuie
evidenţiat ca registrii ECP nu sunt disponibili pentru porturile cu adresa de baza 0x3BCh.
Bit Functie
7:5 Selectare mod current de operare
000 Standard Mode
001 Byte Mode
010 Parallel Port FIFO Mode
011 ECP FIFO Mode
100 EPP Mode
101 Reserved
110 FIFO Test Mode
111 Configuration Mode
4 ECP Interrupt Bit
3 DMA Enable Bit
2 ECP Service Bit
1 FIFO Full
0 FIFO Empty

Acest tabel prezintă registrul de control extins. Doar cei mai semnificativi trei biţi ai
registrului de control extins selectează modul de operare.

T
Observaţie: Daca este setat modul ECP din BIOS, este recomandata initializarea
portului ECP intr-o stare predefinită înainte de folosire. Daca se doreste folosirea modului SPP,
atunci portul trebuie setat in modul standard inca de la început.
A
N
O
2. Modul EPP (Enhanced Parallel Port)

T I
Specificatia pentru portul EPP a fost realizata de grupul format de Intel, Xircom &
Zenith Data Systems. Primul standard care a fost propus a fost versiunea EPP 1.7, si a fost

IC
inclus in standardul IEEE 1284 din 1994. Mai exista si versiunea EPP 1.9 propusa ulterior.
Rata de transfer in acest mod este de 500KB/s pana la 2MB/s. Aceste viteze se ating prin
înglobarea in hardware a etapelor de handshaking, strobe, etc., comparativ cu versiunea

T R
originala a portului paralel in care aceste etape erau gestionate software. EPP este mai folosit
decât ECP pentru proiectele si machetele de dezvoltare conectate la portul paralel, deoarece ca
acesta gestionează comunicaţia de la si înspre portul paralel. Modul ECP necesita ca

E S
perifericul sa gestioneze mecanismul de hanshaking.

Proprietati hardware ale portului EPP

R
La folosirea modului EPP, un set de sarcini si etichete diferite sunt desemnate pentru
fiecare linie.
Pin SPP Signal EPP Signal IN/OUT Function
A low on this line indicates a Write, High indicates a
1 Strobe Write Out
Read
2-9 Data 0-7 Data 0-7 In-Out Data Bus. Bi-directional
Interrupt Line. Interrupt occurs on Positive (Rising)
10 Ack Interrupt In
Edge.
Used for handshaking. A EPP cycle can be started
11 Busy Wait In
when low, and finished when high.
12 Paper Out / End Spare In Spare - Not Used in EPP Handshake
13 Select Spare In Spare - Not Used in EPP Handshake
14 Auto Linefeed Data Strobe Out When Low, indicates Data transfer
15 Error / Fault Spare In Spare - Note used in EPP Handshake
16 Initialize Reset Out Reset - Active Low
17 Select Printer Address Strobe Out When low, indicates Address transfer
18-25 Ground Ground GND Ground

Paper Out, Select si Error nu sunt definite in mecanismul de handshake EPP, deci pot fi
folosite pentru alte scopuri de către utilizator. Starea acestor linii se poate urmări uşor prin
verificarea registrului de stare SPP (SPP Status Register).

Mecanismul de handshake EPP

Pentru a schimba date corect folosind EPP, trebuie urmat mecanismul handshake EPP.
Deoarece hardware-ul face toate semnalizările necesare, acest lucru nu trebuie sa încarce
(preocupe) software-ul.
Pentru activarea unui ciclu EPP, software-ul trebuie sa execute o operatie de I/O in
registrul corespunzator EPP.

Ciclul de scriere date EPP


A T
N
Etapele sunt următoarele:

I O
1. programul scrie in registrul de date EPP
(adresa de baza+4)

T
2. nWrite este trecut in starea low (indicand
operatie de scriere)

IC 3. datele se plaseaza pe liniile 0-7.


4. nData Strobe testeaza daca linia Wait este in

T R stare low.
5. se asteapta confirmare prin trecerea liniei
nWait in starea high.

E S 6. nData Strobe este deactivat


7. ciclul EPP Data Write se incheie

R
Ciclul de scriere adrese EPP

Etapele sunt următoarele:


1. Programul scrie adresa in registrul de adrese
EPP (adresa de baza+3)
2. Linia Write este plasata in starea low
3. Adresa se plasează pe liniile de date 0-7
4. Address Strobe testează daca Wait este
low(confirmarea inceperii unui ciclu)
5. Se asteapta confirmare prin trecerea lui Wait
in starea high (confirmare sfarsit ciclu)
6. nAddress Strobe este deactivat
7. Ciclul de scriere al adresei EPP se incheie
Ciclul de citire date EPP

Etapele sunt următoarele:


1. programul citeşte registrul de date EPP
(adresa de baza+4)
2. nData Strobe testeaza daca Wait este in
starea low (confirmare pentru incepere
ciclu)
3. se asteapta confirmarea prin trecerea lui
nWait in starea low
4. datele sunt citite de la liniile portului
paralel
5. nData Strobe este deactivat
6. ciclul de citire se incheie

Ciclul de citire adresa EPP

A T
N
Etapele sunt următoarele:
1. programul citeste registrul de adrese EPP

I O
(adresa de baza+3)
2. nAddr Strobe testează daca Wait este in

T starea low (confirmare pentru începere


ciclu)

IC
3. se asteapta confirmarea prin trecerea lui
nWait in starea high

T R 4. datele sunt citite de la liniile portului


paralel
5. nAddr Strobe este deactivat

E S 6. ciclul de citire adresa se incheie


Deosebirea intre versiunile EPP 1.7 si 1.9 este aceea ca pentru versiune 1.7 nu se verifica starea
liniei Wait. In cazul versiunii 1.9 ciclul incepe doar in cazul in care Wait este low. Amândouă
versiunile necesita insa ca linia Wait sa fie in starea high pentru a putea finalize un ciclu.

R
Registrii software ai EPP

Portul EPP are un set nou de registri. 3 sunt mosteniti de la SPP. Iată un tabel cu aceşti
registri:
Address Port Name Read/Write
Base + 0 Data Port (SPP) Write
Base + 1 Status Port (SPP) Read
Base + 2 Control Port (SPP) Write
Base + 3 Address Port (EPP) Read/Write
Base + 4 Data Port (EPP) Read/Write
Base + 5 Undefined (16/32bit Transfers) -
Base + 6 Undefined (32bit Transfers) -
Base + 7 Undefined (32bit Transfers) -
Aşa cum se poate observa, primele trei adrese sunt similare cu SPP, si se comporta in
mod similar. Iata de ce prin folosirea potului in modul EPP, se pot trimite date la adresa de
baza+0, in mod similar modului SPP.
Daca se doreşte comunicarea cu un dispozitiv compatibil EPP, tot ce trebuie făcut este
sa se plaseze datele de transmis in registrul de date EPP la adresa de baza+4 iar placa
generează toate semnalele de handshaking necesare. Tot astfel se procedează daca se doreste
trimiterea unei adrese dispozitivului conectat, atunci se foloseşte registrul de adrese EPP la
adresa de baza+3.
Registrul de adrese EPP si registrul de date EPP sunt disponibile pentru scriere/citire,
deci sunt folosiţi aceeaşi registri pentru ambele tipuri de operatii. Deoarece atat nData Strobe
cat si nAddress Strobe sunt configuraţi ca iesiri, iar pentru lucrul cu imprimanta primul lucru
care trebuie făcut este un ciclu de citire, singura modalitate prin care dispozitivul periferic
poate semnala calculatorul ca doreşte o cerere de citire este prin intermediul intreruperilor (iar
rutina de tratare a întreruperii este cea care va efectua operaţia de citire).

T
Portul de stare are o modificare fata de SPP. Bitul 0, care era rezervat pentru SPP,
devine pentru EPP bitul de time-out. Acest bit este setat cand are loc situatia de time-out, adica

A
lini nWait nu este deactivata in interval mai scurt de 10us din momentul cand liniile IOR sau

N
IOW si-au setat valoarea (aceste linii sunt I/O Read si I/O Write prezente in bus-ul ISA).
Modul EPP este dependent de temporizările magistralei ISA. Atunci cand are loc un

I O
ciclu de citire portul trebuie sa realizeze procesul de handshake si sa preia datele in durata unui
ciclu de ceas ISA. Desigur ca acest lucru nu pare a fi posibil, insa prin introducerea de stari de

T
asteptare prin folosirea IOCHRDY (I/O Channel Ready) din bus-ul ISA, se poate prelungi
durata pana la terminarea ciclului. Daca se începe insa un ciclu de citire/scriere fara nici un

IC
periferic conectat, portul nu receptioneza niciodată confirmarea (nWait), si continua transmisia
carerilor de confirmare, care ar putea duce la blocarea calculatorului. Din acest motiv portul

R
EPP are implementat un tip de watchdog care da time-out după aproximativ 10us.
Cei trei registri situaţi la adresa de baza +5, +6 si +7, pot fi folosite pentru operaţii de

T
citire/scriere pe 16 respectiv 32 de biţi daca acest lucru este suportat de port. Aceste operaţii

S
pot reduce operatiile de I/O. Portul paralel poate transfera la un moment dat doar 8 biţi odată,
deci orice cuvinte de 16 sau 32 de biţi scrise in portul paralel trebui impartite in blocuri de cate

E
8biti si transmise pe liniile de date ale portului paralel.

R
In concluzie, pentru operarea corecta a portului trebuie sa ne asiguram înainte de orice
operaţie de scriere/citire ca liniile portului sunt in starea corecta. Aceasta înseamnă ca liniile
nAddress Strobe, nData Strobe, nWrite si nReset trebuie sa fie inactive, in starea high. Unele
porturi necesita setarea manuala a acestor linii înainte de operarea cu portul EPP. Liniile se vor
iniţializa manual folosind regiştrii SPP, scriind xxxx0100 in portul de control.
Pe unele placi de baza, este nevoie de setarea portului paralel in modul de transmisie,
pentru o programare mai uşoara. De asemeni, ştergerea bitului 5 din registrul de control este un
lucru recomandat.
O atenţie deosebita trebuie sa se acorde bitului Timeout, care daca este setat poate duce
la funcţionarea incorecta a portului. Pentru funcţionare corecta trebuie verificat ca acest bit este
sters si trebuie efectuata o continua monitorizare a acestuia.
3. Modul ECP (Extended Capabilities Port)

Acest port a fost proiectat de Hewlett Packard si Microsoft to pentru a fi implementat


drept „Extended Capabilities Port Protocol and ISA Interface Standard”, si foloseşte hardware
adiţional pentru a genera semnalele se handshaking, etc. si operează la viteze similare cu portul
EPP. Acest mod opereaza mai bine sub Windows, deoarece poate folosi canalele DMA cat si
bufferii de intrere/iesire pentru a transfera datele.
Modul suporta si compresie in timp real folosind Run Length Encoding (RLE) pentru
atingerea unei compresii de pana la 64:1.
ECP suporta si o metoda de adresare a mai multor dispozitive din interiorul unei
structuri mai complexe. De exemplu un fax poate fi accesat separat pentru fiecare din partile
componente: scanner, modem, imprimanta, astfel incat unele dispozitive sa poata receptiona
date chiar daca acte dispozitive nu pot face acest lucru (ex. deoarece au buffer plin).

Proprietatile hardware ale portului ECP

A T
Asemeni modului EPP, si modul ECP desemnează sarcini diferite fata de modul SPP

N
pentru cei 25 de pini ai conectorului. ECP este insa compatibil cu modul SPP si EPP. Pentru
modul ECP liniile au semnificaţia de mai jos.
Pin SPP Signal ECP Signal IN/OUT

I O Function
A low on this line indicates, that there is valid data at the
1 Strobe HostCLK

T
Out host. When this pin is de-asserted, the +ve clock edge
should be used to shift the data into the device.

IC
2-9 Data 0-7 Data 0-7 In/Out Data Bus. Bi-directional
A low on this line indicates, that there is valid data at the

R
10 Ack PeriphCLK In Device. When this pin is de-asserted, the +ve clock edge
should be used to shift the data into the Host.

11 Busy PeriphAck

S T In
When in reverse direction a HIGH indicates Data, while a
LOW indicates a Command Cycle.
In forward direction, functions as PeriphAck.

E
Paper Out /
12 nAckReverse In When Low, Device acknowledges Reverse Request.
End
13 Select

14 Auto Linefeed R X-Flag

Host Ack
In
Extensibility Flag
When in forward direction a HIGH indicates Data, while a
Out LOW indicates a Command Cycle.
In reverse direction, functions as HostAck.
15 Error / Fault PeriphRequest In A LOW set by the device indicates reverse data is available
16 Initialize nReverseRequest Out A LOW indicates data is in reverse direction
A HIGH indicates Host is in 1284 Transfer Mode. Taken
17 Select Printer 1284 Active Out
low to terminate.
18-25 Ground Ground GND Ground
Liniile HostAck si PeriphAck indica semnificatia semnalelor de pe liniile de date:
comenzi sau date. Daca aceste doua linii sunt in starea high, atunci pe liniile portului sunt
date(pinii 2-7). Daca un ciclu de comanda are loc, atunci linia corespunzatoare va fi in starea
low (de ex. daca PC-ul transmite comenzi linia HostAck este in strea low, respectiv daca
perifericul transmite, linia PeriphAck este in low).
Un ciclu de comanda poate consta in unul din următoarele lucruri: o enumerare RLE
sau o adresa. Bitul 7, cel mai semnificativ, al liniilor de date (pinul 9 al portului) este cel care
face aceasta determinare. Daca bitul MSB este 0, atunci restul biţilor conţin o enumerare RLE
care este folosita in compresia datelor. Daca bitul 7(MSB) este 1, atunci data prezenta pe biţii
0-6 este adresa de canal (fiind pe 7 biţi are valori intre 0 si 127).

Mecanismul handshake ECP

Aceasta operaţie diferă fata de modul SPP. Diferenţa majora este posibilitatea ECP de a
transmite data in orice direcţie in orice moment, deci este nevoie de semnalizări suplimentare.
Ciclul de transmisie date ECP
Etapele sunt urmatoarele:
1. Datele sunt plasate pe liniile de date de PC
2. Ciclul incepe cand este activat HostAck in
starea high
T
3. PC-ul indica date valide prin trecerea

A
HostClk in starea low.

N
4. Perifericul trimite confirmarea de date
valide prin activarea liniei PeriphAck

I O
5. PC-ul dezactivează linia HostClk trecând-
o in starea high. Frontul pozitiv este folosit

T
pentru transferul datelor in periferic
6. Perifericul trimite confirmarea recepţiei datelor prin dezactivarea liniei PeriphAck.

Ciclul de trimitere comenzi ECP


IC
T R Etapele acestui proces sunt urmatoarele:
1. datele sunt plasate pe liniile de date de catre

S
PC
2. PC-ul indica posibilitarea inceperiil ciclului

E de date prin activarea liniei HostAck in


statea low

R 3. PC-ul indica prezenta de date valide prin


activarea liniei HostClk in starea low
4. Perifericul trimite confirmarea de date
valide prin activarea liniei PeriphAck
5. PC-ul dezactiveaza linia HostClk trecand-o in starea high. Frontul pozitiv este folosit
pentru transferul datelor in periferic
6. Perifericul trimite confirmarea receptiei datelor prin dezactivarea liniei PeriphAck.

Comparaţie intre mecanismul handshake in modurile ECP si SPP

Mecanismul handshake SPP are 5 paşi:


1. se scriu datele in portul de date;
2. se verifica daca imprimanta este ocupata. Daca este cazul, orice date scrise in port se
vor pierde;
3. se trece pinul 1 (Strobe) in starea low. Aceasta semnalizează ca datele sunt plasate
corect pe liniile de date (pinii 2-9);
4. se plasează pinul Strobe in starea high dupa aproximativ 5us de la plasarea acestuia in
starea low;
5. se verifica Ack ce trebuie primit de la periferic.

Mecanismul handshake pentru ECP are mai multi pasi, care ar sugera ca ECP este mai lent
decat SPP. Acest lucru nu este insa adevarat, deoarece toti pasii prezentati mai sus sunt
controlati de hardware. Daca mecanismul ar urma sa fie implementat prin software, atunci ar fi
intr-adecar mai incet decat corespondentul SPP.

RLE - Run Length Encoding

T
Asa cum a fost prezentat mai înainte, modul ECP include o metoda de compresie
numita RLE - Run Length Encoding. Aceasta lucreaza prin trimiterea unei serii de octeţi cu rol

A
de numărare a repetiţiilor, si separat a octetului care urmeaza a fi repetat. Metoda se dovedeste

N
buna in special pentru scaner-e sau pentru imprimante, cand apar numeroase date repetitive.
De exemplu, daca se trimite un şir de 25 de ‚a’, atunci se va trimite un octet egal cu 24

I O
urmat de un octet ‚a’. Perifericul care receptioneaza aceste date va extinde octetul sosit pe
ultima pozitie de un numar de ori corespunzator primului octet.

T
Pentru a distinge un octet comprimat RLE de un sir normal de octeti,trebuie procedat
intr-un mod special. Octetul este trimis ca o comanda catre portul de adrese FIFO. Octetii

IC
trimisi catre acest registru pot fi de doua tipuri: adresa sau numar de repetitii (Run Length
Count) pentru compresie RLE. Distinctia se face prin bitul cel ami semnificativ. Daca este setat

reprezinta numarul de repetitii.

T R
(1), atunci ceilalti 7 biţi reprezinta adresa de canal, daca este sters (0), atunci ceilalti biţi

Registrii software ECP

E S
Tabelul de mai jos arata registrii ECP. Primii trei registri sunt similari cu SPP. Trebuie

Address
R
avuta in vedere activarea bitului 5 al portului de control (Enable Bi-Directional Port). Acesta
reflecta direcţi curenta a portului, si va afecta biţii FIFO Full si FIFO Empty ai registrului ECP.
Port Name Read/Write
Base + 0 Data Port (SPP) Write
ECP Address FIFO (ECP MODE) Read/Write
Base + 1 Status Port (All Modes) Read/Write
Base + 2 Control Port (All Modes) Read/Write
Base + 400h Data FIFO (Parallel Port FIFO Mode) Read/Write
Data FIFO (ECP Mode) Read/Write
Test FIFO (Test Mode) Read/Write
Configuration Register A (Configuration Mode) Read/Write
Base + 401h Configuration Register B (Configuration Mode) Read/Write
Base + 402h Extended Control Register (Used by all modes) Read/Write
Registrul ECP de control extins (Extended Control Register (ECR))

Acest registru este cel mai important, deoarece setează modul in care lucrează portul
ECP si da informaţii despre starea stivei FIFO, precum si multe alte functii.
Bit Function
7:5 Selects Current Mode of Operation
000 Standard Mode
001 Byte Mode
010 Parallel Port FIFO Mode
011 ECP FIFO Mode
100 EPP Mode
101 Reserved
110 FIFO Test Mode

T
111 Configuration Mode
4 ECP Interrupt Bit
3 DMA Enable Bit
A
N
2 ECP Service Bit
1 FIFO Full
0 FIFO Empty

I O
T
Cei mai semnificativi 3 biţi ai registrului de control extins selecteaza modul de lucru.
Exista 7 moduri posibile de operare:

IC
- modul Standard: portul ECP se comporta ca un port SPP, fara posibilitati bidirectionale
- modul Byte / PS/2: portul se comporta ca un port SPP im modul bidirectional

R
- modul Parallel Port FIFO: In acest mod orice date trimise catre periferic foloseste
mecanismul handshake SPP. Hardware-ul genereaza semnalele handshake necesare. Se

T
pot folosi unele din functiile ECP precum bufferi FIFO si generarea hardware a

ECP.
E S
handshaking-ului, dar folosind modelul handshake SPP, nu cel ECP.
- modul ECP FIFO: modul standard pentru ECP. Mecanismul handshake este cel de tip

- modul EPP/rezervat: pe unele dispozitive se poate activa modul EPP


- modul rezervat
R
- modul FIFO Test : in acest mod orice date scrise in registrul de test FIFO vor fi plasate
in FIFO, si orice date citite din acest registru sunt citite din bufferul FIFO.
- modul de Configurare: in acest mod cei doi registri de configurare cnfgA si cnfgB
devin disponibili
Modurile Parallel Port FIFO si ECP FIFO sunt similare, insa folosirea handshake-ului SPP
permite conectarea la imprimante de tip SPP. Modul de test FIFO poate fi folosit pentru a test
capacitatea bufferilor FIFO, cat si pentru a verifica funcţionarea acestora corecta. Orice date
scrise in registrul de test FIFO vor fi plasate in bufferul FIFO, si orice date citite din acest
registru sunt citite din bufferul FIFO, si impreuna cu semnalizările bitilor FIFO Full si FIFO
Empty putem determina dimensiunea bufferilor.
Bitul ECP Interrupt Bit (bitul 4) permite folosirea întreruperilor, in vreme ce bitul DMA
Enable Bit (bitul 3) aciveaza accesul direct la memorie. ECP Service Bit (Bit 2) indica daca a
avut loc o întrerupere (daca este setat). Bitul este resetat automat la terminarea întreruperii pe
majoritatea circuitelor.
FIFO Full (Bit 1) si FIFO Empty (Bit 0) indica starea bufferului FIFO: daca bitul 1 e setat,
bufferul este plin, daca bitul 0 e setat, buffferul e plin, iar daca nici unul nu e setat, bufferul
contine date dar nu este plin. Pentru a vedea directionalitatea, trebuie sa se tina cont de bitul 5.

Registrul de configurare A

Registrul A este unul din cei doi registri de configurare ai portului ECP. Acestia sunt
accesibili doar când portul este in modul de configurare, si poate fi accesat la adresa de
baza+400h.
Bit Function
7 1 Interrupts are level triggered
0 Interrupts are edge triggered (Pulses)
6:4 00h Accepts Max. 16 Bit wide words
01h Accepts Max. 8 Bit wide words
02h Accepts Max. 32 Bit wide words
A T
3
03h:07h Reserved for future expansion
Reserved N
2

I O
Host Recovery : Pipeline/Transmitter Byte included in FIFO
In forward direction, the 1 byte in the transmitter pipeline doesn't affect
0
FIFO Full.
T
IC
In forward direction, the 1 byte in the transmitter pipeline is include as
1
part of FIFO Full.
1:0 Host Recovery : Unsent byte(s) left in FIFO
00
01
10
Complete Pword
1 Valid Byte

T
2 Valid Bytes
R
11

E S
3 Valid Bytes
Registrul de configurare A se poate citi pentru a afla mai multe despre portul ECP.
Ultimii 3 biţi pot fi folosiţi pentru revenirea in cazul in care a apărut o eroare. Pentru acest

FIFO. R
lucru, software-ul trebuie sa ştie câţi octeţi au fost trimişi, prin determinarea octeţilor ramaşi in

O altă problema care poate sa apară este ca portul paralel nu transmite decât 8 biţi la un
moment dat, deşi putem folosi pentru trensmisie cuvinte de 16 sau 32 de biţi. In acest caz doar
o parte a cuvântului poate fi transmis catre port. Bitii 0 si 1 indica numărul de octeti valizi care
au mai ramas in FIFO, Pentru a ii putea retransmite.

Registrul de configurare B

Acest registru, ca si registrul de configurare A este disponibil in modul de configurare,


si se gaseste la adresa de baz+401h. Structura sa este prezentata mai jos:
Bit(s) Function
7 1 Compress outgoing Data Using RLE
0 Do Not compress Data
6 Interrupt Status - Shows the Current Status of the IRQ Pin
5:3 Selects or Displays Status of Interrupt Request Line.
000 Interrupt Selected Via Jumper
001 IRQ 7
010 IRQ 9
011 IRQ 10
100 IRQ 11
101 IRQ 14
110 IRQ 15
111 IRQ 5
2:0 Selects or Displays Status of the DMA Channel the Printer Card Uses
000 Uses a Jumpered 8 Bit DMA Channel
001
010
011
DMA Channel 1
DMA Channel 2
DMA Channel 3
A T
N
100 Uses a Jumpered 16 Bit DMA Channel
101 DMA Channel 5
110
111
DMA Channel 6
DMA Channel 7
I O
T
Registrul poate fi o combinaţie de scrieri/citiri.

IC
Bitul 7 selectează daca datele trimise vor fi comprimate folosind RLE (in cazul in care
este setat). Bitul 6 returnează starea pinului IRQ. Aceasta poate fi folosita pentru a diagnostica

R
eventuale conflicte, deoarece se reflecta nu numai starea IRQ pentru portul paralel, ci si pentru
alte dispozitive care folosesc acest IRQ.

T
Din ce in ce mai puţine dispozitive folosesc jumperi pentru setari, insa daca este cazul,

S
resursele sunt prezentate pentru software ca fiind doar pentru citire (read-only).

E
R
Anexa 1

D-Subminiature Connector, 25 Contacts (DB-25) Centronics Connector, 36 Contacts

Pin Name Function I/O Pin Name Function I/O

1 --STROBE --STROBE Out 1 --STROBE --STROBE Out


2 DATA 0 Data Bit 0 (Data LSB) Out 2 DATA 0 Data Bit 0 (Data LSB) Out
3 DATA 1 Data Bit 1 Out 3 DATA 1 Data Bit 1 Out
4 DATA 2 Data Bit 2 Out 4 DATA 2 Data Bit 2 Out
5 DATA 3 Data Bit 3 Out 5 DATA 3 Data Bit 3 Out
6 DATA 4 Data Bit 4 Out 6 DATA 4 Data Bit 4 Out
7 DATA 5 Data Bit 5 Out 7 DATA 5 Data Bit 5 Out
8
9
10
11
DATA 6
DATA 7
--ACK
BUSY
Data Bit 6
Data Bit 7 (Data MSB)
--Acknowledge
Busy
Out
Out
In
In
8
9
10
11
DATA 6
DATA 7
--ACK
BUSY
A T
Data Bit 6
Data Bit 7 (Data MSB)
--Acknowledge
Busy
Out
Out
In
In
12
13
PE
SLCT
Paper End
Select
In
In
12
13
PE

N
SLCT
Paper End
Select
In
In
14
15
--AUTOLF
--ERROR
--Auto Line Feed
--Error
Out
In
14
16

I O--AUTOLF
GND
--Auto Line Feed
Ground
Out

T
16 --INIT --Initialize Printer Out 19-30 GND Ground
17 --SLCTIN --Select Input Out 31 --INIT --Initialize Printer Out

IC
18-25 GND Ground 32 --ERROR --Error In
33 GND Ground
36 --SLCTIN --Select Input Out

R
Schema cablu de conectare paralela

T
E S
R
ANEXA 2
Folosirea portului paralel in C

C/C++ asigura accesul catre porturile I/O pentru arhitectura 80x86 prin functiile predefinite
inportb / inport si outportb / outport.
int inportb(int portid); /* returneaza octet citit din port I/O portid */
int inport(int portid); /* returneaza cuvant citit din port I/O portid */
void outportb(int portid, unsigned char value);/* scrie octet in port I/O portid */
void outport(int portid, int value); /* scrie octet in port I/O portid */

Ex. Ex.
#include <stdio.h> #include <stdio.h>
#include <dos.h> #include <dos.h>
#include <conio.h>
#define Data 0x378
#define Status 0x379 void main (void)
#define Control 0x37a {

unsigned char Bits;

outportb(Data,Bits); /* output data */


clrscr();

getch();
}

A T
outportb(0x378,0xff); /* output data */

Bits = inportb(Status); /* input data */

N
O
Folosirea portului paralel sub Linux

I
T
Sub Linux, portul se poate accesa folosind ioperm. Programul urmator scrie 255 in
portul paralel:
#include
#include
<stdio.h>
<stdlib.h>
IC
#include
#include
<unistd.h>
<asm/io.h>

#define base 0x378


T R
/* adresa de baza port imprimanta*/

S
#define value 255 /* valoare numerica de trimis catre port */

main(int argc, char **argv)


{
if (ioperm(base,1,1))
E
R
fprintf(stderr, "Nu am potut accesa portul la %x\n", base), exit(1);

outb(value, base);
}

Se salveaza ca lpt_test.c si se compileaza cu:


gcc -O lpt_test.c -o lpt_test

Folosirea portului paralel folosind Debug

Utilitarul Debug inclus si in versiunile mai noi ale S.O. Windows, permite o
multitudine de functii, printre care si cele de accesare a portului paralel.
C:\>debug /?
Runs Debug, a program testing and editing tool.
Debug [[drive:][path]filename [testfile-parameters]]
[drive:][path]filename Specifies the file you want to test.
testfile-parameters Specifies command-line information required by
the file you want to test.
După ce programul începe, se poate folosi ? pentru a afla care sunt comenzile posibile
si q pentru a iesi din utilitar. Pentru operarea portului paralel trebuie sa cunoaştem adresa
acestuia.
Comenzile folosite sunt:
i port_address
o port_address byte_value

Ex.
C:\>debug
-o 378 5a
-i 379
7F
-q

Cautarea adreselor porturilor paralele folosind utilitarul Debug

d start_address end_address

A T
O alta funcţie a utilitarului Debug permite afişarea pe ecran a conţinutului memoriei

Unde:
start_address este in formatul segment:offset
N
O
end_address este opţionala - 256 octeţi sunt afisati implicit

I
T
C:\>debug
-d 0:408 40d
0000:0400 78 03 00 00 00 00 x.....

IC
-q

In acest exemplu LPT1 este la adresa 378 Hex iar LPT2 si LPT3 nu sunt prezente.

R
-d 0:408 40d
0000:0400 BC 03 78 03 78 02 ..x.x.

T
-q

In acest exemplu LPT1 este la adresa 03BC Hex , LPT2 la 0378 si LPT3 la 0278.

E S
R
Folosirea portului paralel pentru comanda unor circuite simple

Portul paralel poate fi folosit pentru comanda unor circuite simple, cum ar fi cel format dintr-
un LED si o rezistenta. Întrucât sunt disponibile 8
linii de date, numărul LED-urilor poate creste pana
la aceasta valoare. Pentru 1 logic portul scoate +5V,
deci poate comanda maxim cativa miliamperi.
Rezistentele sunt de aproximativ 470 ohm, valoare
folosita pentru a limita curentul din potul paralel (un
LED suporta maxim 10mA aplicat continuu), dar
care permite si o iluminare normala a LED-ului.

Se va tine cont sa se conecteze pinul mai lung al


LED-ului (+) la pinul de date altfel acesta nu va
lumina. Când data este setata in „1” LED-ul se aprinde.
Anexa 3
Dispunerea si functiile pinilor portului paralel

• 8 pini de iesire accesati prin portul de DATE


• 5 pini de intrare (unul inversat) accesati prin portul de STARE
• 4 output pins (trei inversati) accesati prin portul de CONTROL
• Restul de 8 pini sunt legati la masa

A T
N
I
Connector D 25-piniO
T
IC
Obs.
• Biţii de date: 0-7 (pinii 2 - 9) daca se scrie valoarea 254 la adresa de baza sunt setaţi toţi
biţii, mai puţin primul.

T R
daca se citeşte de la adresa de baza+1 trebuie sa se ţină cont ca unii biţi sunt inversaţi
după ce sunt primiţi in port (ex. daca pe Busy se aplica „1” in software vom citi „0”).
Printre aceşti pini sunt:
Bit
3
4
5
Pin
15
13
12
Nume
Error

E
Select In
S
Paper Empty


6
7

Bit
10
11

Pin
R
Acknowledge
Busy
se scrie la adresa de baza+2 pentru setarea următorilor pini
Nume
0 1 Strobe
1 14 Auto Linefeed
2 16 Initialise
3 17 Select Out
ECHIPAMENTE PERIFERICE

A T
N
I O
T3
Laborator
IC
T R
E S
R

Universitatea din Piteşti


Introducere

Portul serial este mai greu de interfaţat decât portul paralel. In majoritatea
cazurilor, dispozitivele conectate la portul serial vor avea nevoie de un convertor al
transmisiei in forma paralela pentru a putea fi folosita. Acest lucru poate fi făcut folosind
un UART. In ceea ce priveşte software-ul, registrii care trebuie urmăriţi sunt mai mulţi
decât pentru portul paralel standard (Standard Parallel Port - SPP).
Care sunt insa avantajele transmisiei seriale fata de transmisia paralela?
1. Cablurile seriale pot fi mai lungi decât cablurile paralele. Portul serial transmite
un „1” logic in intervalul -3 pana la -25V si „0” logic in intervalul +3 pana la
25V, in vreme ce portul paralel transmite „0” ca 0V si „1” ca 5V. Prin urmare

T
portul serial are diferenţa maxima de semnal de 50V comparativ cu portul paralel
la care aceasta este de maxim 5V. Prin urmare pierderile de semnal sunt o

A
problema mai mica pentru cablul serial decât pentru cablul paralel.

N
2. Pentru transmisia seriala nu sunt necesare atât de multe fire pentru transmisie
comparativ cu transmisia paralela. Daca dispozitivul care trebuie conectat este la

I O
mare distanta, 3 fire sunt mai ieftine si mai uşor de manevrat decât 19 sau 25 de
fire. Totuşi trebuie luat in considerare si costul interfaţării de la fiecare capăt.

T
3. Dispozitivele IrDA s-au dovedit destul de populare in ultimul timp. Multe
dispozitive portabile (laptop, PDA, telefoane celulare, etc.) au incorporata o

IC
asemenea conexiune. Desigur ca singura modalitate de transmisie este cea seriala.
IrDA-1 este capabila de transmisia a 115.2k baud când este interfaţată cu UART.

R
In aceste dispozitive, datorita cerinţelor de consum redus, lăţimea pulsului pentru
un bit fost redusa la 3/16 din cea folosita de RS232.

T
Sistemele cu microcontroler sunt des folosite, incorporând de multe ori interfaţa

E S
seriala(SCI - Serial Communications Interfaces). Avantajul este reprezentat de nevoia a
numai doi pini pentru comunicaţii externe: Transmit Data (TXD) si Receive Data (RXD).
In alte domenii (in special in industrie) se folosesc si alte standarde de transmisie
seriala. Dintre acestea, cele mai importante sunt RS 422 si RS 485. Aceste standarde nu

R
sunt direct compatibile, insa de multe ori se dovedeşte necesara cunoaşterea lor si mai
ales a metodelor de conversie intre acestea. Iată de ce aceste standarde vor fi si ele
prezentate in cadrul acestui laborator.

1. Proprietăţi hardware RS-232

Dispozitivele care folosesc interfaţa seriala se împart in doua categorii: DCE


(Data Communications Equipment) si DTE (Data Terminal Equipment.). Data
Communications Equipment pot fi dispozitive precum: modemul, adaptorul TA, in vreme
ce Data Terminal Equipment e reprezentat de calculator sau de terminal.
Specificaţiile pentru transmisia seriala sunt elaborate de EIA (Electronics Industry
Association) si de exemplu standardul RS232C prevede:
1. 0 logic este intre +3 si +25V
2. 1 logic este intre -3 si -25V
3. regiunea intre +3 si -3V este nedefinita (nu se poate interpreta corect)
4. tensiunea circuitului deschis nu trebuie sa depăşească 25V fata de masa
5. curentul de scurtcircuit nu trebuie sa depăşească 500mA (dispozitivul poate
suporta acest curent fără probleme)
Acestea sunt cele mai importante caracteristici ale standardului RS232C. Versiuni
mai noi au apărut (RS232D si RS232E) in 1987 si 1991.
Porturile seriale pot avea doua tipuri de conectori: tip D 25 pini si tip D 9 pini.
Semnificaţia pinilor este reprezentata in tabelul de mai jos:
tip D 25 pini tip D 9 pini Abreviere Nume complet
Pin 2 Pin 3 TD Transmit Data
Pin 3 Pin 2 RD Receive Data
Pin 4 Pin 7 RTS Request To Send
Pin 5 Pin 8 CTS Clear To Send
Pin 6 Pin 6 DSR Data Set Ready

T
Pin 7 Pin 5 SG Signal Ground
Pin 8 Pin 1 CD Carrier Detect

A
Pin 20 Pin 4 DTR Data Terminal Ready
Pin 22 Pin 9 RI Ring Indicator

Funcţiile pinilor sunt prezentate in tabelul următor:


TD Transmit Data Iesire seriala de date (TXD)
N
RD
CTS
Receive Data
Clear to Send
Intrare seriala de date (RXD)

I O
Linia indica faptul ca modemul este gata sa transfere date

T
DCD Data Carrier Detect Atunci când modemul detectează semnal purtătoare la celalalt capăt al liniei, atunci aceasta linie
devine activa
DSR Data Set Ready Aceasta linie atentioneaza UART ca modemul e gata de stabilirea unei legaturi.

IC
DTR Data Terminal Ready Aceasta linie atentioneaza modemul ca UART e gata de stabilirea unei legaturi.
RTS Request To Send Aceasta linie atentioneaza modemul ca UART e gata pentru transferul de date.

R
RI Ring Indicator Linia devine activa când modemul detectează semnal de sonerie de la PSTN.

Cablul Null modem

S T
Acest tip de cablu este folosit pentru a conecta doua dispozitive DTE. Este folosit

E
ca o metoda ieftina de transfer fişiere sau pentru conectarea a doua calculatoare intr-o
reţea, folosind protocoalele Zmodem, Xmedem, etc. sau pentru a conecta sisteme de

R
dezvoltare cu microcontroler.
Conectarea firelor se face ca in figura de mai jos:

Avantajul folosirii acestei conexiuni este numărul redus de fire (TD, RD si


SG). Principiul de funcţionare este simplu: calculatorul trebuie sa creadă ca este conectat
la un modem si nu la un alt calculator. Orice data primita de un calculator este trimisa de
către celalalt si deci RD este conectat la TD. Semnalul de masa trebuie conectat împreuna
pentru ca ambele calculatoare sa aibă o referinţa comuna.
Data Terminal Ready este legat la Data Set Ready si Carrier Detect pe ambele
calculatoare. Atunci când Data Terminal Ready devine activ, Data Set Ready si Carrier
Detect devin imediat active. Calculatorul crede in acest moment ca modemul virtual la
care este conectat este gata si ca a detectat semnalul purtătoare al celuilalt modem.
Deoarece calculatoarele comunica la aceeaşi viteza, nu mai este nevoie de negocierea
ratei de transfer, de aceea liniile Request to Send si Clear To Send sunt legate împreuna
la cele doua calculatoare. Atunci când calculatorul doreşte sa transmită date, Request to
Send este trecut in „1” logic, rezultând, datorita legăturii intre cele doua fire, trecerea
imediata a lui Clear To Send in „1”, deci o confirmare de transmisie este primita aproape
instantaneu, si calculatorul trece la transmiterea datelor.
Semnalul de sonerie nu este folosit deoarece nu avem conectat la celalalt capăt un
modem.

Conectarea loopback

A T
Aceasta conectare se poate dovedi utila in scrierea
programelor pentru seriala/comunicatie RS232. Liniile de
N
I
transmis este recepţionat instantaneu. Daca o asemeneaO
transmisie si recepţie sunt conectate împreuna, deci ce este

T
conexiune este legata la portul serial al calculatorului, si un
program tip Terminal este activat, orice este tipărit se va

IC
primi imediat înapoi pe ecran.

Vitezele DCE/DTE

T R
După cum am amintit mai sus, un dispozitiv tipic pentru Data Terminal Device

E S
este un calculator, iar un dispozitiv tipic pentru Data Communications Device este un
modem. Viteza intre dispozitivele DCE si DTE este denumita si viteza de terminal, si este
mai mare decât viteza intre dispozitive DCE si DCE (de exemplu intre doua modemuri)
care este denumita viteza de linie.

R
Majoritatea modemurilor din zilele noastre sunt de tipul 33.6K sau 56K.
Totuşi, aceasta nu este viteza maxima a unui modem si la inspectarea configuraţiei
acestuia, putem observa viteze mult mai mari, de 115200bps (care este viteza maxima a
UART 16550a). Acestea insa se refera la viteze DCE către DTE pentru care programele
au fost configurare sa lucreze.
Modemurile moderne au incorporate compresia datelor. Aceasta, odată
configurata corect, poate duce la compresii de 1:4 sau mai mari. 1:4 este compresia tipica
pentru un fişier text. Iată ca, pentru un transfer la viteza de 28.8k (DCE către DCE),
atunci când modemul comprimă datele, transferul realizat intre calculatoare este de
115.2kbps iar viteza DCE-DTE este de 115.2kbps. Iată de ce DCE-DTE trebuie sa fie
mult mai mare decât viteza de conectare a modemului (DCE-DCE).
Anumiţi fabricanţi de modemuri arata ca in anumite cazuri se poate atinge o
rata de compresie de 1:8. In acest caz, pentru o viteza de conectare de 33.6kbps, se poate
atinge un maxim de 268800bps transfer intre modem si UART. Daca acesta este un
model 16550a cu viteza maxima de 115200bps, atunci ar avea loc o pierdere de
performanta. Daca insa se foloseşte un circuit 16C650, cu viteza maxima de 230400bps,
problemele de viteza aproape ca ar dispărea.
Trebuie luat in considerare ca acestea reprezintă maximul compresiei, si ca in
majoritea cazurilor datele nu se comprima atât de bine. De asemenea, anumite tipuri de
date se comprima mai uşor iar altele mai greu, deci, compresia va fi mai buna pentru
datele care se comprima mai uşor.

Controlul traficului

Datorita diferentelor mari intre vitezele DCE-DCE si DTE-DCE, mai devreme


sau mai târziu buffer-ul de date va fi depăşit (buffer overflow) si va fi necesara, pentru a
nu se pierde date, o forma de control a acestui transfer. Exista doua tipuri de control:
hardware si software.

T
Controlul software al traficului, uneori exprimat dept control Xon/Xoff
foloseşte doua caractere Xon si Xoff. Xon e indicat de caracterul ASCII 17 iar Xoff de

A
caracterul ASCII 19. Modemul are un buffer mic si când acesta se umple, modemul

N
trimite caracterul Xoff către calculator pentru a opri transferul de date. Când suficiente
date au fost transmise si bufferul s-a golit, modemul trimite Xon către calculator pentru a

I O
relua transferul de date. Acest tip de control are avantajul ca nu are nevoie de mai multe
fire, deoarece caracterele sunt transmise prin liniile TD/RD. Dezavantajul este ca fiecare

T
caracter are nevoie de 10 biţi pentru a fi transmis, deci comunicaţia va fi încetinita.
Controlul hardware al traficului este cunoscut drept control RTS/CTS. Acesta

IC
foloseşte doua fire suplimentare in cablul serial, de aceea transferul datelor nu va fi
afectat. Atunci când calculatorul doreşte sa transfere date activează linia RTS - Request

semnal CTS - Clear to Send.

T R
to Send. Atunci când modemul are loc in buffer pentru preluarea de date va trimite

E S
UART (Universal Asynchronous Receiver / Transmitter)

Acest dispozitiv plasat in placa seriala este de mult ori integrat in alte circuite,
deci nu il vom găsi ca un element separat. Seria 8250, care include UART-urile 16450,

R
16550, 16650, & 16750 sunt cele care se regăsesc cel mai des in calculatoarele personale.
Integratul 16550 este compatibil cu 8250&16450. singurele diferente sunt pinii
24 si 29. Pe 8250 pinul 24 este folosit drept Chip Select Out (cu rol de indicator daca
integratul este activ sau nu). Pinul 29 nu este conectat pe UART 8250/16450. Integratul
16550 a introdus doi pini noi in locul acestora. Acesta sunt TXRDY (Transmit Ready) si
RXRDY (Receive Ready) care por fi implementaţi folosind DMA (Direct Memory
Access). Aceşti pini au doua moduri de operare: modul 0 suporta transfer simplu DMA in
vreme ce modul 1 suporta multi-transfer DMA. In continuare sa prezentam aceste doua
moduri.
Modul 0 se mai numeşte si modul 16450. Acest mod este selectat când buffer-
ii FIFO sunt deactivati prin bitul 0 al registrului de control FIFO (FIFO Control Register)
sau când buffer-ii FIFO sunt activaţi, insa bitul 3(bitul DMA Mode Select) al registrului
de control FIFO este 0. In acest mod RXRDY este in starea activa (0 logic) când cel puţin
un caracter se afla in buffer-ul de recepţie. TXRDY este in starea activa (0 logic) când nu
mai sunt caractere de transmis in buffer-ul de transmisie.

T
Modul 1 este cel in care buffer-ii FIFO sunt activi, si DMA Mode Select = 1.
In modul 1 RXRDY trece in starea activa când are loc 16550 Time Out si trece in starea

A
inactiva când nu mai sunt caractere in FIFO. TXRDY este activ când nu mai sunt

N
caractere in buffer-ul de transmisie si devine inactiv când buffer-ul FIFO de transmisie
este plin.

I O
Unităţile UART sunt compatibile TTL. Acestea includ TD, RD, RI, DCD,
DSR, CTS, DTR si RTS. Iată de ce sunt necesare circuite care sa transforme nivelul de

T
tensiune la valori compatibile pentru RS232. Aceste circuite sunt DS1489 si DS1488,
care aduc tensiunile de la nivelul TTL la nivelul +12/-12V necesar pentru RS232 folosind

IC
tensiunile de +12/-12V deja existente in interiorul calculatorului.

2. Registrii portului serial

Adrese porturi si IRQ


T R
E S
Nume
COM 1
COM 2
Adresa
3F8
2F8
IRQ
4
3

R
COM 3 3E8 4
COM 4 2E8 3

Acestea sunt adresele standard pentru majoritatea PC-urilor. Asemenea porturilor


LPT, adresele de baza pentru porturie COM pot fi citite din zona de date a BIOS-ului
Adresa de început Funcţie
0000:0400 Adresa de inceput COM1
0000:0402 Adresa de inceput COM2
0000:0404 Adresa de inceput COM3
0000:0406 Adresa de inceput COM4

Acestea sunt adresele de baza pentru porturile COM (COMMUNICATION).


Fiecare adresa are cate doi octeţi. Un program care demonstrează cum se pot citi locaţiile
porturilor de comunicaţie de la aceste adrese este următorul:

#include <stdio.h>
#include <dos.h>
void main(void)
{
unsigned int far *ptraddr; /* Pointer la locaţia adresei portului */
unsigned int address; /* Adresa portului */
int a;

ptraddr=(unsigned int far *)0x00000400;

for (a = 0; a < 4; a++)


{ address = *ptraddr;
if (address == 0)
printf("Nu s-a gasit port pentru COM%d \n",a+1);
else
printf("Adresa pentru COM%d este %Xh\n",a+1,address);
*ptraddr++;
}
}

Tabela regiştrilor este următoarea:

Adresa de baza DLAB Read/Write Abr.


=0 Write -
Nume registru

A T
Transmitter Holding Buffer

N
+0 =0 Read - Receiver Buffer
=1 Read/Write - Divisor Latch Low Byte

+1
=0
=1
Read/Write
Read/Write
IER
-

I O
Interrupt Enable Register
Divisor Latch High Byte

+2
-
-
Read
Write FCR
T
IIR Interrupt Identification Register
FIFO Control Register

IC
+3 - Read/Write LCR Line Control Register
+4 - Read/Write MCR Modem Control Register

R
+5 - Read LSR Line Status Register
+6 - Read MSR Modem Status Register
+7

S
Obervatie: Bitul DLAB (Divisor Latch Access Bit)
-

T Read/Write - Scratch Register

E
După cum se observa, exista o coloana in tabela regiştrilor cu numele DLAB.
Atunci când DLAB are valoarea 0 sau 1, anumiţi registri se modifica. Iată cum este

R
posibil ca UART sa aibă 12 registri, deşi exista numai 8 adrese de port. Atunci când
DLAB isi schimba valoarea in „1” folosind registrul de control, doi registri devin
disponibili, cu ajutorul cărora se poate seta viteza comunicaţiei.
UART are nevoie de un cristal care sa oscileze la 1.8432 MHz. UART
incorporează un divizor cu 16 care acţionează asupra semnalelor de ceas. Pentru un
semnal de ceas de 1.8432 MHz, semnalul maxim disponibil este de 115 200 Hz, care este
viteza maxima (115 200 bps) cu care este capabil sa transmita/receptioneze UART.
Aceasta viteza se poate dovedi prea mare in majoritatea cazurilor, de aceea UART are un
generator de rata de baud programabil, controlat de doi registri.
De exemplu, pentru o comunicaţie de 2400bps, 115 200Hz se va împarţi la 48
pentru a obţine 2400Hz. Valoarea 48 este păstrata un doi registri controlaţi de bitul DLAB,
deci valoarea poate avea orice valori intre 0 si 65535. Deoarece UART are magistrala pe doar
8 biţi, cei doi registri stochează octetul cel mai puţin semnificativ (adresa de baza+0 când
DLAB=1) si octetul cel mai semnificativ (adresa de baza+1 când DLAB=1).
Iată un tabel cu viteze tipice si valorile celor doi octeti:
Viteza (BPS) Divizor (Dec) Octet Divizor High Octet Divizor Low
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

Registrul de activare a întreruperilor: Interrupt Enable Register (IER)


Bit Observatii
Bit 7
Bit 6
Bit 5
Rezervat
Rezervat
Activeaza Low Power Mode (16750)
A T
Bit 4
Bit 3
Activeaza Sleep Mode (16750)
Activeaza intreruperea Modem Status
N
Bit 2
Bit 1
I O
Activeaza intreruperea Receiver Line Status
Activeaza intreruperea Transmitter Holding Register Empty
Bit 0

T
Activeaza intreruperea Received Data Available

Acest registru este unul dintre cei mai simpli de inteles. Pozitionarea bitului 0

IC
in starea „1” activează întreruperea Received Data Available (data recepţionata
disponibila) care apare când registrii de receptie/FIFO conţin date care pot fi citite de

R
procesor. Bitul 1 activează întreruperea Transmit Holding Register Empty. Aceasta
semnalizează procesorul ca buffer-ul de transmisie este gol. Bitul 2 activează întreruperea

T
care semnalizează modificarea stării liniei, iar bitul 3 activează întreruperea care
semnalizează starea modemului.

E S
Registrul de identificare a întreruperii: Interrupt Identification Register (IIR)

R
Bit Observatii
Bits 6 Bit 6 Bit 7
si 7 0 0 FIFO inactiv
0 1 FIFO activ dar nefolosibil
1 1 FIFO acvtiv
Bit 5 FIFO de 64 octeti activat (exclusiv 16750)
Bit 4 Reservat
Bit 3 0 Reservat la 8250, 16450
1 Intrerupere de Time-out in asteptare pentru 16550
Bits 1 Bit 2 Bit 1
si 2 0 0 Modem Status Interrupt
0 1 Transmitter Holding Register Empty Interrupt
1 0 Received Data Available Interrupt
1 1 Receiver Line Status Interrupt
Bit 0 0 Intrerupere in asteptare
1 Nu exista intreruperi in asteptare
Registrul de identificare a întreruperii este un registru din care se poate doar
citi. Biţii 6 si 7 oferă informaţii despre starea buffer-ului FIFO. Când ambii sunt in „0”,
nici un buffer FIFO nu este activ. Când amândoi sunt in „1”, bufferii FIFO sunt activi si
operaţionali.
Bitul 3 indica starea întreruperii de time-out pentru circuitele 16550 sau mai noi.
Bitul 0 indica daca a avut loc sau nu o întrerupere. Daca aceasta a avut loc, starea acesteia
este indicata de bitii 1 si 2. Aceste întreruperi functioneaza pe baza unui mecanism de
prioritati. Ordinea prioritarilor este următoarea, începând cu întreruperea cu prioritate
maxima pana la cea cu prioritate minima: Line Status Interrupt,Data Available Interrupt,
Transmit Register Empty Interrupt si Modem Status Interrupt.

First In / First Out Control Register (FCR)


Bit Observatii
Bits 6 si 7 Bit 7 Bit 6 Nivel de declansare intrerupere
0
0
1
0
1
0
1 Octet
4 Octeti
8 Octeti
A T
Bit 5
1 1 14 Octeti
Activare FIFO de 64 octeti (16750 exclusiv)
N
Bit 4
Bit 3
Reservat

I O
DMA Mode Select. Schimba starea pinilor RXRDY & TXRDY din modul 1 in modul 2.
Bit 2
Bit 1
Stergere FIFO transmisie
Stergere FIFO receptie
T
IC
Bit 0 Activare FIFO

T R
Registrul FIFO este un registru in care se poate doar scrie. Acest registru este
folosit pentru a controla bufferii FIFO care se gasesc in dispozitivele 16550 si mai
recente.

bufferi sunt pierdute.


E S
Bitul 0 activeaza functionarea FIFO de receptie si de transmisie. Scrierea cu 0 a acestui
bit dezactiveaza operatiile de transmisie/receptie a FIFO, deci orice date stocate in acesti

Bitii 1 si 2 controlează ştergerea bufferilor FIFO de receptie si, respectiv, transmisie.


R
Setarea acestor biţi va şterge conţinutul FIFO si nu va afecta registrii de shiftare. Bitii se
autoreseteaza, deci trec automat in starea 0.
Bitul 3 activează DMA pentru 16550 UART si modele mai noi.
Bitii 6 si 7 setează nivelul de activare a bufferului de receptie FIFO. De exemplu, daca bitul 7
este setat in 1, si bitul 6 in 0, atunci nivelul este stabilit la 8 octeti. Cand 8 octeti de date se
regasesc in bufferul de receptie, intreruperea de Received Data Available se activeaza.

Line Control Register (LCR)


Bit 7 1 Divisor Latch Access Bit
0 Access to Receiver buffer, Transmitter buffer & Interrupt Enable Register
Bit 6 Set Break Enable
Bits 3, Bit 5 Bit 4 Bit 3 Parity Select
4 si 5
X X 0 No Parity
0 0 1 Odd Parity
0 1 1 Even Parity
1 0 1 High Parity (Sticky)
1 1 1 Low Parity (Sticky)
Bit 2 Length of Stop Bit
0 One Stop Bit
1 2 Stop bits for words of length 6,7 or 8 bits or 1.5 Stop Bits for Word lengths of 5 bits.
Bits 0 Bit 1 Bit 0 Word Length
si 1
0 0 5 Bits
0 1 6 Bits
1 0 7 Bits
1 1 8 Bits

Registrul de control al liniei seteaza parametrii de baza ai comunicaţiei. Bitul 7


este DLAB (Divisor Latch Access Bit). S-au discutat antetrior functiile acestui bit. Bitul
6 activează pauza transmisiunii. Cand acesta este activ, pinul TD trece in starea „break”
(transmitand doar nivel de 0), lucru care cauzează o pauza in funcţionarea dispozitivului
UART. Trecerea in „0” dezactiveaza starea „break”.
A T
N
Biţii 3,4 si 5 selecteza paritatea. Bitul 5 activează „sticky parity” – functie prin
care bitul de paritate este mereu transmis ca 1 sau ca 0. Pentru acest tip de paritate

I O
detectarea erorilor este foarte slaba, deoarece, daca bitul se afla in starea corespunzătoare
la recepţie, indiferent daca primii biti au avut erori, datele recepţionate sunt interpretate

T
ca fiind corecte. Daca bitul 5 este in starea inactiva, atunci este folosita paritatea normala
doar daca si bitul 3 este setat in 1.

IC
Paritate impara este când numărul de 1 transmişi este impar, iar cea para este
in cazul in care numărul de biţi 1 transmis este par.

R
Desigur ca aceasta modalitate de verificare a corectitudinii transmisiei este
departe de a fi perfecta. Daca doi biti isi modifica valoarea simultan, sa daca mai multi

T
biţi sunt afectaţi, eroarea de paritate nu va avea loc. Iata de ce CRC-32 este folosit

E S
adeseori pentru corectie software.
Bitul 2 indica numărul bitilor folositi de stop. Receptorul insa verifica doar
prezenta primului bit de stop. Bitii 1 si 0 setaza lungimea cuvântului. O valoare de 8 biţi
este cea mai folosita in ziua de azi.

R
Modem Control Register (MCR)

Bit Notes
Bit 7 Reserved
Bit 6 Reserved
Bit 5 Autoflow Control Enabled (16750 only)
Bit 4 LoopBack Mode
Bit 3 Aux Output 2
Bit 2 Aux Output 1
Bit 1 Force Request to Send
Bit 0 Force Data Terminal Ready

In acest registru se poate citi/scrie. Bitul 4 este cel care activeaza modul loopback,
in care intrarea serial (din exterior) este deconectata, iar iesirea seriala este directionata,
intern, catre intrare. DSR, CTS, RI & DCD sut deconectate. DTR, RTS, OUT1 & OUT2 sunt
conectate la intrarile de control ala modemului. Iesirile de control ale modemului sunt plasate
in starea inactiva. Datele care sunt plasate in registrii de transmisie de iesire sunt transferare
intern către bufferul de recepţie. In acest mod poate fi testata functionarea UART.
Ieşirea auxiliara 2 poate fi conectata a circuite externe care controlează procesul
întreruperilor intre UART si procesor. Ieşirea auxiliara 1 este in mod normal deconectata,
dar in anumite situaţii este folosita pentru a comuta intre cristalul de 1.8432MHz si unul
de 4MHz. Biţii 0 si 1 controlează liniile de date corespunzătoare. De exemplu setarea
bitului 1 in „1” activează linia „Request to Send”.

Line Status Register (LSR)


Bit Obs
Bit 7 Error in Received FIFO
Bit 6
Bit 5
Bit 4
Empty Data Holding Registers
Empty Transmitter Holding Register
Break Interrupt

A T
N
Bit 3 Framing Error
Bit 2 Parity Error

O
Bit 1 Overrun Error
Bit 0 Data Ready

T I
Acest registru este unul din care se poate doar citi. Bitul 7 semnaizeaza aparitia
unei erori in bufferul de receptie FIFO. Aceasta poate fi eroare de paritate, de incadrare,

IC
sau o pauza.
La activarea bitului 6 atât registrul de transmisie (care tine datele care urmeaza

R
sa fie transmise) cat si registrul de shiftare (care serializeaza datele primite paralel din
registrul de transmisie) sunt nu conţin date. Aceasta indica faptul ca nu exista nici o

S T
activitate seriala, deci linia de transmisie trebuie sa fie inactiva.
Bitul 5 activ indica doar faptul ca registrul de transmisie este gol. In aceasta situaţie un
nou octet poate fi trimis catre acest registru pentru a fi serializat.

E
Bitul 4 semnalizează întreruperea de break (pauza) in momentul in care linia de receptie
de date este in starea logica 0 pentru mai mult decat durata necesara transmiterii unui

R
cuvant intreg (incluzand bitii de start, paritate si stop).
Eroarea de încadrare are loc cand ultimul bit nu este un bit de stop. Aceasta are
loc de obicei din cauza unei erori de temporizare (viteze diferite pentru UART-ul care
transmite si cel care receptioneaza) si este semnalizata prin bitul 3.
Eroarea de depasire are loc cand programul nu poate citi datele din port
suficient de repede. Daca datele nu au fost scose din bufferul de recepţie, si un alt octet
de date a sosit, atunci ultimul octet recepţionat se va pierde, si va avea loc eroare de
buffer overrun, semnalizata de bitul 2.
Bitul 0 indica faptul ca octetul de date a fost recepţionat si bufferul este gata pentru a fi citit.
Modem Status Register (MSR)

Bitul 0 al registrului de stare a modemului arata o


Bit Obs
modificare in starea liniei Clear to Send, de la
Bit 7 Carrier Detect
ultima citire a acestui registru. Tot modificările
Bit 6 Ring Indicator
sunt semnalizate si de biţii 1 si 3 pentru liniile
Bit 5 Data Set Ready
corespunzătoare. Bitul 2 indica trecerea in starea
Bit 4 Clear To Send
activa a liniei „Ring Indicator”. Bitii 4 pana la 7
Bit 3 Delta Data Carrier Detect
arata starea liniilor de date astfel: Bit 7 - Carrier
Bit 2 Trailing Edge Ring Indicator
Detect, Bit 6 - Ring Indicator, Bit 5 - Data Set
Bit 1 Delta Data Set Ready
Ready si Bit 4 - Clear To Send.
Bit 0 Delta Clear to Send

Scratch Register

stabilita, in afara de cea care ne permite sa identificam tipul circuitului UART:

A T
Acest registru este folosit pentru stocarea unui octet si nu are o funcţie

8250/8250B sau 8250A/16450. Circuitele 8250/8250B s-au dovedit incapabile sa lucreze


la vitezele magistralei calculatoarelor AT.
N
I O
3. Programarea portului serial al PC-ului prin polling sau prin intreruperi

T
Atunci cand se scrie un program de comunicare exista doua metode disponibile.

IC
Prima se numeste polling si consta in interogarea permanenta a UART pentru a vedea daca
au fost recepţionate date, a doua metoda este cea prin intreruperi, in care datele sunt preluate

R
in momentul in care UART atenţionează procesorul ca datele au fost primite. Folosirea
metodei de polling este mai lenta si ocupa mult din puterea de calcul a procesorului, ducand

T
chiar la viteze de transmisie mai reduse, in vreme ce metoda prin intreruperi poate fi folosita

E S
pentru a obţine viteze de comunicaţie mari si pe calculatoare cu putere de calcul mai mica.
Metoda polling nu este insa inutila. Ea poate fi folosita pentru diagnosticare.
Daca nu se cunoaşte adresa, sau ce IRQ este folosit, se poate interoga UART-ul la câteva
adrese diferite, pentru a afla mai întâi care este portul folosit. Odata ce acesta a fost aflat,

R
se pot activa întreruperile una cate una, folosind Programmable Interrupt Controller pana
cand se afla întreruperea necesara.
Iată un exemplu de interogare prin polling:
#include <dos.h>
#include <stdio.h>
#include <conio.h>

#define PORT1 0x3F8

/* Definire adrese de baza port serial */


/* COM1 0x3F8 */
/* COM2 0x2F8 */
/* COM3 0x3E8 */
/* COM4 0x2E8 */

void main(void)
{
int c;
int ch;
outportb(PORT1 + 1 , 0); /* blocare intreruperi - Port1 */

/* PORT 1 - Communication Settings */

outportb(PORT1 + 3 , 0x80); /* setare DLAB ON */


outportb(PORT1 + 0 , 0x03); /* Setare Baud rate - Divisor Latch Low Byte */
/* Default 0x03 = 38,400 BPS */
/* 0x01 = 115,200 BPS */
/* 0x02 = 57,600 BPS */
/* 0x06 = 19,200 BPS */
/* 0x0C = 9,600 BPS */
/* 0x18 = 4,800 BPS */
/* 0x30 = 2,400 BPS */
outportb(PORT1 + 1 , 0x00); /* Setare Baud rate - Divisor Latch High Byte */
outportb(PORT1 + 3 , 0x03); /* 8 Bits, Fara Paritate, 1 Bit Stop */
outportb(PORT1 + 2 , 0xC7); /* FIFO Control Register */
outportb(PORT1 + 4 , 0x0B); /* Activare DTR, RTS, si OUT2 */

printf("\n Exemplu de program pentru folosire COM. Apasati ESC pentru a iesi \n");

do { c = inportb(PORT1 + 5); /* Verificare daca un caracter a fost receptionat */


if (c & 1) {ch = inportb(PORT1); /* Daca da, preia caracterul
printf("%c",ch);} /* Tipareste caracterul pe ecran

if (kbhit()){ch = getch();
*/
*/

/* Daca se apasa o tasta, se preia caracterul */


outportb(PORT1, ch);} /* caracterul este trimis pe portul serial*/
A T
}
N
} while (ch !=27); /* Daca se apasa tasta ESC (ASCII 27) atunci programul se termina */

I O
Iată si un exemplu de program terminal folosind întreruperi. Programul este simplificat pentru intelegerea
funcţionarii.
#include <dos.h>
T
IC
#include <stdio.h>
#include <conio.h>

#define PORT1 0x3F8 /* Adresa portului */

/* Definire adrese de baza port serial */


/* COM1 0x3F8 */
R
#define INTVECT 0x0C /* Com Port IRQ (trebuie schimbata si setarea PIC-ului) */

T
S
/* COM2 0x2F8 */
/* COM3 0x3E8 */
/* COM4 0x2E8 */

int bufferin = 0;
E
R
int bufferout = 0;
char ch;
char buffer[1025];

void interrupt (*oldport1isr)();

void interrupt PORT1INT() /* Rutina de tratare intreruperi - Interrupt Service Routine (ISR) pentru PORT1 */
{
int c;
do { c = inportb(PORT1 + 5);
if (c & 1) {buffer[bufferin] = inportb(PORT1);
bufferin++;
if (bufferin == 1024) {bufferin = 0;}}
}while (c & 1);
outportb(0x20,0x20);
}

void main(void)
{
int c;
outportb(PORT1 + 1 , 0); /* blocare întreruperi - Port1 */
oldport1isr = getvect(INTVECT); /* Salvare vector vechi de întreruperi pentru a fi restaurat mai târziu */
setvect(INTVECT, PORT1INT); /* Setare Interrupt Vector Entry */
/* COM1 - 0x0C */
/* COM2 - 0x0B */
/* COM3 - 0x0C */
/* COM4 - 0x0B */

/* PORT 1 - Communication Settings */


outportb(PORT1 + 3 , 0x80); /* setare DLAB ON */
outportb(PORT1 + 0 , 0x0C); /* setare Baud rate - Divisor Latch Low Byte */
/* implicit: 0x03 = 38,400 BPS */
/* 0x01 = 115,200 BPS */
/* 0x02 = 57,600 BPS */
/* 0x06 = 19,200 BPS */
/* 0x0C = 9,600 BPS */
/* 0x18 = 4,800 BPS */
/* 0x30 = 2,400 BPS */
outportb(PORT1 + 1 , 0x00); /* Setare Baud rate - Divisor Latch High Byte */
outportb(PORT1 + 3 , 0x03); /* 8 Bits, Fara Paritate, 1 Bit de Stop */
outportb(PORT1 + 2 , 0xC7); /* FIFO Control Register */
outportb(PORT1 + 4 , 0x0B); /* Activare DTR, RTS, si OUT2 */

outportb(0x21,(inportb(0x21) & 0xEF)); /* Setare Programmable Interrupt Controller */


/* COM1 (IRQ4) - 0xEF */
/* COM2 (IRQ3) - 0xF7 */
/* COM3 (IRQ4) - 0xEF */
/* COM4 (IRQ3) - 0xF7 */
A T
outportb(PORT1 + 1 , 0x01); /* Interupere cand datele sunt receptionate*/

N
O
printf("\n Exemplu de program pentru folosire COM. Apasati ESC pentru a iesi \n");

do {if (bufferin != bufferout){ch = buffer[bufferout];


bufferout++;

T I
if (bufferout == 1024) {bufferout = 0;}
printf("%c",ch);}

IC
if (kbhit()){c = getch();
outportb(PORT1, c);}
} while (c !=27);

outportb(PORT1 + 1 , 0);

T R
/* blocare întreruperi - Port1 */
outportb(0x21,(inportb(0x21) | 0x10)); /* mascare IRQ folosind PIC */
/* COM1 (IRQ4) - 0x10
/* COM2 (IRQ3) - 0x08
*/
*/

S
/* COM3 (IRQ4) - 0x10 */
/* COM4 (IRQ3) - 0x08 */
setvect(INTVECT, oldport1isr); /* Restaurarea vechiului vector de întreruperi */

}
E
R
Pentru ca mecanismul de întreruperi sa funcţioneze, trebuie sa cunoaştem ce
valori au acestea. Tabelul următor ilustrează adresele de baza si IRQ-urile pentru câteva
porturi standard. IRQ 3 si 4 sunt cele mai folosite cel mai des, si mai rar 5 si 7.
INT (Hex) IRQ Common Uses
08 0 System Timer
09 1 Keyboard
0A 2 Redirected
0B 3 Serial Comms. COM2/COM4
0C 4 Serial Comms. COM1/COM3
0D 5 Reserved/Sound Card
0E 6 Floppy Disk Controller
0F 7 Parallel Comms.
70 8 Real Time Clock
71 9 Reserved
72 10 Reserved
73 11 Reserved
74 12 PS/2 Mouse
75 13 Maths Co-Processor
76 14 Hard Disk Drive
77 15 Reserved

Restul întreruperilor (in număr de 240) nu prezint interes in programarea comunicaţiilor RS-232.

Vectori de întreruperi

Atunci când am aflat IRQ-ul folosit, pasul următor este cel de a afla vectorul
de întreruperi folosit. Orice procesor compatibil 8086 are un set de 256 întreruperi,

rutinei serviciului de întreruperi (Interrupt Service Routine).


A T
numerotate de la 0 la 255. Fiecare dintre ei conţine un cod de 4 octeţi care este adresa

De exemplu, folosirea COM3 care are IRQ 4, atunci vectorul de întreruperi ar

N
fi 0Ch. Folosind C vom seta acest vector cu instrucţiunea setvect(0x0C, PORT1INT);
unde PORT1INT ne conduce către zona de tratare a întreruperii.

I O
Totuşi, in primul rând este recomandata salvarea adresei vectorilor vechi, apoi
sa o restauram la terminarea programului. Acest lucru se face folosind:
oldport1isr = getvect(INTVECT);
T
in care oldport1isr este definit cu interrupt (*oldport1isr)();

IC
Este de asemenea recomandata nu numai stocarea vechii adrese a vectorului,
dar si configurarea in care era UART. Acest lucru este necesar pentru eventuale programe
externe care folosesc portul serial.

Interrupt Service Routine (ISR)


T R
E S
După cu am arătat, PORT1INT este eticheta pentru rutina de tratare a întreruperilor,
numita Interrupt Service Routine (ISR). Aici se poate scrie aproape orice cod. Apelarea

R
anumitor rutine DOS se poate dovedi insa o problema.
void interrupt PORT1INT()
{ int c;
do { c = inportb(PORT1 + 5);
if (c & 1) { buffer[bufferin] = inportb(PORT1);
bufferin++;
if (bufferin == 1024) bufferin = 0;
}
} while (c & 1);
outportb(0x20,0x20);
}
Aşa cum se vede in acest exemplu, se verifica daca este vreun caracter
recepţionat, si daca este cazul, îl luam si il plasam intr-un buffer in memorie. Ultima linie
contine instrucţiunea outportb(0x20,0x20); care spune Programmable Interrupt
Controller ca întreruperea s-a terminat. Acum trebuie sa urmărim Programmable Interrupt
Controller. Toate rutinele de mai sus, odată executate, presupun ca toţi registrii UART
sunt corect configuraţi cat si Programmable Interrupt Controller.
Programmable Interrupt Controller tratează întreruperile hardware. Majoritatea
PC-urilor au doua, plasate la adrese diferite. Una tratează IRQ-urile de la 0 la 7 si cealaltă
de la 8 la 15. Multe întreruperi de comunicaţii seriale se regăsesc sub IRQ 7, deci PIC1
este folosit, plasat la adresa 0x20h
Bit Disable IRQ Function
7 IRQ7 Parallel Port
6 IRQ6 Floppy Disk Controller
5 IRQ5 Reserved/Sound Card
4 IRQ4 Serial Port
3 IRQ3 Serial Port
2 IRQ2 PIC2
1 IRQ1 Keyboard
0 IRQ0 System Timer

A T
Porturile multi-COM au devenit destul de comune, iată de ce tabelul următor include
datele pentru PIC2, care este plasat la0xA0. PIC2 răspunde de IRQ 8 – 15. Operează in
mod similar cu PIC1, cu excepţia ca EOI (End of Interrupt) este la portul 0xA0 in vreme
ce mascarea IRQ-urilor se face folosind portul 0xA1.
Bit Disable IRQ
N
Function
7
6
IRQ15
IRQ14
Reserved

I
Hard Disk DriveO
5
4
IRQ13
IRQ12
T
Maths Co-Processor
PS/2 Mouse

IC
3 IRQ11 Reserved
2 IRQ10 Reserved
1
0
IRQ9
IRQ8

T R IRQ2
Real Time Clock

S
Cea mai mare parte a iniţializării este făcuta de BIOS. Tot ce mai trebuie
urmărit este reprezentat de doua instrucţiuni:

E
• Prima instrucţiune este cea care selectează ce întreruperi vrem sa mascăm:

R
outportb(0x21,(inportb(0x21) & 0xEF); Pentru a activa IRQ4 trebuie sa modificam doar
bitul corespunzător; IRQ-urile 7,6,5,3,2,1,si 0 trebuie dezactivate, de aceea este folosita
pentru mascare valoarea 0xEF(11101111).
Ce se întâmpla daca unul din aceste IRQ-uri este deja activat si dorim sa îl dezactivam?
Se introduce valoarea registrului, se foloseşte funcţia SI si se trimite octetul înapoi in
registru folosind instrucţiunea: outportb(0x21,(inportb(0x21) & 0xEF));. De exemplu
daca IRQ5 este deja activat înainte de execuţia programului nostru, atunci, prin activarea
lui IRQ4 rezulta ca ambele IRQ vor fi activate. Acest lucru este necesar pentru a nu
afecta alte programe rezidente in memorie care pot lucra si ele cu portul serial.
• A doua instrucţiune care trebuie urmărita este outportb(0x20,0x20); care
semnalizează sfarsitul intreruperii care PIC. Se poate foosi aceasta comanda pentru
terminarea rutinei de tratare a întreruperii, astfel încât întreruperile de prioritate mai mica
sa fie acceptate.

Configurarea UART
Pentru început este recomandata dezactivarea generării de întreruperi pentru
UART cu prima instrucţiune executata, pentru ca procesul de iniţializare sa nu fie
fragmentat de întreruperi Apoi trebuie setaţi vectorii de întreruperi. Pasul următor este
setarea vitezei de comunicaţie. Daca va aduceţi aminte care sunt paşii ce trebuie
executaţi, trebuie setat bitul 7 (DLAB) din LCR pentru a putea accesa biţii high si low ai
divizorului de frecventa. Ne-am hotărât asupra unei viteze de 38400bps care este
acceptata atât de 16450 cat si de 16550. Aceasta are nevoie de un divizor cu 3,deci
octetul high este 0x00 si octetul low este 0x03.
In standardele moderne octetul high al divizorului este rar folosit, insa este
necesar sa scriem 0x00 in registru, pentru a ne asigura ca programul anterior nu a setat
viteza la o valoare foarte mica. De obicei doar BIOS-ul setează UART la 2400 bps atunci
când calculatorul porneşte si chiar si aceasta valoare nu solicita octetul high al
divizorului.

T
Următorul pas este dezactivarea accesului la divizorul de frecventa pentru a
avea acces la Registrul de Activare a Intreruperilor si la bufferii de transmisie/receptie.

A
Am putea scrie direct 0x00 in registru pentru a-l sterge complet, insa, deoarece este

N
nevoie sa setam lungimea cuvântului, paritatea, etc. in registrul de control, putem sa
facem aceste lucruri simultan. O setare des folosita astazi este cea de lungime 8 biti, fara

I O
paritate si 1 bit de stop, deci valoarea scrisa este de 0x03 in registrul de control de linie
(care va dezactiva si DLAB, scutindu-ne de o instructiune). Instructiunea urmatoare

T
activeaza bufferii FIFO. Nivelul de semnalizare il vom seta la 14 octeti, deci bitii 6 si 7
sunt setati. Bufferii sunt activaţi cu bitul 0. De multe ori este bine sa stergem acesti

IC
bufferi la iniţializare, prin acţionarea biţilor corespunzători. Aceştia sunt cu autoresetare,
deci nu mai trebuie sa intervenim asupra lor ulterior. Valoarea rezultata va fi de 0xC7.

R
In continuare trebuie actionati DTR, RTS si OUT 2 prin folosirea instructiunii:
outportb(PORT1 + 4,0x0B);. Anumite porturi seriale necesita OUT2 activ pentru careri

T
de întrerupere, deci in acest caz acesta trebuie setat. Tot ce a mai ramas de facut este sa

E S
setam întreruperile. Vom seta întreruperile astfel încât URT sa ne atentioneze despre
recepţia datelor.
Rutina de baza va fi următoarea:
do { if (bufferin != bufferout){

R
ch = buffer[bufferout];
bufferout++;
if (bufferout == 1024) bufferout = 0;
printf("%c",ch);
}
if (kbhit()){
c = getch();
outportb(PORT1, c);
}
} while (c !=27);

Aceasta se executa pana când c=27 (se apasa tasta ESC) Instructiunea „if”
testeaza daca a fost apasato o tasta. Caracterul recepţionat cu getch() este trimis catre
bufferul de transmisie, apoi UART îl serializeaza. Ce am presupus in acest program este
ca persoana care tasteaza nu face acest lucru mai rapid decat poate UART sa transmită.
Totuşi, pentru siguranţa, trebuie făcuta o verificare pentru a vedea daca bitul 5 din Line
Status Register este setat înainte de a trimite un octet catre registrul de transmisie.

Determinarea tipului UART prin software

Aceasta determinare se poate face bazându-ne pe diferentele de caracteristici


intre diferitele tipuri de UART.
Primul lucru care trebuie făcut este sa setam bitul 1 din registrul de control
FIFO. Aceasta încearcă activarea bufferilor FIFO. Se citesc apoi bitii 6 si 7 din registrul
de identificare a întreruperilor. Daca ambii sunt 1, atunci bufferii FIFO sunt activaţi.
Acest lucru este caracteristic pentru 16550a. Daca bufferii sunt activi dar nu pot fi
folosiţi, atunci circuitul este 16550. Daca nu se activează nici un buffer, atunci este vorba
de UART 16450 sau de unul din circutele mai vechi: 8250, 8250A or 8250B.
Calculatoarele compatibile AT au bus-ul foarte rapid, lucru greu tolerat de circuitele din

T
seria UART 8250, de aceea nu le regăsim in mod curent in calculatoare. Diferenţa intre
acestea se poate face prin citirea registrului „scratch register”: Daca se poate citi din

A
acesta, atunci circuitul este de tipul 16450 sau 8250 (amândouă poseda acest tip de

N
registru), daca nu se citeşte octetul scris, atunci este un 8250 sau 8250B.
Circuitul 16750 este cel mai uşor de detectat, prin verificarea activarii

registrului de identificare a întreruperilor (IIR).


I O
registrului de 64 octeţi, prin scrierea in registrul de control FIFO, si, apoi, citirea

4. Conectarea dispozitivelor la portul RS-232


T
IC
Pana in acest moment am privit comunicaţia RS-232 in raport cu PC-ul.

R
Comunicaţia RS-232 este asincrona, adică nu este trimis semnal de ceas cu datele.
Cuvântul transmis este sincronizat folosind bitul de start, si ceasul intern ce asiguta
temporizarea.
T
E S
R
Asa cum arata diagrama, aceasta este o forma de unda aşteptata la recepţie pentru
o comunicaţie 8N1(8 biti de date, far paritate, 1 bit de stop). Linia seriala nu este folosita
atunci când se afla in starea logica 1(mark state). O tranziţie incepre prin trecerea in zero
pentru semnalizarea bitului de start. Cel mai puţin semnificativ bit este trimis primul.
Deoarece după ultimul bit starea liniei este 0, se intelege ca mai urmează o transmisie de
date. Daca nu mai urmează nimic, atunci linia trebuie trecuta in starea inactiva „1”. Daca
am uitat sa trecem linia in starea inactiva pentru o perioada mai mare decât timpul
necesar transmisiei unui cuvânt, atunci se interpereteaza apariţia unui semnal de break.
Atunci când datele sunt trimise in acest mod, se spune despre ele ca ele sunt
transmise încadrate (framed). Framing error apare atunci când bitul de stop e recepţionat
ca 0 logic.
Diagrama de mai sus este relevanta doa pentru semnalele din UART. RS-232
foloseste tensiuni de +3 pana la +25V pentru a semnala „space” – logic 0, si -3 pana la -
25V pentru a semnala „mark” – logic 1. Dupa trecerea prin convertorul de nivel, semnaul
arata astfel
Acest semnal este întâlnit pe liniile de receptie/transmisie ale portului RS-232,
dar si pe alte linii: RTS, CTS, DCD, DSR, DTR, RTS si RI.
La conectarea dispozitivelor la portul serial trebuie sa avem in vedere ca
acestea necesita nivele compatibile TTL sau CMOS. Atunci primul pas este conversia
semnalelor folosind convertoarele de nivel. Printre cele mai folosite sunt 1488 RS-232
Driver si 1489 RS-232 Receiver. Fiecare conţine 4 invertoare de acelaşi fel, driver sau
receiver. Aceştia necesita doua tensiuni de alimentare de +7.5 pana la +15v si -7.5 pana
la -15v, care se pot dovedi greu de obţinut in circuite ce folosesc doar 5V. Avantajul
acestor circuite este ca sunt foarte ieftine.
Alt circuit des folosit este MAX 232. Acesta are integrat un circuit care ridica
tensiunea la +10V si -10V pornind de la o sursa de 5V.

A T
N
I O
T
IC
T R
E S
Pinii circuitului MAX 232 sunt ilustraţi in figura alăturata, împreuna cu un circuit tipic.

R
Circuitul include doua porturi de recepţie si doua de transmisie in acelaşi
integrat, lucru care se poate dovedi util in aplicaţii. Anumite versiuni ale acestui
dispozitiv includ condensatorii, deci sunt mult mai compacte.
5. Alte standarde seriale

In alte domenii (in special in industrie) se folosesc si alte standarde de


transmisie seriala. Dintre acestea, cele mai importante sunt RS 422 si RS 485. Aceste
standarde nu sunt direct compatibile, insa de multe ori se dovedeşte necesara cunoaşterea
lor si mai ales a metodelor de conversie intre acestea.
RS-232 a devenit cunoscut datorita răspândirii PC-urilor, spre deosebire de RS
422 si RS 485, care sunt folosite in industrie pentru controlul sistemelor si transferul de
date (de dimensiuni mici). Diferenţele intre RS-232 si RS 422 sau RS 485 deriva in
principal din scopul pentru care au fost create.
In RS-232 semnalele sunt reprezentate de nivele de tensiune comparativ cu
nivelul de masa. Exista cate un fir pentru fiecare semnal, împreuna cu semnalul de masa.
Aceasta interfaţa este folositoare pentru transmisii intre doua puncte care comunica la
viteze scăzute. De exemplu, portul COM1 al PC-ului poate fi folosit pentru conectarea

T
mouse-ului, COM2 pentru conectarea modemului, etc.: deci unui port ii corespunde un
singur dispozitiv. Datorita modului in care sunt conectate semnalele, o masa comuna este

A
necesara. Iată de ce lungimea cablurilor este de 30-60 m (limitata de problemele de
interferenţa si de rezistenta cablului).
N
RS422 si RS485 folosesc un principiu diferit: Fiecare semnal foloseşte o linie

I O
de 2 fire torsadate. Transmisia datelor se face prin transmisia diferenţiala a tensiunilor.
Daca am considera semnalele A si B transmise prin liniile torsadate, transmisia unui „0”

T
se face când pe linia A este tensiune pozitiva si pe linia B este tensiune negativa, iar
transmisia unui „1” se face când pe linia B este tensiune pozitiva si pe linia A este

IC
tensiune negativa. Valoarea măsurata este diferenţa de tensiune intre cele doua linii.
Pentru RS422 si RS485 cablul poate fi de pana la 1200 de metri, si circuitele

R
functioneaza cu o rata de transfer de 2.5MB/s
Diferenţa intre RS422 si RS485 este aceea ca, deşi amândouă folosesc

T
transmisia diferenţiala cu valori de +5V si 0V, RS422 este proiectat pentru comunicaţii

E S
intre doua dispozitive, precum R232. RS422 foloseşte doua fire torsadate separate, pe
care datele pot circula simultan in ambele direcţii. RS422 este folosit adesea pentru
extinderea liniilor RS232 la distante mari.
RS485 este folosit in comunicaţii multipunct: mai multe dispozitive pot fi

R
conectate la acelaşi fir (asemeni reţelelor de calculatoare ETHERNET) folosind cablu
coaxial. Majoritatea sistemelor RS485 au o arhitectura client/server, in care fiecare client
are o adresa unica si răspunde doar la pachetele care ii sunt adresate. Aceste pachete
provin in general de la server, care interoghează (polling) dispozitivele client la anumite
intervale de timp.
In majoritatea aplicaţiilor sunt folosite arhitecturile client/server. In anumite
situaţii, insa, este folosita si comunicaţia multiprocesor. In acest mod de lucru exista o
singura linie pentru comunicaţie bidirecţionala, totuşi nu exista master. Toate unitatile
anunţa intenţia de a transfera un pachet de o anumita dimensiune si urmăresc daca datele
au fost transferate si modul in care s-a făcut transferul. Daca apare o eroare, toate
unitatile se opresc din transmisie si monitorizează mediul de transmisie. Acesta este
momentul in care mesajele urgente pot fi transmise. Acest sistem este folosit de
dispozitive care trebuie sa transfere urgent mesaje, fara sa aştepte semnalul circuitului
server pentru a putea face acest lucru. Dezavantajul cestui mod de transmisie este ca
transferul datelor este mai puţin eficient: aproximativ 30% fata de sistemele client/server.
Intr-o arhitectura client/server clientul nu initializeaza niciodată comunicaţia, de
aceea trebuie sa avem grija ca acesta sa selecteze adresele deispozitivelor in mod corect.
RS485 exista in doua versiuni:
• folosind o singura pereche torsadata: toate dispozitivele sunt conectate la aceasta pereche
de fire, deci toate trebuie sa aibă iesiri tristate. Comunicatia se efectueaza pe aceleaşi fire in
ambele direcţii, si este important sa prevenim transmisia simultana a mai multor dispozitive.
• folosind doua perechi torsadate: acum dispozitivele client folosesc cea de a doua
pereche pentru a transmite catre server. Aceasta solutie permite implementarea de sisteme
de comunicatie multipunct. Dispozitivul server trebuie in aceasta configuratie sa
interogheze (polling) toti clientii periodic. Pentru un numar mare de clienti se transferul
de date poate atinge valori foarte mari.
Uneori sistemele RS485 sunt folosite pentru comunicaţie si intre numai doua sisteme. In

A T
acest mod este similar cu RS422, starea de înalta impedanţa nefiind folosita. Singura
diferenţa hardware fata de RS422 este posibititatea setării ieşirii in starea de înalta impedanţa.

Caracteristicile transmisiei RS422/RS485


N
I O
Pentru un sistem RS422/RS485 este nevoie de un circuit de comanda cu iesiri
diferenţiale si altul de recepţie cu intrări diferenţiale. Zgomotele si interferenţele care

T
apar in linie sunt reduse aproape la zero prin faptul ca firele sunt torsadate, iar
interpretarea tensiunii se face diferenţial. Acelasi lucru se poate spune despre

IC
interferenţele datorate celorlalte fire apropiate (crosstalk), sau cele datorate surselor
externe, daca acestea sunt sub nivelul specificat pentru circuitele receptor. Intrarile

R
diferenţiale evita eventualele probleme intre diferentele potentialelor de masa intre
transmitator si receptor. Perechile de fire torsadate, impreuna cu terminatorii speciali care

T
reduc reflexia semnalelor asigura rata de transfer de peste 10Mbit/s la distante de pana la
1km.
S
Exista si un dezavantaj: circuitele RS422/485 sunt mai complexe, deci mai scumpe.

E
Vitezele mari de transfer necesita circuite conectate corect si terminate cu terminatori adecvaţi,

R
lucru problematic in circuitele in care numărul dispozitivelor conectate variază.
In sistemele de transmisie nebalansate, aşa cum este RS232, fiecare semnal este
reprezentat de un nivel de tensiune raportat la masa. De exemplu semnalul TxD al
portului serial al unui PC este in 0 când nu este folosit, si trece din nivelul pozitiv in cel
negativ si invers la transmisia de date. Amplitudinea este intre -15 si -5 in starea 0 si +5
si+15 in starea 1.
Intr-un sistem balansat diferenţial, transmiţătorul generează un semnal intre 2 si
7V intre cele doua ieşiri. Deşi transmiţătorul si receptorul sunt conectate si cu un fir de
masa, acesta nu este folosit pentru a determina nivelul logic al firelor de transmisie.
Transmiţătoarele RS485 au o intrare de Enable care permite setarea ieşirilor in starea de
înalta impedanţa, permitand astfel mai multor dispozitive sa utilizeze aceleaşi fire
torsadate. RS422 de obicei nu asigura aceasta intrare. Nivelele de tensiune care se
regăsesc in mod normal in aceste dispozitive sunt 0, respectiv 5V.
Receptoarele RS422/485 reacţionează la diferentele de tensiune intre cele doua
intrări. Daca diferenţa de tensiune este de peste 200mV, se stabileşte un anumit nivel
logic la receptor, iar daca tensiunea este sub 200mV, nivelul logic este invers.
Figura următoare arata o schema simplificata a conexiunilor unui receptor
pentru o pereche torsadata(firele A si B), si un grafic pentru determinarea nivelului logic.

A T
Schema de conectare a doua circuite RS422/485 extrasa din foile de catalog ale acestei
familii de circuite produse de MAXIM, este prezentata in Anexa 1.

N
O
Standardele EIA pentru RS422 si RS485

T I
Exista doua standarde care descriu circuitele pentru interfatarea diferenţiala:
• EIA-RS422 (Standardul internaţional ITU-T V.11) care defineşte interfeţe punct

IC
la punct cu pana la 10 receptoare pentru un singur transmiţător. Parametrul limitator este
impedanta de intrare a receptorului Ri=4kOhm. 10 receptoare si rezistorul de terminare
asigura incarcarea maxima pentru transmitator.

T R
• EIA-RS 485 (ISO 8482) defineşte impedanţa de intrare a circuitelor RS485 ca
Ri=12kOhm. In acest caz la o singura linie se pot conecta pana la 32 de transmitatoare,
receptoare, sau o combinaţie a acestora. Deoarece transferul este bidirectional este nevoie

E S
de prezenta unui rezistor terminator la ambele capete.
Iata o figura care reprezintă comparativ cele doua standarde: RS 422 si RS485:

R
Diferenţa de potenţial fata de masa este de maxim +/- 7V, conform EIA-RS 422.
EIA-RS 485 defineşte gama maxima de tensiuni la intrarea receptorului (referinta fata de
masa + diferenţa de potenţial) intre -7V si +12V. Circuitele RS 422/482 au protecţie la
scurt-circuit. EIA-RS 422 defineşte ca scurt-circuit orice curent care depăşeşte 150mA
intre firele A si B (torsadate) sau fata de masa. EIA-RS 485 defineşte ca scurt-circuit
orice curent care depăşeşte 250mA intre A si B.

Legătura la masa pentru RS 422/485

Pentru funcţionarea corecta a transmiţătorului si a receptorului, este nevoie de un


traseu de masa intre dispozitivele conectate. Acest lucru se poate face prin folosirea unui
al treilea fir, sau prin legarea la masa a fiecărui dispozitiv. Daca se foloseşte al treilea fir,
trebuie conectaţi in serie rezistori de aproximativ 1KOhm pentru eliminarea curenţilor
nedoriti rezultaţi din diferentele de potenţial intre diferitele circuite.

A T
N
I O
T
IC
T R
Caracteristici ale transferului de date

E S
Terminarea liniilor este esenţiala pentru RS422/485 in special pentru viteze mari
de transfer si lungimi mari ale cablurilor. Pentru RS422 terminarea este destul de simpla

R
(un rezistor de 100 mde ohmi este conectat la sfarsitul liniei). Daca sunt mai multe
dispozitive conectate, atunci rezistenta poate sa fie mai mare. Valoarea ei se poate
determina, deoarece se cunoaşte impedanţa de intrare a receptoarelor.
Pentru RS485 terminarea este mai complexa. Deoarece fiecare dispozitiv
comunica bidirecţional (versiunea cu o singura pereche torsadata), nu este posibila
localizarea transmitatorului si a receptorului (deoarece se schimba constant). Prin urmare,
ambele capete ale liniei trebuie terminate cu rezistente de 100 Ohmi. Lucrurile nu sunt
insa aşa de simple: deoarece toate dispozitivele au ieşiri tristate, exista situaţii (de obicei
la schimbarea direcţiei de transmisie a datelor) in care toţi transmitatorii sunt in starea de
înalta impedanţa, si linia, datorita terminatorilor, este intr-o stare nedefinita. Este indicat
in asemenea situaţii sa se definească starea |”idle”: Vab<-200mV.
Figura de mai jos prezintă un circuit care rezolva aceasta problema a valorii
rezistorilor de terminare. Valorile sunt calculate pentru a permite un numar maxim de
dispozitive(32) cu impedantele de intrare de 12kOhmi conectate la o singura linie.
Trebuie observat ca sunt numai doi rezistori terminatori la sfarsitul cablului (aceştia
putând fi incluşi in ultimul dispozitiv conectat).

Viteze maxime de transfer

Graficul următor arata dependenta vitezei de transfer de cativa factori importanţi.


1. viteza maxima de transfer pe distante mici, in care influenta liniei poate fi
neglijata, este determinata de parametrii de ieşire ai transmitatorului. O
importanta mare o are durata de creştere/scadere a fronturilor. In mod standard se
pot atinge viteze de 10Mbiti/secunda, dar circuite mai noi precum SN76ALS176,
pot atinge chiar 25Mbiti/secunda.
2. daca lungimea liniilor depăşeşte 10m, trebuie luata in considerare pierderea
datorata de efectul capacitiv al liniilor (datorat scurgerii curentului doar la
suparafata conductorului). Pentru cabluri torsadate se poate stabili o regula

T
aproximativa asupra vitezei de transfer: produsul dintre aceasta (exprimata in
Mbiti/s) si distanta exprimata in in metri este mai mic de 108. In concluzie, pentru
un cablu de 100m viteza maxima de transfer este de 1Mbit/s.
A
N
3. limitări pentru cabluri lungi, datorate rezistentei liniei, deci datorate apariţiei
atenuării. Lungimea maxima a cablului este determinata de rezistenta acestuia,

I O
care trebuie sa fie mai mica decât impedanţa liniei – 100 Ohmi. Cablul torsadat
standard, cu diametrul 2x0.6mm are o rezistenta de aproximativ 100W/Km.
Trebuie luata in considerare si capacitate cablului:
T
Data transfer speed 1200bd 2400bd 4800bd 9600bd 19200bd 38400bd 57600bd 115200bd

IC
Max. cable capacity 250nF 120nF 60nF 30nF 15nF 750pF 500pF 250pF

T R
E S
R

Protocoale folosite pentru conexiuni RS422/RS485

In cadrul acestui capitol nu putem prezenta decât generalităţi, pentru ca in


majoritatea cazurilor protocoalele sunt concepute in funcţie de cerinţele aplicaţiei care se
cere realizata. RS 422 este proiectat pentru conexiuni punct la punct similar cu RS 232.
Totusi sunt anumite particularităţi de care software-ul trebuie sa tina cont. In primul rând
mediul de transmisie al datelor trebuie conectat la staţii individuale, pentru a nu exista
coliziuni iar viteza de răspuns a acestora este suficient de mare.
Trebuie ţinut cont ca un singur canal este disponibil pentru comunicaţie, care
trebuie sa transfere atât informaţiile de sincronizare cat si datele. Software-ul trebuie sa
transforme octeţii de date (fiecare octet de dimensiunea egala cu octeţii de sincronizare)
intr-o anumita secvenţa, folosita de protocoalele de comunicaţie. Se pot folosi oricare din
protocoalele de mare viteza de tip SDLC/HDLC. In cazul in care aplicaţia are nevoie de
transfer de date la viteze mici (ex. 115200bps), putem folosi foratul RS232 pentru
sincronizarea la nivel de bit si de octet. Aceasta soluţie reduce mult din complexitatea
programării, in special in cazul in care circuitul master este PC-ul, iar circuitul slave este
dotat cu un integrat compatibil 8051.
Din punct de vedere al conectivităţii, RS 485 incorporează o tehnologie de tip
magistrala. Deoarece dispozitivele client nu au dreptul sa iniţieze comunicaţia fara riscul
apariţiei coliziunilor, lor trebuie sa li se asigure dreptul de transmisiune de către

T
dispozitivul server. Atunci când serverul întreabă clientul daca doreşte sa transmită,
acesta poate răspunde in doua moduri: fie începe sa transmită imediat, fie trimite un

A
pachet de confirmare a faptului ca nu are nimic de transmis. Sistemul convine pentru

N
sisteme multipunct cu un număr de maxim 100 dispozitive, deoarece pentru un număr
mai mare sistemul devine prea lent. Pentru o rata de transfer de 115200bps si 100 de staţii
viteza de reacţie se apropie de 0.5s.

I O
In sistemele in care dispozitivul server nu are funcţie prioritara, viteza de transfer

T
este foarte scăzuta, sau numărul staţiilor participante este foarte mare, tehnici diferite de
transmisie trebuie folosite. De exemplu, tehnica ALOHA de transmisie poate fi folosita:

IC
orice staţie poate transmite in orice moment. Daca din cauza coliziunilor nu primeşte
confirmare la transmisia efectuata, aceasta retransmite. In mod normal metoda foloseşte

R
doar 18% din latimea de banda disponibila, dar daca numărul staţiilor este mare si durata
unui transfer este mare, atunci transferul poate sa scadă foarte mult. Pentru dispozitivele

T
RS 485 care au si posibilitatea monitorizării mediului de transmisie, se poate implementa

E S
o metoda mai sofisticata, care detectează prezenta transferului de date pe linia de
comunicaţie. In acest caz staţiile transmit doar daca mediul de transmisie nu este folosit.
In ambele cazuri trebuie folosite procedee software de detecţie a erorilor, pentru a fi
siguri ca datele au fost transferate corect (de exemplu CRC).

R
Câteva din circuite folosite in industrie sunt următoarele:
MAXIM - MAX481, 483, 485, 487, 491
National Semiconductors - DS3695A
Texas Instruments - SN 7517X,
Anexa 1
RS-485/RS-422 Transceivers

Circuitele MAX481, MAX483, MAX485,


MAX487–MAX491, si MAX1487 sunt circuite
transceiver de putere scăzuta pentru comunicaţie RS-
485 si RS-422. Fiecare circuit conţine un driver si un
receptor.

A T
N
I O
Iată schema de conectare a doua circuite extrasa din foile de catalog ale acestei familii.

T
IC
T R
E S Descriere pini

R
RE Receiver Output Enable. RO is enabled when RE is low; RO is high impedance when RE is high.
Driver Output Enable. The driver outputs, Y and Z, are enabled by bringing DE high. They are high
impedance when DE is low. If the driver outputs are enabled, the parts function as line drivers. While
DE they are high impedance, they function as line receivers if RE is low.
Driver Input. A low on DI forces output Y low and output Z high. Similarly, a high on DI forces output Y
DI high and output Z low.
GND Ground
Y Noninverting Driver Output
Z Inverting Driver Output
A Noninverting Receiver Input and Noninverting Driver Output
A Noninverting Receiver Input
B Inverting Receiver Input and Inverting Driver Output
B Inverting Receiver Input
VCC Positive Supply: 4.75V ≤ VCC ≤ 5.25V
N.C. No Connect—not internally connected
RO Receiver Output: If A > B by 200mV, RO will be high; If A < B by 200mV, RO will be low.
LABORATOR 6

USB
USB a fost inventat si standardizat de către un grup de producători de calculatoare
si echipamente periferice in 1995. Idea era sa se aducă întreaga gama de porturi seriale si
de magistrale seriale la nivelul tehnologiei secolului 21. USB 2.0 a apărut in 2000 si
revizuieşte anumite caracteristici ale standardului pentru a mari viteza de transmisie a
datelor si a-l adapta la cerinţele sistemelor multimedia moderne.
Este adevărat ca la momentul apariţiei USB-ului existau mai multe standarde de
comunicare intre computerul gazda si echipamentele periferice, dar ţinta era crearea unei
tehnologii care sa combine activitatile magistalelor de viteza redusa si de viteza mare.
Tehnologia permite accesul la ambele viteze, o tehnologie care asigura protocol sigur,

T
solid, configurarea automata a dispozitivelor si o magistrala seriala care este mult
simplificat si uşor de conectat. Toate aceste cerinţe au fost îndeplinite de către USB.

A
USB a devenit foarte popular in ceea ce priveşte extinderea către PC-uri. Este

N
important sa amintim ca USB nu este un port serial, ci o magistrala seriala, un lucru care
permite unui singur port pe computer sa fie o legătura pentru o multitudine de mecanisme

I O
si dispozitive (pana la 127 de dispozitive in sistemul USB).Putem lega uşor un dispozitiv
de altul si sa folosim un singur port ca un punct de legătura pentru multe dispozitive prin

T
simpla folosire a unui hub. Toate acestea ne permit sa privim sistemul USB ca pe o mica
reţea de dispozitive.

IC
Capacitatea ”plug-and-play” a USB-ului este unul din marile avantaje fata de alte
magistrale seriale. Aceasta capacitate permite detectarea automata a unui nou dispozitiv

R
care este introdus in sistem, o configurare automata a sa de către gazda si o detectare
automata a decuplării de la sistem. Cuplarea si decuplarea uşoara a dispozitivelor la si din

T
sistem permit mobilitatea pe magistrala si asigurarea sistemului la noile dispozitive fara a

E S
fi nevoie sa repornim întregul sistem de fiecare data când un nou dispozitiv este detectat.
O alta caracteristica importanta a USB-ului este flexibilitatea la viteze medii si
mari. Aceste aspect se refera la posibilitatea USB-ului de a suporta simultan dispozitive
de viteza medie (care lucrează in 1.5 Mbps) si dispozitive de viteza mare(12 Mbps si
400Mbps).
R
Capacitatea dispozitivelor USB de funcţiona in paralel isi gaseste utilizarea in
susţinerea atât a metodelor de alocare de banda isocronă si asincronă. Isocron înseamnă
dependent de timp (data este transferata intre anumite constrângeri temporale – spre
deosebire de transmisiile sincrone in care constrângerile de timp sunt mult mai stricte),
adică lăţimea necesară de bandă este garantată, oricând o cere dispozitivul fiind
disponibila. Pe de altă parte, asincron înseamnă ca nu exista nici o garanţie a momentului
transmisiei - datele vor fi transmise in momentul in care este posibil sa fie transmise.
Dispozitivele multimedia video si audio care folosesc transferul in flux de date, vor folosi
metoda isocronă in timp ce generează transfer de tip ‘bulk’(la grămadă), aşa cum e cazul
imprimantelor si scanerelor.
USB este o magistrala sigură: in orice nivel al protocolului exista un mecanism de
detectare si corecţie a erorilor ceea ce permite o rată scăzută a acestora. USB permite
depistarea dispozitivelor defecte si realizează mecanismul de control al fluxului chiar prin
modul in care este construit protocolul.
SISTEM TIPIC USB

A T
Alte tehnologii au început sa apară pe piaţa, de exemplu Wireless USB, care promit
performante foarte bune, insa ele sunt doar la nivel de standard, implementările urmând

N
sa apară in viitorul apropiat. USB este cea mai folosita interfaţa din istoria
calculatoarelor, având in momentul de fata o baza instalata de zeci de milioane de

I O
calculatoare si se bucura de un sprijin puternic din partea diferitelor segmente ale pieţei.
Wireless USB se bazează pe succesul USB-ului prin fir si se focalizează asupra

T
transmisiilor de mare viteza pe distante scurte, oferind viteza de pana la 480Mbps. In
acest sens este considerat un viitor înlocuitor al tehnologiei Bluetooth.

UN SISTEM TIPIC USB CONSTA IN :


IC
T R
O gazda (host) - nu exista decât o singura gazda in sistemul USB, care este
responsabila cu întregul protocol complex (astfel se simplifica proiectarea perifericelor

S
USB). Gazda controlează accesul la mediul de transmisie - nimeni nu poate accesa
magistrala de date daca nu a primit aprobarea de la host.

E
Hub-ul, are rol asemănător ‘hub’-urilor folosite in reţelele de calculatoare. Hub-ul

R
asigura un punct de interconectare care permite mai multor dispozitive sa fie conectate la
un singur port USB. Topologia logica a USB-ului are o structura stelara iar toate
dispozitivele sunt conectate (logic) direct la gazdă. Concatenarea de ‘hub’-uri este
transparentă pentru dispozitiv (numărul de ‘hub’-uri prin care trebuie sa treacă datele).
’Hub’-ul este conectat intre gazda si dispozitivul USB (datele ‘curg’ in jos de la gazda la
dispozitiv). Responsabilitatea principala a ‘hub’-urilor este aceea de a detecta conectarea
sau o deconectarea dispozitivelor, având grija de managementul energiei pentru
dispozitivele care sunt alimentate de la magistrala (obţin energie de la bus) si răspund la
erorile magistralei pe care le si corectează. Un alt rol important al ‘hub’-ului este acela de
a coordona atât dispozitivele de viteza mica sau la viteza maxima. Când un dispozitiv
este conectat la sistem, ‘hub’-ul determină viteza la care operează acesta si pe toata
durata comunicării prin magistrala previne trecerea de la viteza mare la viteza mica si
vice-versa.
Dispozitivul - orice mecanism in sistemul USB care este o gazda este un
dispozitiv(inclusiv ‘hub-urile’). Un dispozitiv asigura una sau mai multe funcţii ale USB.
Majoritatea dispozitivelor asigura doar o funcţie, dar pot fi unele care asigura mai multe
funcţii si care se numesc dispozitive complexe(compuse). Există două tipuri de
dispozitive – cele care au alimentare proprie sau cele care sunt alimentate de magistrala
USB. Un dispozitiv care isi ia energie de la magistrala USB se numeste ‘bus powered’ iar
un dispozitiv care isi asigura singur energia este ‘self powered’. Aşa cum am mai
precizat, avem de-a face cu trei tipuri de dispozitive :
- cele care operează la 400Mbps(Hi-speed) USB 2.0
- cele care operează la 12Mbps(Full-speed) USB 1.1
- cele care operează la 1.5Mbps(Low-speed) USB 1.0
USB foloseşte mai multe tipuri de conectori:

A T
(a)
N (b)
Conector de tip A (conectat la calculator) si conector de tip B (conectat la dispozitivul periferic).

I O
Un periferic USB precum mouse-ul sau tastatura are nevoie de numai 1.5Mbps

T
pentru a funcţiona. Vitezele mai mari sunt necesare pentru transferul de informaţii cu
unităţile de stocare a datelor: HDD, memory card, camere video USB, etc.

NIVELURILE DE COMUNICARE USB


IC
R
Modelul nivelurilor de comunicare USB este conform următoarelor specificaţii:

T
E S
R
A T
N
I O
T
IC
FLUXUL DE COMUNICARE USB

Comunicarea logică intre softul client pe gazda si funcţia dispozitivului se face prin

softul adecvat de pe gazda.


T R
‘conducte’ (pipe). Un pipe este o asociere intre un anumit endpoint al dispozitivului si

Endpoint-ul este sursa sau destinaţia datelor transmise prin canalul USB. O interfaţa

E S
este compusa din endpoint-uri grupate intr-un set bine determinat. Softul client doreşte sa
transmită datele intre buffer-ii din gazda si endpoint-urile din dispozitive si astfel se
realizează respectiva interfaţa (care este asociata anumitor endpoint-uri).

R
Fluxul informaţional pe magistrala poate fi realizat in doua direcţii :
- OUT (afara) - datele sunt transferate dinspre gazda spre dispozitiv
- IN (înăuntru) - datele sunt transferate de la dispozitiv către gazda

I. NIVELUL FIZIC
Semnalizarea pe magistrala

Nivelul fizic este o interfaţa fizică pentru cablul USB. Principala sarcina a nivelului
fizic este aceea de a transmite si recepţiona 0 si 1 logic drept nivele de tensiune
corespunzătoare.
Cablul USB este format din 4 fire, iar semnalizarea pe bus este pe doua fire
(pereche diferenţială). Exista un fir D+ si un fir D-, astfel încât daca vrem sa transmitem
‘0’ de pe bus vom menţine D+ jos si D- sus si invers daca vrem sa transmitem ‘1’.
Celelalte doua cabluri sunt Vbus(+5V) si GND(-5V) care asigură curent dispozitivului.
Biţii sunt transmişi pe magistrala începând cu LSB.
Exista câteva tipuri unice de semnalizare pe magistrala:
Reset signaling : gazda poate reseta dispozitivul. Acest lucru este posibil prin
trimiterea SE0 (single ended zero - adică liniile D+ si D sunt tinute in starea low) mai
mult de 2.5µsec. Când dispozitivul recunoaşte asemenea semnătura pe portul superior al
magistralei, îl tratează ca pe un semnal RESET.
Suspend signaling : gazda poate introduce dispozitivul intr-un modul de
suspendare, astfel încât dispozitivul nu va răspunde la traficul USB. Un dispozitiv va
începe tranziţia către modul ‘suspend’ oricând va sesiza o stare de inactivitate pe
magistrala mai mare de 3ms, dispozitivul va fi suspendat, dar nu pentru mai mult de
10ms de inactivitate pe magistrală. Recunoaşterea semnalului pe porturile superioare va
scoate dispozitivul din starea de suspendare.
Resume signaling : un dispozitiv care in modul ‘suspendat’ isi va relua

T
operaţiunile oricând va recunoaşte un semnal K pe magistrală (‘0’ diferenţial pentru
dispozitivele de mare viteza si ‘1’ pentru dispozitivele de mică viteză). De fiecare data

A
când gazda vrea sa ‘trezească’ dispozitivul trimite semnalul RESUME pentru cel puţin

N
20ms. Un dispozitiv poate sa se „trezească” singur - numim aceasta caracteristică ‘remote
wakeup capability’. Aceasta permite dispozitivului aflat in modul ‘suspended’ sa înceapă

I O
transmiterea semnalului K pe magistrala si sa-si reia activitatea proprie.
Semnalizarea EOP : EOP este transmis ca SE0 pe durata a 2 biti (definit diferit

T
pentru dispozitivele de joasa si de mare viteza). Semnalul e urmat de semnalizarea J (‘1’
diferenţial pentru dispozitive de viteza maxima si ‘0’ pentru viteze mici)un bit o data.

IC
Codarea si decodarea se realizează prin metoda NRZI.
In codarea NRZI (Non-Return-to-Zero-Inverted Encoding) dacă vrem sa

R
transmitem ‘1’ nu schimbam nivelul semnalului (daca perechea diferenţiala reprezentarea
‘1’ logic, acesta va rămâne astfel si pentru ceasul următor). Pe de alta parte, dacă dorim

T
să transmitem ‘0’ vom inversa valoarea perechii diferenţiale (va exista o inversare de

E S
nivel astfel încât daca valoarea curentă este ‘1’ următoarea valoare va fi ‘0’).
Unul din efectele codării descrise mai sus este transmiterea unui şir de ‘1’ ce va
genera un mod continuu de transmitere (linia transmiterii va fi statica - nu se va schimba
in acea perioadă). Pentru a preveni o asemenea stare continuă, se face o dopare a biţilor

R
înainte de decodarea NRZI. Acest lucru se realizează prin inserarea unui ‘0’ după un şir
de sase de ‘1’. Decodorul ignora zeroul pe care-l recunoaşte ca parte a dopării biţilor.

SIE - Serial Interface Engine


SIE este parte atât a nivelului fizic al gazdei, cat si al dispozitivului. Datele sunt
transmise pe magistrală ca un şir de biţi in serial. SIE este responsabil pentru serializarea
si deserializarea (convertirea fluxului de date intr-unul paralel) a transmisiilor USB. SIE
este responsabil si de operaţiile de codare si decodare a fluxului de date care intra in
sistem este NRZI si decodat de bitii de dopare fluxul catre exterior este NRZI si codat cu
bitii de dopare. SIE este responsabil si de generare CRC pentru datele de iesire si verifica
CRC pentru datele de intrare. SIE detectează de asemenea PID-ul (ID-ul pachetului ),
precum si semnalizările SOP, EOP, RESET si RESUME de pe magistrala.

HC – Host Controller (Control gazdă)


Gazda este cel mai „deştept” element al sistemului USB şi joacă un rol unic în
sistem. Gazda iniţiază toate operaţiunile, controlează accesul media şi este motorul
principal al fluxului protocolului, aşa cum vom vedea mai târziu. Iată de ce controlerul
gazdă, un element în plus hardware, este necesar pentru a se asigura că tot ce este
transmis pe magistrala este corect şi corespunde specificaţiilor.
Controlerul gazdă deserveşte atât gazdă, cât şi USB-ul şi are aceeaşi funcţionalitate
în fiecare sistem USB. Iată câteva din funcţiile controlerului gazdă:

FRAME GENERATION (Generarea cadrelor) – Controlerul este responsabil cu


partiţionarea timpului USB-ului în unităţi de timp astfel încât numim „frame” (cadru)
fiecare măsură de timp egală cu 1 ms (după transmiterea SOF-ului, controlerul gazdă
poate lucra cu oricare altă tranzacţie din restul cadrului). SOF conţine numărul curent al
cadrului (sau „frame”-ului) care este menţinut de către HC.
DATA PROCESSING (Procesare date) – controlerul gazdă răspunde cererilor de
date către şi dinspre gazdă.
T
PROTOCOL ENGINE (Motor de protocol) – Se ocupă de interfaţa nivelurilor de
protocol ale USB-ului.
A
ar fi:
N
ERROR HANDING (Situaţii de eroare) – controlerul gazdă se ocupă de erori cum

-
- CRC error (eroare CRC);
I O
Timeout – funcţia dispozitivului nu răspunde comenzilor;

-
T
O neaşteptată supraîncărcare a datelor.
REMOTE WAKEUP – controlerul gazdă este capabil să inducă USB-ului o stare

IC
de suspendare şi să detecteze un semnal de reactivare pe bus.

R
II. Nivelul Protocol Engine Layer
T
S
Nivelul mijlociu al modelului nivelurilor de comunicare are un rol important. Acest
nivel este cel care transformă datele între nivelul de aplicaţie (software client pe gazdă şi

E
funcţie dispozitiv) şi protocolul de operaţiuni al USB-ului. Nivelul codează/decodează

R
datele în funcţie de protocol. Acest nivel este denumit diferit in dispozitivul USB gazda
(numit nivel de software de sistem pentru USB), si în cazul dispozitivului periferic
(numit nivel logic al dispozitivului USB). Acest lucru este permis datorită rolurilor
diferite pe care cele două componente le joacă în sistem.

SISTEMUL USB SW
În afară de operaţiunile descrise mai sus, sistemul USB alocă lungimile de bandă şi
controlează alimentarea cu energie a „bus”-ului, permiţând astfel accesul dispozitivului la
magistrală. Sistemul USB SW este compus din software gazdă şi două interfeţe de soft
adiţionale:
Driver al controlerului gazdă (Host Controller Driver - HCD) este o interfata la
controlerul gazdă. Scopul acesteia este de a face transparent pentru software-ul de pe host
la care controller este dispozitivul conectat.
DRIVERE USB (USBD): softul client (adică nivelul superior al nivelului de
comunicare) solicită date de la USBD sub forma IRPs (I/O Request packets) care
presupune solicitarea de transmitere/primire a datelor printr-un anumit pipe. USBD-ul are
rolul de a tratsa aceste solicitări. Un alt rol important al USBD-ului este acela de a oferi
softului client o descriere generală a dispozitivului cu care softului este pe cale să
interacţioneze. USBD-ul trebuie să aibă grijă de procesul de enumerare (un proces care
este activat în momentul în care dispozitivul este ataşat magistralei, iar la sfarsitul
acestuia dispozitivul este configurat complet, dispozitivul este parte integrantă a
sistemului USB şi poate răspunde fluxului de pe magistrală), analizează diversele
configuraţii ale dispozitivului şi oferă aceste „cunoştinţe” softului client. Drept parte a
acestei sarcini, USBD-ul include pipe-ul implicit (cel corespunzător endpoint-ului 0) –
deoarece atunci când un dispozitiv este introdus in sistem, acesta reprezintă singurul mod
de a comunica cu dispozitivul.

Dispozitivul logic USB


Dispozitivul USB logic este compus dintr-o colecţie de endpoint-uri independente.

T
Fiecare punct are o adresă unică (număr) pe un timp stabilit iar dispozitivul logic USB
este adresat în mod unic la finalul procesului de enumerare. Un endpoint este

A
unidirecţional (cu excepţia endpoint-ului zero). Poate fi de tip IN sau de tip OUT (susţine

N
transferul datelor de la gazdă la dispozitiv). Asta înseamnă că pentru fluxuri
bidirecţionale avem nevoie de două endpoint-uri pentru fiecare direcţie în parte.

I O
Combinaţia dintre adresa dispozitivului USB, numărul endpoint-ului şi direcţia acestuia
defineşte în mod unic un endpoint. Acesta este caracterizat de un anumit tip de transfer.

T
Aşa cum vom vedea mai târziu, există 4 tipuri de transfer pe USB, fiecare endpoint fiind
asociat doar cu un tip de transfer, fiind astfel caracterizat de cererea de alocare a lungimii

IC
sale de bandă.
Toate dispozitivele USB trebuie să susţină comunicarea prin pipe-ul implicit.

R
Aceasta joacă un rol important în procesul de enumerare şi este singurul canal de
comunicare cu dispozitivul la momentul ataşării. Este asociat acestui pipe endpoint-ul

T
zero (iată de ce numărul zero ca endpoint trebuie să fie inclus în dispozitiv şi să fie de tip

E S
control). Endpoint-ul zero este de fapt format din două endpoint-uri (unul IN şi altul
OUT) care împart insa acelaşi număr şi referirea la ele se face ca la unul singur.
Dispozitivele cu viteză mică pot susţine două endpoint-uri adiţionale (în afara celui
cu număr zero) care pot fi de tip control sau de tip întrerupere. Dispozitivele cu viteză

R
mare, pe de altă parte, pot susţine până la maxim 15 „puncte finale” de tip IN şi 15 de tip
OUT. Punctele adiţionale pot fi folosite doar după configurarea completă a dispozitivului.

III NIVELUL DE APLICAŢIE

Acesta apare ca soft client în gazdă şi ca funcţie în dispozitiv. Funcţia din dispozitiv
este compusă din mai multe interfeţe şi controlează funcţionarea dispozitivului. Softul
client orientează interfaţa nimerită prin transferul de date din bufferii proprii către
endpoint-urile asociate interfeţei corespunzătoare. Softul client lucrează cu o funcţie
specifică a dispozitivului independent de alte funcţii ale dispozitivului din sistem.

PROTOCOLUL USB
Gazda USB controlează majoritatea complexităţii protocolului USB, ceea ce duce la
costuri reduse şi o structura simpla pentru echipamentele periferice. Fluxul de date poate
fi direcţionat de la gazdă la dispozitiv şi invers. Transferurile USB se fac prin pachete.
Fiecare tranzacţie este compusă, de obicei, din 3 faze:

Token Phase – gazda iniţializează simbolurile indicând tipul viitoarei tranzacţii.


Data phase: datele sunt transmise în pachete. Direcţia datelor coincide cu direcţia
indicată de simbolul transmis anterior.
Handshake phase: (opţional) – pachetul „handshake” este transmis, indicând succesul
sau eşecul tranzacţiei.

USB-ul foloseşte un protocol de tip interogare – „polling”. De fiecare dată când


gazda vrea să primească date de la dispozitiv emite un simbol (un tip de pachet
informaţional pe care îl vom explica mai târziu) – semnal adresat unui dispozitiv anume.
Dacă sunt date de transmis, se transmit după primirea semnalului iar gazda nu răspunde
cu pachetul „handshake” (dacă faza de handshake este inclusă în transfer). Dacă

T
dispozitivul nu are nimic de transmis, gazda emite semnalul către dispozitivul următor.
Dacă, pe de altă parte, gazda doreşte să trimită data către dispozitiv, va transmite
semnalul potrivit şi datele care-i urmează.
A
N
Dispozitivul va răspunde printr-un pachet „handshake” (dacă faza handshake este
inclusă). Din momentul în care gazda termină de transmis datele către dispozitiv va emite

I O
un nou semnal către următorul dispozitiv. Când vorbim despre protocolul USB nu-i
putem trece cu vederea robusteţea. Protocolul include mecanismul de tip handshake,

T
regulile „time-out” (pentru prevenirea blocării sistemului), mecanisme de control şi o rată
a erorilor foarte joasă (<10 – 10). Fiecare pachet transmis pe „bus” include biţi de control

IC
şi protecţie CRC.

R
Există 4 tipuri de transfer USB:
- Transfer BULK (la grămadă): transferul BULK este o cantitate mare de

T
date şi este folosit de dispozitive precum imprimante, scanere, etc. Lăţimea de bandă

foarte mare.
- E S
alocată în fiecare tranzacţie a transferului variază în funcţie de resursele „bus”-ului la
momentul respectiv. Transferurile BULK sunt sigure – atenţia la apariţia erorilor e

Transfer ISOCHRONOUS (sincron): acest transfer (de care am mai

R
vorbit) este folosit pentru dispozitive multimedia (audio, video). O caracteristică
importantă a transferului este că lăţimea de bandă este garantată – banda necesară
este rezervată pentru dispozitivele care folosesc acest tip de transfer. Aici se pune
mai puţin accent pe succesul transferului (dacă toate datele ajung sau nu la timp), de
vreme ce există o toleranţă ridicată faţă de erori.
- Transfer INTERRUPT: acest tip de transfer este cu latenţă limitată şi e
folosit pentru dispozitive precum mouse-ul, joystick-ul – care trebuie să răspundă la
notificări, caracteristici şi coordonate apărute „din scurt”. Un dispozitiv care lucrează
cu acest tip de transfer defineşte intervalul de timp de care are nevoie pentru a trimite
sau primi informaţia (element caracteristic configuraţiei sale).
- Transfer CONTROL: este folosit pentru configurarea unui dispozitiv.
Configurarea se realizează în timpul procesului de enumerare dar poate fi făcută, de
asemenea, în orice moment al procesului de comunicare. Când un dispozitiv nou este
ataşat la sistem gazda are nevoie de date pentru a-l configura – totul prin transferul
de tip CONTROL. Pot fi incluse şi mesaje speciale realizate de către vânzător.
Dispozitivele de viteză mică suportă transferul de tip CONTROL şi INTERRUPT, în
timp ce dispozitivele de mare viteză suportă toate cele 4 tipuri de transfer descrise
mai sus.

Înainte de a învăţa diferitele tipuri de pachete folosite de protocolul USB, să vedem


care sunt câmpurile din pachete:
- Câmpul SYNC: apare la începutul fiecărui pachet. Apare pe „bus” în
aşteptare urmat de „KJKJKJKK” (codare în NRZI). Câmpul SYNC (sincronizare)
permite echipamentelor periferice să-şi sincronizeze ceasul intern la datele de intrare.
Următoarea descriere a pachetelor va ignora acest câmp (pentru simplificare), dar nu
trebuie să uităm de existenţa sa.

- PID: câmpul de identificarea pachetului – conţine datele de identitate ale


pachetului. Deoarece sunt multe tipuri de pachete trebuie să indicăm începutul
pachetului.

A T
Câmpul PID este compus din 8 biţi după cum se va demonstra în diagrama
următoare.
N
O
>>>>>>>>>>>> figura campul PID <<<<<<<<<<<<<<<<<<<

I
T
Primii 4 biţi se folosesc pentru a notifica identitatea pachetului, iar ceilalţi 4 pentru
control (complementari primilor 4 biţi) şi depistarea erorilor.

IC
Tipurile PID sunt împărţite în patru mari grupe:
- SIMBOLURI (semnale) – care pot fi OUT, IN, SOF şi SETUP:

gazdă la dispozitive;

T R
o OUT – indică faptul că datele următoare vor fi transmise de la

o IN – datele vor fi transmise de la dispozitiv la gazdă;

S
o SOF – început frame (secvenţă)
o SETUP – pachetul va fi transmis de la gazdă la dispozitiv şi va

E
conţine comenzi de setare (folosite la configurare)

-
R
DATE: PID-ul „data” apare în pachetele de date. Poate apărea fie sub
forma DATA 0, fie DATA 1, PID diferit fiind folosit pentru ghidarea sincronizării.
- HANDSHAKE – acest PID e folosit în pachetele handshake pentru a
semnala succesul sau eşecul transferului. Poate fi fie ACK, fie NAK sau STALL.
o ACK – receptorul primeşte pachetul fără erori
o NAK – receptorul nu poate primi datele (de exemplu, din cauza
unei probleme de suprasarcină) sau transmiţătorul nu poate trimite datele
(probleme de flux)
o STALL – endpoint specific care este izolat sau comanda specifică
SETUP nu poate fi menţinută.

ADDRESS FIELD (câmpul adresă)


Este împărţit în două câmpuri:
Câmpul ADDRESS (ADDR): acesta conţine adresa funcţiei (de obicei a
dispozitivului) atribuită la procesul de enumerare. Fiecare funcţie din sistem are o adresă
unică şi pot exista într-un sistem până la 127 adrese diferite (adresa zero este rezervată şi
folosită ca adresă iniţială a unei funcţii, de aceea nu este permisă folosirea adresei zero
ca adresă permanentă).

Câmpul ENDPOINT (ENDP): câmpul respectiv conţine numărul referinţelor la


punctele de final. Fiecare punct într-o funcţie specifică este unic şi se identifică printr-un
număr. La dispozitivele cu viteză redusă pot fi două puncte adiţionale (în afară de zero).
Câmpul este folosit în simbolurile OUT, IN, SETUP.

A T
N
I O
FRAME NUMBER FIELD – numărul segmentelor ce constituie câmpul sunt
compuse din 11 biţi care indică secvenţa curentă. Câmpul este conţinut doar de simbolul

T
SOF care indică începutul unei secvenţe.

IC
DATA FIELD - câmpul datelor conţine date transmise în operaţiuni. Acest câmp
poate conţine până la 10223 bytes.

T R
CRC FIELD – CRC (verificare ciclică redundantă) este folosit pentru protejarea
tuturor câmpurilor dintr-un pachet „token” (cu excepţia câmpului PID) şi protejează

E S
datele din pachetele de date. Câmpul CRC într-un pachet „token” este compus din 5 biţi,
în timp ce un câmp de date este compus din 16 biţi.

-
R
Să vedem acum care sunt tipurile de pachete:

PACHET „TOKEN” – fiecare tranzacţie (operaţie) începe prin emiterea unui


semnal de către gazdă. Câmpurile ADDR şi ENDP definesc în mod unic
endpoint-ul care va primi datele în operaţiunile SETUP sau AUT şi specifică şi
endpoint-ul care este pe cale să transmită datele în operaţiunile de tip IN.

- START OF FRAME PACKET – gazda emite un pachet SOF la fiecare


milisecundă, plus sau minus 0,0005 ms. Pachetul conţine câmpul secvenţelor
sincronic de tip OUT.
- DATA PACKET – sunt compuse din PID (ceea ce indică faptul că pachetul este
un pachet de date), câmpul de date care conţine datele ce trebuie transmise şi
CRC 16 pentru protejarea câmpului de date.
- HANDSHAKE PACKETS – sunt compuse doar din PID care indică rezultatele
etapei anterioare. ACK care arată că pachetul a fost trimis fără CRC sau erori,
poate fi folosit în faza „handshake” a transferurilor de tip SETUP sau OUT
(trimise de dispozitiv) sau în transferuri de tip IN (trimise de către gazdă).
- NAK – folosit în controlul fluxului informaţional poate fi transmis în faza
„handshake” pentru transferul de tip OUT şi IN.
- STALL – care indică unele probleme de transfer (scurt circuit între puncte sau
nemenţinerea comenzii de control) – nu este permisă a fi folosită de către gazde.

Tipuri de transfer USB


A T
N
CONTROL TRANSFER – un transfer de control este compus din 3 sau 2 faze:
SETUP, DATA (opţional), STATUS, fiecare din acestea fiind compusă la rândul său din

I O
3 faze (TOKEN, DATA, HANDSHAKE). Rolul etapei SETUP este să indice dispozitivul
care va seta comenzile pe care gazda le va transmite. Există mai multe feluri de comenzi
SETUP cum ar fi:
T
o SET_ADDRESS; stabileşte o adresă permanentă pentru o funcţie;

IC
o GET_DEVICE_DESCRIPTOR: gazda doreşte să primească decodorul
dispozitivului care conţine detalii legate de acesta: câte configuraţii,

R
interfeţe, dacă este cu auto-alimentare, de pe bus etc.
o GET_CONFIGURATION_DESCRIPTOR: gazda vrea să afle o

T
configurare specifică a unui dispozitiv;

E S
o GET_CONFIGURATION: gazda detectează care configuraţie este activă
la un moment dat într-un dispozitiv;
o SET_CONFIGURATION: gazda setează o configuraţie specifică unui
dispozitiv.

R
La începutul etapei de setare gazda emite un semnal SETUP urmat de un pachet
de comenzi SETUP la care dispozitivul trebuie să răspundă cu un pachet ACK.
Etapa DATA (dacă este inclusă) conţine fluxul de date , direcţia în cadrul etapei de setare
(de la gazdă la dispozitiv sau invers). Această etapă este compusă din una sau mai multe
operaţiuni IN sau AUT (toate operaţiunile din această etapă trebuie să fie în aceeaşi
direcţie – toate IN sau toate OUT).
Fiecare operaţiune în această etapă începe cu semnalul IN sau AUT emis de gazdă
după care datele sunt transmise (în direcţia potrivită) si operaţiunea se încheie cu un
pachet HANDSHAKE.

Etapa status raportează gazdei rezultatele etapelor anterioare: SETUP şi DATA.


Raportul este întotdeauna de la dispozitiv la gazdă. O caracteristică importantă a acestei
etape este că direcţia fluxului de date în cadrul acesteia este inversă celei din etapa
DATA (dacă nu a existat o etapă DATA direcţia va fi IN). Dacă direcţia etapei status este
IN, atunci raportul este realizat în faza DATA a operaţiunii, iar dacă e OUT raportul e
realizat în faza HANDSHAKE.
Exemplu:

A T
N
I O
T
IC
R
BULK TRANSFER: acest tip de transfer se compune din una sau mai multe
operaţiuni. Fiecare operaţiune începe cu un semnal transmis de gazdă şi care indică

S T
direcţia transferului de date în faza următoare. Aici, datele sunt transmise în funcţie de
direcţia indicată de semnal. Dacă nu au fost depistate erori în timpul recepţionării datelor,
ultima fază este „handshake”, în care un raport legat de succesul operaţiunii este

E
transmis. Dacă au fost depistate erori, nu este trimis nici un pachet de tip handshake.

R
Există două tipuri de transferuri BULK:
- Transfer IN: - în care gazda „solicită” date de la dispozitiv – direcţia fluxului
informaţional este de la dispozitiv către gazdă.
- Transfer OUT: - în care gazda „vrea” să primească date de la dispozitiv, trimite
un semnal IN către dispozitiv. Când acesta primeşte semnalul trimite datele ca
răspuns la semnal dat gazda răspunde cu un pachet ACK dacă nu au fost erori şi
nu trimite nici un „handshake” în cazul depistării unei erori.
În cazul în care dispozitivul nu poate trimite datele solicitate (subdimensionare –
FIFO este gol sau orice altă problemă), dispozitivul nu va răspunde cu pachetul de
date şi cu NAK sau STALL care indică „indispoziţia” sa de a răspunde cerinţelor
gazdei. Situaţia duce la o tranzacţie în două faze.
Dacă, pe de altă parte, gazda „vrea” să trimită date către dispozitiv, iniţiază şi
transmite un semnal OUT, iar în etapa următoare trimite datele pe care vrea să le
transmită. După primirea datelor, dispozitivul răspunde cu un pachet „handshake”.
Sunt trei tipuri de răspunsuri „handshake” ale dispozitivului: ACK indică faptul că
datele au fost trimise fără erori şi au fost acceptate de către dispozitiv. NAK care
relevă că datele au fost primite fără erori dar nu au putut fi acceptate de către
dispozitiv din cauza unor probleme de ordin temporar (overflow, underflow) iar
gazda ar trebui să reia transmisia. STALL, dispozitivul nu poate accepta datele din
cauza condiţiilor eronate de funcţionare, iar gazda nu ar mai trebui să reia transmisia.
Transferurile BULK sunt viabile datorită mecanismelor de handshake şi timeout (care
au fost menţionate anterior). Dacă e vreo problemă cu sistemul USB gazda o va
detecta şi va preveni blocarea sistemului.

INTERRUPT TRANSFER – asemănător transferului BULK. Ca şi în


transferurile BULK, datele pot fi trimise de la dispozitiv la gazdă şi invers.
Dacă gazda vrea să ştie ce întrerupere este în aşteptare în dispozitiv, iniţiază un semnal
IN către endpoint-ul adecvat. Dacă este găsit, funcţia va trimite detalii legate de

T
întrerupere cum ar fi un pachet de date în etapa următoare. Dacă gazda a primit
informaţiile fără erori, va lansa un pachet ACK în faza handshake. Dacă este depistată o
eroare, nici un handshake nu va fi transmis.
A
N
Dacă, totuşi, gazda lansează un pachet IN dar nu există întreruperi şi endpoint-ul
n-are informaţii de transmis, funcţia va returna un pachet NAK. În condiţii de eroare în
funcţie va fi transmis un pachet STALL.

I O
Gazda va emite un semnal OUT dacă doreşte să transmită date dispozitivului, urmând

T
semnalului ce va fi transmis cu privire la pachetul de date. Dispozitivul, din momentul
primirii datelor, detectează erorile iar dacă acestea nu există va răspunde cu ACK, NAK

IC
sau STALL (ca în cazul transferurilor BULK). Dacă datele sunt corupte nu va fi transmis
nici un semnal de handshake.

Exemplu:

T R
E S
R

ISOCHRONOUS TRANSFER - compus din una sau două faze operaţionale. Aşa
cum am menţionat anterior, nu există faza handshake în transferurile sincron. Gazda
lansează fie un semnal IN pentru a primi date de la dispozitiv, fie OUT pentru a transmite
date. În faza următoare datele sunt transmise în sensul cerut de semnalul gazdei emis mai
înainte.
Exemplu:

A T
N
I O
T
IC
T R
E S
R
Wireless USB
Tehnologia Wireless USB permite viteze de 480Mbps la distante de pana la 10m, si
promite ca reprezintă o arhitectura scalabila care sa suporte in scurt timp viteze de 1Gbps
si mai mari in continuare.
Motivaţia tehnologiei USB a pornit de la următoarele consideraţii:
- uşurinţa de folosire: lipsa flexibilităţii in reconfigurarea PC-urilor a fost
considerata punctul slab al acestora. Deşi s-au făcut eforturi pentru uşurarea
configurării, dispozitivelor, porturile serial/paralel nu aveau caracteristica de
plug-and-play
- extinderea porturilor: adăugarea de noi dispozitive periferice a fost pana nu de
mult problematica, datorita lipsei fizice a porturilor. In acelaşi timp porturile
erau optimizate pentru câteva tipuri de periferice, iar pentru noi dispozitive nu
exista o interfaţa alternativa bidirecţională, cu un cost scăzut, si viteza
acceptabila.

A T
Succesul introducerii USB-ului a fost rapid, astfel in 2005 analiştii au estimat ca
exista peste 500 de milioane de produse folosind interfata USB.

N
In prezent, pe măsura ce tehnologia avansează si dispozitivele wireless devin mai
importante, este esenţial sa se dezvolte o soluţie de viteza mare si eficienta ca

I O
implementare. Tehnologia radio UWB (Ultra-WideBand) are caracteristici similare
modelului USB clasic, de aceea ea a stat la baza implementării WUSB.

T
Conexiunile WUSB se bazează pe modelul ‘hub and spoke’: host-ul USB este un
hub in centrul reţelei, iar dispozitivele (in număr de maxim 127). Topologia este
ilustrata mai jos:
IC
T R
E S
R
Dispozitiv
Wireless USB
Dispozitiv
Wireless USB Dispozitiv
Wireless USB
Wireless
USB
Dispozitiv Host
Wireless USB Dispozitiv
Wireless USB
Dispozitiv
Wireless USB

A T
In orice sistem USB exista un singur host. Wireless USB nu are porturi fizice
definite, deoarece dispozitivul hub asigura extinderea porturilor.

N
Nivelul fizic al WUSB este descris de Multiband OFDM Alliance (MBOA),
specificaţia UWB PHY. Pentru dispozitivele WUSB, este obligatoriu suportul pentru

I O
transmisia si recepţia datelor la viteze de 53.3, 106.7, si 200 Mb/s este obligatoriu.
Suportul pentru restul vitezelor, of 80, 160, 320, 400 si 480 Mb/s este opţional. Toate

T
implementările WUSB trebuie sa suporte canalele de transmisie PHY pe canalele 9 – 15
(grupul 1).

IC
T R
E S
R
A T
N
WUSB foloseşte UWB pentru transmisia datelor

I O
Protocolul WUSB este bazat pe TDMA, in mod similar cu protocolul USB clasic.

T
Hostul este cel care iniţiaza transferurile de date. Ca si in USB, fiecare transfer consta in
trei pachete: token, data si handshake. Totuşi, pentru a creste eficienta nivelului fizic prin

IC
eliminarea tranziţiilor costisitoare intre transmisie si recepţie, hostul combina informaţia
din tokenuri multiple intr-un singur pachet. In acesta hostul indica momentul de timp in

R
care dispozitivul trebuie sa asculte pentru u n pachet de date OUT sau sa transmită
pachetul de date IN (de tip date sau handshake) ca in figura de mai jos:

T
E S
R

Comparatie intre WUSB si USB

WUSB este un protocol dine definit si performant, lucru datorat câtorva factori:
- nivelul fizic este proiectat sa fie fiabil cu mecanisme de detecţie si corecţie a
erorilor
- sistemul de detecţie, deconectare si ataşare a dispozitivelor precum si
autoconfigurarea resurselor de sistem
- protocolul de recepţie a datelor folosind pauze pentru pachetele pierdute si
eronate.
- Controlul traficului de date asigura folosirea bufferilor hardware in mod eficient

Securitatea este suportata de toate dispozitivele WUSB. Mecanismul implementat


este bazat pe criptarea AES-128/CCM care asigura atat testarea integritatii datelor cat si
criptarea acestora. Comunicarea foloseşte chei autentificate doar de host si de dispozitiv.
In concluzie WUSB este un standard performant, bazat pe arhitectura de succes
USB care urmează a se impune in viitor datorita caracteristicilor sale si a suportului oferit
de producători, făcând concurenta soluţiilor Bluetooth si chiar celor 802.11x pe distante
scurte

Exemplu:
Caracteristicile returate de utilitarul USBView:

A T
N
I O
T
IC
T R
E S
R
Iată informaţiile schimbate intre host si periferic la conectarea unui mouse USB la
calculator returnare de Snoopy Pro:
nr dir time function data result
1 in down 0.142 GET_DESCRIPTOR_FROM_DEVICE
12 01 00 01
1 in up 0.148 CONTROL_TRANSFER 00 00 00 08 0x00000000
2 in down 0.148 GET_DESCRIPTOR_FROM_DEVICE
09 02 22 00
2 in up 0.153 CONTROL_TRANSFER 01 01 00 a0 0x00000000
3 in down 0.153 GET_DESCRIPTOR_FROM_DEVICE
09 02 22 00
3 in up 0.161 CONTROL_TRANSFER 01 01 00 a0 0x00000000
4 ??? down 0.161 SELECT_CONFIGURATION
4 ??? up 0.175 SELECT_CONFIGURATION 0x00000000
5 out down 0.175 CLASS_INTERFACE -
5 out up 0.177 CONTROL_TRANSFER - 0x00000000
6 in down 0.177 GET_DESCRIPTOR_FROM_INTERFACE
05 01 09 02
6
7
8
in up
??? down
??? down
0.189
0.191
0.191
CONTROL_TRANSFER
BULK_OR_INTERRUPT_TRANSFER
BULK_OR_INTERRUPT_TRANSFER
-
-
T
a1 01 09 01

A
0x00000000

N
7 ??? up 0.193 BULK_OR_INTERRUPT_TRANSFER 00 00 00 00 0x00000000
9 ??? down 0.193 BULK_OR_INTERRUPT_TRANSFER -

O
8 ??? up 0.769 BULK_OR_INTERRUPT_TRANSFER 00 00 00 00 0x00000000
10 ??? down 0.769 BULK_OR_INTERRUPT_TRANSFER

T I -

Informaţii obţinute la conectarea unei tastaturi USB pe acelaşi port sunt prezentate in continuare:

IC
T R
E S
R
Raport Snoopy pro simplu:

nr dir time function data Result


1 in down 0.143 GET_DESCRIPTOR_FROM_DEVICE
12 01 10 01
1 in up 0.149 CONTROL_TRANSFER 00 00 00 08 0x00000000
2 in down 0.149 GET_DESCRIPTOR_FROM_DEVICE
09 02 3b 00
2 in up 0.154 CONTROL_TRANSFER 02 01 00 a0 0x00000000
3 in down 0.154 GET_DESCRIPTOR_FROM_DEVICE
09 02 3b 00
3 in up 0.165 CONTROL_TRANSFER 02 01 00 a0 0x00000000
4 ??? down 0.165 SELECT_CONFIGURATION
4 ??? up 0.19 SELECT_CONFIGURATION 0x00000000
6 out down 0.248 CLASS_INTERFACE -

T
6 out up 0.251 CONTROL_TRANSFER - 0x00000000
7 in down 0.251 GET_DESCRIPTOR_FROM_INTERFACE

7 in up 0.264 CONTROL_TRANSFER
A
05 01 09 06
a1 01 05 07 0x00000000
8
8
out down
out up
0.267
0.269
CLASS_INTERFACE
CONTROL_TRANSFER
N -
- 0x00000000

IO
9 in down 0.269 GET_DESCRIPTOR_FROM_INTERFACE
05 01 09 80
9 in up 0.291 CONTROL_TRANSFER a1 01 85 01 0x00000000
10 ??? down 0.293 BULK_OR_INTERRUPT_TRANSFER
T -

IC
11 ??? down 0.293 BULK_OR_INTERRUPT_TRANSFER -
12 ??? down 0.294 BULK_OR_INTERRUPT_TRANSFER -
13 ??? down 0.294 BULK_OR_INTERRUPT_TRANSFER -

R
Extrageţi similaritaţile si deosebirile intre cele doua dispozitive(mouse si tastatura)

T
E S
R
Anexa A

In detaliu informaţiile schimbate intre host si periferic la conectarea unui mouse USB la calculator
returnate de Snoopy Pro:
nr dir endpoint time function data
1 in down n/a 0.142 GET_DESCRIPTOR_FROM_DEVICE
URB Header (length: 80)
SequenceNumber: 1
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)
12 01 00 01
1 in up n/a 0.148 CONTROL_TRANSFER 00 00 00 08
URB Header (length: 80)
SequenceNumber: 1
Function: 0008 (CONTROL_TRANSFER)
PipeHandle: 82162898

SetupPacket:
0000: 80 06 00 01 00 00 12 00
bmRequestType: 80
DIR: Device-To-Host
A T
TYPE: Standard
RECIPIENT: Device
N
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0001
I O
DEVICE
T
TransferBuffer: 0x00000012 (18) length
IC
R
0000: 12 01 00 01 00 00 00 08 b0 0a 01 00 10 00 01 02
0010: 00 01
bLength

bcdUSB
bDeviceClass
: 0x12 (18)
bDescriptorType : 0x01 (1)
: 0x0100 (256)
: 0x00 (0)
S T
bDeviceSubClass : 0x00 (0)
bDeviceProtocol : 0x00 (0)
E
idVendor
idProduct
bcdDevice
R
bMaxPacketSize0 : 0x08 (8)
: 0x0ab0 (2736)
: 0x0001 (1)
: 0x0010 (16)
iManufacturer : 0x01 (1)
iProduct : 0x02 (2)
iSerialNumber : 0x00 (0)
bNumConfigurations : 0x01 (1)
2 in down n/a 0.148 GET_DESCRIPTOR_FROM_DEVICE
URB Header (length: 80)
SequenceNumber: 2
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)
09 02 22 00
2 in up n/a 0.153 CONTROL_TRANSFER 01 01 00 a0
URB Header (length: 80)
SequenceNumber: 2
Function: 0008 (CONTROL_TRANSFER)
PipeHandle: 82162898
SetupPacket:
0000: 80 06 00 02 00 00 09 00
bmRequestType: 80
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Device
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0002
CONFIGURATION

TransferBuffer: 0x00000009 (9) length


0000: 09 02 22 00 01 01 00 a0 14
bLength : 0x09 (9)
bDescriptorType : 0x02 (2)
wTotalLength : 0x0022 (34)
bNumInterfaces : 0x01 (1)
bConfigurationValue: 0x01 (1)
iConfiguration : 0x00 (0)
bmAttributes : 0xa0 (160) A T
MaxPower
3 in down
: 0x14 (20)
n/a N
0.153 GET_DESCRIPTOR_FROM_DEVICE
URB Header (length: 80)
SequenceNumber: 3
I O
T
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)
09 02 22 00

IC
3 in up n/a 0.161 CONTROL_TRANSFER 01 01 00 a0
URB Header (length: 80)
SequenceNumber: 3
Function: 0008 (CONTROL_TRANSFER)
PipeHandle: 82162898

SetupPacket:
T R
0000: 80 06 00 02 00 00 22 00
bmRequestType: 80
DIR: Device-To-Host
TYPE: Standard
E S
RECIPIENT: Device
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0002
R
CONFIGURATION

TransferBuffer: 0x00000022 (34) length


0000: 09 02 22 00 01 01 00 a0 14 09 04 00 00 01 03 01
0010: 02 00 09 21 00 01 00 01 22 3e 00 07 05 81 03 04
0020: 00 0a
bLength : 0x09 (9)
bDescriptorType : 0x02 (2)
wTotalLength : 0x0022 (34)
bNumInterfaces : 0x01 (1)
bConfigurationValue: 0x01 (1)
iConfiguration : 0x00 (0)
bmAttributes : 0xa0 (160)
MaxPower : 0x14 (20)
4 ??? down n/a 0.161 SELECT_CONFIGURATION
URB Header (length: 60)
SequenceNumber: 4
Function: 0000 (SELECT_CONFIGURATION)
Configuration Descriptor:
bLength: 9 (0x09)
bDescriptorType: 2 (0x02)
wTotalLength: 34 (0x0022)
bNumInterfaces: 1 (0x01)
bConfigurationValue: 1 (0x01)
iConfiguration: 0 (0x00)
bmAttributes: 160 (0xa0)
0x80: Bus Powered
0x20: Remote Wakeup
MaxPower: 20 (0x14)
(in 2 mA units, therefore 40 mA power consumption)

Number of interfaces: 1
Interface[0]:
Length: 0x0024
InterfaceNumber: 0x00 A T
AlternateSetting: 0x00
Class = 0x00 N
SubClass
Protocol
= 0x00
= 0x00
I O
T
InterfaceHandle = 0x00000000
NumberOfPipes = 0x00000001

IC
Pipe[0]:
MaximumPacketSize = 0x0000
EndpointAddress = 0x00
Interval
PipeType
= 0x00
= 0x00
UsbdPipeTypeControl
PipeHandle = 0x00000000
T R
PipeFlags
4 ??? up
= 0x00

URB Header (length: 60)


E S
MaxTransferSize = 0x00001000

n/a 0.175 SELECT_CONFIGURATION

SequenceNumber: 4
R
Function: 0000 (SELECT_CONFIGURATION)
Configuration Descriptor:
bLength: 9 (0x09)
bDescriptorType: 2 (0x02)
wTotalLength: 34 (0x0022)
bNumInterfaces: 1 (0x01)
bConfigurationValue: 1 (0x01)
iConfiguration: 0 (0x00)
bmAttributes: 160 (0xa0)
0x80: Bus Powered
0x20: Remote Wakeup
MaxPower: 20 (0x14)
(in 2 mA units, therefore 40 mA power consumption)

Number of interfaces: 1
Interface[0]:
Length: 0x0024
InterfaceNumber: 0x00
AlternateSetting: 0x00
Class = 0x03
SubClass = 0x01
Protocol = 0x02
InterfaceHandle = 0xff2e2578
NumberOfPipes = 0x00000001
Pipe[0]:
MaximumPacketSize = 0x0004
EndpointAddress = 0x81
Interval = 0x0a
PipeType = 0x03
UsbdPipeTypeInterrupt
PipeHandle = 0xff2e2594
MaxTransferSize = 0x00001000
PipeFlags = 0x00
5 out down n/a 0.175 CLASS_INTERFACE -
URB Header (length: 80)
SequenceNumber: 5
Function: 001b (CLASS_INTERFACE)
PipeHandle: 00000000
A T
SetupPacket:
0000: 22 0a 00 00 00 00 00 00 N
bmRequestType: 22
DIR: Host-To-Device
I O
T
TYPE: Class
RECIPIENT: Endpoint

IC
bRequest: 0a

No TransferBuffer

5 out up
URB Header (length: 80)
SequenceNumber: 5
n/a 0.177

T R CONTROL_TRANSFER -

Function: 0008 (CONTROL_TRANSFER)


PipeHandle: 82162898

SetupPacket:
E S
bmRequestType: 21
DIR: Host-To-Device
TYPE: Class
R
0000: 21 0a 00 00 00 00 00 00

RECIPIENT: Interface
bRequest: 0a

No TransferBuffer

6 in down n/a 0.177 GET_DESCRIPTOR_FROM_INTERFACE


URB Header (length: 80)
SequenceNumber: 6
Function: 0028 (GET_DESCRIPTOR_FROM_INTERFACE)
05 01 09 02
6 in up n/a 0.189 CONTROL_TRANSFER a1 01 09 01
URB Header (length: 80)
SequenceNumber: 6
Function: 0008
(CONTROL_TRANSFER)
PipeHandle: 82162898

SetupPacket:
0000: 81 06 00 22 00 00 7e 00
bmRequestType: 81
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Interface
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0022
unknown

TransferBuffer: 0x0000003e (62) length


0000: 05 01 09 02 a1 01 09 01 a1 00 05 09 19 01 29 05
0010: 15 00 25 01 75 01 95 05 81 02 75 03 95 01 81 01
0020: 05 01 09 30 09 31 15 81 25 7f 75 08 95 02 81 06
0030: 09 38 15 81 25 7f 75 08 95 01 81 06 c0 c0
7 ??? down
URB Header (length: 72)
n/a
A T
0.191 BULK_OR_INTERRUPT_TRANSFER -

SequenceNumber: 7
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER) N
TransferFlags: 0x00000003

I O
T
No TransferBuffer

IC
8 ??? down n/a 0.191 BULK_OR_INTERRUPT_TRANSFER -
URB Header (length: 72)
SequenceNumber: 8

TransferFlags: 0x00000003

No TransferBuffer
T R
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)

7 ??? up
URB Header (length: 72)
SequenceNumber: 7
n/a

E S
0.193 BULK_OR_INTERRUPT_TRANSFER 00 00 00 00

TransferFlags: 0x00000003
R
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)

TransferBuffer: 0x00000004 (4) length


0000: 00 00 00 00
9 ??? down n/a 0.193 BULK_OR_INTERRUPT_TRANSFER -
URB Header (length: 72)
SequenceNumber: 9
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)
TransferFlags: 0x00000003

No TransferBuffer

8 ??? up n/a 0.769 BULK_OR_INTERRUPT_TRANSFER 00 00 00 00


URB Header (length: 72)
SequenceNumber: 8
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)
TransferFlags: 0x00000003
TransferBuffer: 0x00000004 (4) length
0000: 00 00 00 00
10 ??? down n/a 0.769 BULK_OR_INTERRUPT_TRANSFER -
URB Header (length: 72)
SequenceNumber: 10
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)
TransferFlags: 0x00000003

No TransferBuffer

Raport Snoopy Pro complet al transferului de informaţie intre PC si tastatura USB:

1 in down n/a 0.143 GET_DESCRIPTOR_FROM_DEVICE

T
URB Header (length: 80)
SequenceNumber: 1
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)
1 in up n/a 0.149 CONTROL_TRANSFER
A
12 01 10 01 00 00 00 08
URB Header (length: 80)
SequenceNumber: 1
N
Function: 0008 (CONTROL_TRANSFER)
PipeHandle: ff5b0900
I O
SetupPacket:
T
IC
0000: 80 06 00 01 00 00 12 00
bmRequestType: 80
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Device
bRequest: 06
T R
GET_DESCRIPTOR
Descriptor Type: 0x0001
DEVICE
E S
R
TransferBuffer: 0x00000012 (18) length
0000: 12 01 10 01 00 00 00 08 62 0d 1c 00 02 02 01 02
0010: 00 01
bLength : 0x12 (18)
bDescriptorType : 0x01 (1)
bcdUSB : 0x0110 (272)
bDeviceClass : 0x00 (0)
bDeviceSubClass : 0x00 (0)
bDeviceProtocol : 0x00 (0)
bMaxPacketSize0 : 0x08 (8)
idVendor : 0x0d62 (3426)
idProduct : 0x001c (28)
bcdDevice : 0x0202 (514)
iManufacturer : 0x01 (1)
iProduct : 0x02 (2)
iSerialNumber : 0x00 (0)
bNumConfigurations : 0x01 (1)
2 in down n/a 0.149 GET_DESCRIPTOR_FROM_DEVICE
URB Header (length: 80)
SequenceNumber: 2
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)
2 in up n/a 0.154 CONTROL_TRANSFER 09 02 3b 00 02 01 00 a0
URB Header (length: 80)
SequenceNumber: 2
Function: 0008 (CONTROL_TRANSFER)
PipeHandle: ff5b0900

SetupPacket:
0000: 80 06 00 02 00 00 09 00
bmRequestType: 80
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Device
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0002 A T
CONFIGURATION
N
TransferBuffer: 0x00000009 (9) length
I O
0000: 09 02 3b 00 02 01 00 a0 32
bLength : 0x09 (9) T
IC
bDescriptorType : 0x02 (2)
wTotalLength : 0x003b (59)
bNumInterfaces : 0x02 (2)
bConfigurationValue: 0x01 (1)
iConfiguration : 0x00 (0)
bmAttributes : 0xa0 (160) T R
MaxPower
3 in down
: 0x32 (50)

URB Header (length: 80)


E S
n/a 0.154 GET_DESCRIPTOR_FROM_DEVICE

SequenceNumber: 3

3 in up
URB Header (length: 80)
R
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)
n/a 0.165 CONTROL_TRANSFER 09 02 3b 00 02 01 00 a0

SequenceNumber: 3
Function: 0008 (CONTROL_TRANSFER)
PipeHandle: ff5b0900

SetupPacket:
0000: 80 06 00 02 00 00 3b 00
bmRequestType: 80
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Device
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0002
CONFIGURATION

TransferBuffer: 0x0000003b (59) length


0000: 09 02 3b 00 02 01 00 a0 32 09 04 00 00 01 03 01
0010: 01 00 09 21 00 01 00 01 22 41 00 07 05 81 03 08
0020: 00 18 09 04 01 00 01 03 00 00 00 09 21 00 01 00
0030: 01 22 8b 00 07 05 82 03 08 00 30
bLength : 0x09 (9)
bDescriptorType : 0x02 (2)
wTotalLength : 0x003b (59)
bNumInterfaces : 0x02 (2)
bConfigurationValue: 0x01 (1)
iConfiguration : 0x00 (0)
bmAttributes : 0xa0 (160)
MaxPower
4 ??? down
: 0x32 (50)

URB Header (length: 96)


SequenceNumber: 4
n/a 0.165 SELECT_CONFIGURATION

A T
Function: 0000 (SELECT_CONFIGURATION)
Configuration Descriptor: N
bLength: 9 (0x09)
bDescriptorType: 2 (0x02)
I O
wTotalLength: 59 (0x003b)
bNumInterfaces: 2 (0x02) T
IC
bConfigurationValue: 1 (0x01)
iConfiguration: 0 (0x00)
bmAttributes: 160 (0xa0)
0x80: Bus Powered
0x20: Remote Wakeup
MaxPower: 50 (0x32) T R
Number of interfaces: 2
E S
(in 2 mA units, therefore 100 mA power consumption)

Interface[0]:
Length: 0x0024
InterfaceNumber: 0x00
AlternateSetting: 0x00
R
Class = 0x00
SubClass = 0x00
Protocol = 0x00
InterfaceHandle = 0x00000000
NumberOfPipes = 0x00000001
Pipe[0]:
MaximumPacketSize = 0x0000
EndpointAddress = 0x00
Interval = 0x00
PipeType = 0x00
UsbdPipeTypeControl
PipeHandle = 0x00000000
MaxTransferSize = 0x00001000
PipeFlags = 0x00
Interface[1]:
Length: 0x0024
InterfaceNumber: 0x01
AlternateSetting: 0x00
Class = 0x00
SubClass = 0x00
Protocol = 0x00
InterfaceHandle = 0x00000000
NumberOfPipes = 0x00000001
Pipe[0]:
MaximumPacketSize = 0x0000
EndpointAddress = 0x00
Interval = 0x00
PipeType = 0x00
UsbdPipeTypeControl
PipeHandle = 0x00000000
MaxTransferSize = 0x00001000
PipeFlags = 0x00 A T
4 ??? up
URB Header (length: 96)
n/a 0.19 SELECT_CONFIGURATION
N
SequenceNumber: 4
Function: 0000 (SELECT_CONFIGURATION)
I O
Configuration Descriptor:
bLength: 9 (0x09) T
IC
bDescriptorType: 2 (0x02)
wTotalLength: 59 (0x003b)
bNumInterfaces: 2 (0x02)
bConfigurationValue: 1 (0x01)
iConfiguration: 0 (0x00)
bmAttributes: 160 (0xa0) T R
0x80: Bus Powered
0x20: Remote Wakeup
MaxPower: 50 (0x32)
E S
Number of interfaces: 2
Interface[0]:
R
(in 2 mA units, therefore 100 mA power consumption)

Length: 0x0024
InterfaceNumber: 0x00
AlternateSetting: 0x00
Class = 0x03
SubClass = 0x01
Protocol = 0x01
InterfaceHandle = 0x821dc138
NumberOfPipes = 0x00000001
Pipe[0]:
MaximumPacketSize = 0x0008
EndpointAddress = 0x81
Interval = 0x18
PipeType = 0x03
UsbdPipeTypeInterrupt
PipeHandle = 0x821dc154
MaxTransferSize = 0x00001000
PipeFlags = 0x00
Interface[1]:
Length: 0x0024
InterfaceNumber: 0x01
AlternateSetting: 0x00
Class = 0x03
SubClass = 0x00
Protocol = 0x00
InterfaceHandle = 0x81f6d108
NumberOfPipes = 0x00000001
Pipe[0]:
MaximumPacketSize = 0x0008
EndpointAddress = 0x82
Interval
PipeType
= 0x30
= 0x03
UsbdPipeTypeInterrupt A T
PipeHandle = 0x81f6d124
MaxTransferSize = 0x00001000 N
PipeFlags
6 out down
= 0x00
n/a 0.248 CLASS_INTERFACE
I O -
URB Header (length: 80)
SequenceNumber: 6 T
IC
Function: 001b (CLASS_INTERFACE)
PipeHandle: 00000000

SetupPacket:
0000: 22 0a 00 00 00 00 00 00
bmRequestType: 22 T R
DIR: Host-To-Device
TYPE: Class
RECIPIENT: Endpoint
E S
bRequest: 0a

No TransferBuffer
R
6 out up n/a 0.251 CONTROL_TRANSFER -
URB Header (length: 80)
SequenceNumber: 6
Function: 0008 (CONTROL_TRANSFER)
PipeHandle: ff5b0900

SetupPacket:
0000: 21 0a 00 00 00 00 00 00
bmRequestType: 21
DIR: Host-To-Device
TYPE: Class
RECIPIENT: Interface
bRequest: 0a
No TransferBuffer

7 in down n/a 0.251 GET_DESCRIPTOR_FROM_INTERFACE


URB Header (length: 80)
SequenceNumber: 7
Function: 0028 (GET_DESCRIPTOR_FROM_INTERFACE)
7 in up n/a 0.264 CONTROL_TRANSFER 05 01 09 06 a1 01 05 07
URB Header (length: 80)
SequenceNumber: 7
Function: 0008 (CONTROL_TRANSFER)
PipeHandle: ff5b0900

SetupPacket:
0000: 81 06 00 22 00 00 81 00
bmRequestType: 81
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Interface A T
bRequest: 06
GET_DESCRIPTOR N
Descriptor Type: 0x0022
unknown
I O
T
IC
TransferBuffer: 0x00000041 (65) length
0000: 05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01

T R
0010: 95 08 75 01 81 02 95 08 75 01 81 01 05 08 19 01
0020: 29 03 95 03 75 01 91 02 95 01 75 05 91 01 05 07
0030: 19 00 2a ff 00 15 00 26 ff 00 95 06 75 08 81 00
0040:
c0
8 out down
URB Header (length: 80)
E S
n/a 0.267 CLASS_INTERFACE -

SequenceNumber: 8

R
Function: 001b (CLASS_INTERFACE)
PipeHandle: 00000000

SetupPacket:
0000: 22 0a 00 00 01 00 00 00
bmRequestType: 22
DIR: Host-To-Device
TYPE: Class
RECIPIENT: Endpoint
bRequest: 0a

No TransferBuffer

8 out up n/a 0.269 CONTROL_TRANSFER -


URB Header (length: 80)
SequenceNumber: 8
Function: 0008 (CONTROL_TRANSFER)
PipeHandle: ff5b0900

SetupPacket:
0000: 21 0a 00 00 01 00 00 00
bmRequestType: 21
DIR: Host-To-Device
TYPE: Class
RECIPIENT: Interface
bRequest: 0a

No TransferBuffer

9 in down n/a 0.269 GET_DESCRIPTOR_FROM_INTERFACE


URB Header (length: 80)
SequenceNumber: 9
Function: 0028 (GET_DESCRIPTOR_FROM_INTERFACE)
9 in up n/a 0.291 CONTROL_TRANSFER
URB Header (length: 80) A T
05 01 09 80 a1 01 85 01

SequenceNumber: 9
Function: 0008 (CONTROL_TRANSFER) N
PipeHandle: ff5b0900

I O
SetupPacket:
0000: 81 06 00 22 01 00 cb 00 T
IC
bmRequestType: 81
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Interface
bRequest: 06
GET_DESCRIPTOR T R
Descriptor Type: 0x0022
unknown

E S
R
TransferBuffer: 0x0000008b (139) length
0000: 05 01 09 80 a1 01 85 01 19 81 29 83 15 00 25 01
0010: 75 01 95 03 81 02 75 05 95 01 81 01 c0 05 0c 09
0020: 01 a1 01 85 02 25 01 15 00 75 01 0a 25 02 0a 24
0030: 02 0a 27 02 0a 26 02 0a 21 02 0a 2a 02 0a 23 02
0040: 0a 8a 01 95 08 81 02 0a e2 00 0a ea 00 0a e9 00
0050: 0a cd 00 0a b7 00 0a b6 00 0a b5 00 0a 94 01 95
0060: 08 81 02 0a 92 01 95 01 81 02 95 07 81 01 c0 06
0070: 00 ff 09 01 a1 01 85 03 25 01 15 00 75 01 19 01
0080: 29 09 95 09 81 02 95 07 81 01 c0
10 ??? down n/a 0.293 BULK_OR_INTERRUPT_TRANSFER -
URB Header (length: 72)
SequenceNumber: 10
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)
TransferFlags: 0x00000003
No TransferBuffer

11 ??? down n/a 0.293 BULK_OR_INTERRUPT_TRANSFER -


URB Header (length: 72)
SequenceNumber: 11
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)
TransferFlags: 0x00000003

No TransferBuffer

12 ??? down n/a 0.294 BULK_OR_INTERRUPT_TRANSFER -


URB Header (length: 72)
SequenceNumber: 12
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)
TransferFlags: 0x00000003

No TransferBuffer

13 ??? down n/a 0.294 BULK_OR_INTERRUPT_TRANSFER A


-
T
URB Header (length: 72)
SequenceNumber: 13 N
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)
TransferFlags: 0x00000003
I O
No TransferBuffer T
IC
T R
E S
R

S-ar putea să vă placă și