*   UVOD

 

Prvi PC računari koristili su tri porta i to: jedan za štampač (LPT) i dva serijska(COM1 i COM2) pri čemu je jedan od njih većinom bio zauzet od strane serijskog miša. Međutim njihova sve veća primena rezultovala je pojavu različitih uređaja koji se na njih uključuju kao što su skeneri, digitalne fotoaparati i slično. To je uzrokovalo uvođenje USB  porta(Universal Serial Bus) koji je standardizovan 1996. godine. O tom standardu možete pročitati na adresi www.ubs.com. Njegovim uvođenjem nastojalo se da se reše sledeći problemi:

 

Ø      rešenje u vezi ograničenja broja slotova na osnovnoj ploči kao i broja portova PC računara

Ø      jednostavno proširenja PC računara upotrebom softverskih drajvera

Ø      mogućnost napajanja eksternih uređaja koji malo troše od strane računara

Ø      omogućeno je priključenje do 127 eksternih uređaja na glavni USB port, pa se time rešava ograničenje koje je pre postojalo: jedan uređaj  - jedan slot.

Ø      omogućene su velike brzine prenosa do 12 Mb/s

Ø      pojednostavljuju se kablovi za priključenje uređaja a njihova dužina se povećava

Ø      omogućena je kontrola potrošnje eksternih uređaja

Ø      podržano je autokonfigurisanje ovih uređaja po principu PnP detekcije novih uređaja u računaru.

 

USB port podržava dve brzine prenosa i to: veliku brzinu kada se prenos kreće do 12 Mb u sekundi, i za sporije uređaje nižu brzinu prenosa do 1.5 Mb u sekundi. USB port koristi četverožilni kabal preko koga se prenose podaci i napajanje sa impedansom 90 W  što je dato na donjoj slici:

 

Za prenos podataka koriste se dve linije D+ i D-. Kada se prenosi logička nula linija D- je na većem potencijalu od linije D+ dok je u slučaju prenosa logičke jedinice obrnuto. Predajnici moraju da daju napon veći od 2.8 V sa opterećenjem od 15 kW. Prijemnici moraju da imaju simetričan ulaz pri čemu do promene stanja dolazi ako se na ulazu prijemnika naponi razlikuju za više od 200 mV. Svaka linija za prenos podataka ima i nesimetričan prijemnik za detekciju greške koja se pojavi ako su obe linije podataka nađu na istom naponu. Kada se radi o brzom USB prenosu tada se na liniju D+ priključuje opteretni otpornik(pull-up) reda 1.5 kW, dok se kod sporog prenosa on uključuje na liniju D-. Na izlazima drajvera linija D+ i D- priključuju se opteretni otpornici reda 15 kW. U slučaju kada USB eksterna jedinica nije pod naponom i kada je drajverski izlaz porta u stanju visoke impedanse preko ovih otpornika se određuje brzina prenosa. Preko njih se takođe određuje da je eksterni uređaj povezan na USB čvor. Kada uređaj nije povezan na USB čvor njegovi izlazni drajveri biće u stanju visoke impedanse i obe linije će biti na potencijalu mase, koje se naziva nesimterična nula SE0(Singl Ended 0). Povezivanje uređaja na čvor on će dobiti napajanje ali njegovi izlazi i dalje će biti u stanju visoke impedanse, dok će napon na liniji podataka porta koji je povezan na opteretni otpor postati visok što može da detektuje čvor. U slučaju ako se ne šalju USB paketi, linije podataka nalaze se u stanju visoke impedanse. Za priključenje USB uređaja koriste se konktori prikazani na donjoj slici:

 

 

Standardni USB kabal za priključenja eksternih USB uređaja je oblika kao na donjoj slici:

 

 

         Organizacija USB bas-a može se prikazati kao na sledećoj slici:

         Iz prikazane slike vidi se da se USB bas može predstaviti sa tri nivoa i to:

 

Ø      Nivo USB uređaja(USB Interface Layer) koji obezbeđuje fizičku vezu za prenos signala i paketa između računara i USB uređaja. Ovaj nivo omogućuje sistemskim programima koji kontrolišu USB bas, rad sa opštim funkcija koje koristi USB uređaj.

Ø      Nivo funkcije se ostvaruje upotrebom klient softvera(Client SW)

Ø      Nivo interfejsa obezbeđuje da se fizički obavlja komunikacija

 

Sistem USB povezivanja deli se na četiri funkcionalno zaokružene celine:

 

o        USB uređaj(USB Physical Device)

o        klijent softver(Client Software)

o        USB sistemski softver(USB System Software)

o        glavni USB kontroler(USB Host Controller)

 

USB predtsvlja neki eksterni uređaj koji se priključuje na USB i koji izvršava zahtevane funkcije. Klijent softver omogućava da se izvrši prenos podataka između eksternog USB uređaja i računara i najčešće ga isporučuje proizvođač USB uređaja. USB sistemski softver je deo operativnog sistema za podršku USB uređaja i isporučuje se uz operativni sistem. Glavni USB kontroler zaokružuje u jednu celinu hardver i softver koji omogućuje rad USB uređaja.

USB uređaji sa računarom komuniciraju slanjem paketa. Na početku paketa slanja paketa linija za prenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju, dosk se na kraju paketa podataka, ova linija postavlja u SE0 stanje u dužini trajanja od dva bita.

USB uređaji mogu se resetovati na nekoliko načina od koji se često koristi pristup kada se linija podataka postavi u SE0 stanje u trajanju od 10ms. U slučaju ako USB bas se nalazi u mirnom stanju većem od 3 ms tada eksterni USB uređaji mogu preći u stanje male potrošnje ako to podržavaju. Vraćanje u radno stanje treba da traje najduže 20 ms. Prenos podatka se vrši upotrebom NRZI metoda kodiranje(Non Return Zero Invert) što znači ako se pojavi logička jedinica ona će trajati celom svojom dužinom, odnosno neće doći do promene naponskog nivo. U slučaju pojave povorki nula napon se linije menja za svaki bit, što se koristi za uspostavljanje signala takta na prijemu. Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu, vrši se umetanje bita tj. ubaci se jedna nula koja se na prijemu izbacuje.

Preko USB bas-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V, uz maksimalno opterećenje do 5A, pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 mA. Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje. Iako takvi uređaji koriste takvo napajanje, napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bas. Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja basa(bus enumeration).

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bas-a. Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bas i ne mogu je koristiti eksterni uređaji.

Podaci koji se šalju preko USB bas dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb. Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom. Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici:

 

 Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom(80H). Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal. Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID(Packet Identifier), kod koda se prva 4 bita koriste za identifikaciju vrste paketa, dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a. Polje PID definiše vrstu paketa i  njegov format kao i tip detekcije greške. Postoje sledeći oblici paketa u USB komunikaciji:

 

 

         SOF paket čiji je  PID=0101 koji šalje 11 bitni podatak o broju rama(frame), kao i 5 bita CRC detekcije.

 

1

 

         Setup, IN i OUT paketi imaju oblik kao na gornjoj slici. Setup  paket čiji je  PID=1101  vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu. IN  paket čiji je  PID=1001  je prvi paket od od eksternog uređaja prema računaru. OUT paket čiji je  PID=0001 je prvi paket koji računar šalje periferijskom uređaju.

 

        

         Data0 paket čija je  PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka.   Data1 paket čija je  PID=1011 je neparan paket podataka. Ovi paketi za CRC kontrolu koriste 16 bita.

 

 

         Ack paket koji ima  PID=0010 je potvrda prijemnika da je paket primljen bez greške. Nak paket koji ima  PID=1010 je je odgovor predajnika o neispravno primljenom paketu. Stall paket koji ima  PID=1110 pokazuje da je neko odredište zagušeno tj. ne može da primi sve do tada poslate pakete.

         Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa, adresa USB uređaja i adresa krajnjeg odredišta. Ovaj se paket naziva token. Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa(handshake packet) izveštavjući o uspešnosti prenosa. Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita. Adresa se koristi sa kod IN, OUT ili Setup paketa. Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH. Paketi podatataka Data0 i Data1 sadrže do 1023 bajta. Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu. Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj. paket Ack. Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično. Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen. Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara. Smer prenosa definiše računar slanjem IN ili OUT paketa. U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke. Nakon ovog paketa eksterni uređaj ili računar šalje Data paket, pri čemu se na kraju svakog primljenog paketa strana koja  je vršila prijem šalje potvrdu uspešnosti slanje tj. Ack, Nak ili Stall paket.

         Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo "inteligencije" kako bi podržali navedeni standard. Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni. Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani. Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova.

http://vojo.milanovic.org
© Copyright, 2003 Milanović Vojo 
All right reserved