Download - ZCuric - USB Komunikacija
-
7/13/2019 ZCuric - USB Komunikacija
1/66
Projekat iz predmeta: Mikroprocesorski sistemi
Univerzitet u Nisu
Elektronski fakultet
Smer: Telekomunikacije
USB KOMUNIKACIJA SA
PIC18F4550
Student: Mentor:
Zuhdin Curic 10181 prof.dr. Mile Stojcev
-
7/13/2019 ZCuric - USB Komunikacija
2/66
USBKOMUNIKACIJASAPIC18F4550
2
SADRZAJ
1. Uvod....................................................................................................................................3
2. MIKROKONTROLERI......................................................................................................42.1.Mikroprocesori u odnosu na Mikrokontrolere..............................................................42.2.Mikroprocesori..............................................................................................................42.3.Mikrokontroleri.............................................................................................................52.4.Razlike izmedju mikroprocesora i mikrokontrolera.....................................................62.5.Mikroracunar................................................................................................................62.6.Mikrokontroer PIC18F4550........................................................................................7
2.6.1.1. Karakteristike........................................................................................73. USART MODUL................................................................................................................94. USB MODUL....................................................................................................................115. USB KOMUNIKACIJA....................................................................................................12
5.1.USB protokoli.............................................................................................................165.2.USB tipovi paketa.......................................................................................................175.3.USB funkcije..............................................................................................................195.4.Endpoints...................................................................................................................195.5.Pipes...........................................................................................................................195.6.HID protokoli.............................................................................................................205.7.HID komunikacioni protokol......................................................................................215.8.Deskriptori..................................................................................................................22
5.8.1.1. Report deskriptori................................................................................296. MIKRO_C KOMPAJLER ZA PIC MIKROKONTROERE............................................32
6.1.Instalacija....................................................................................................................326.2.Kreiranje koda.............................................................................................................34
7.
PROGRAMIRANJE MIKROKONTROLERA PIC1F4550.............................................397.1.AllPic programator......................................................................................................397.2.Software IC-Prog........................................................................................................40
8. HARDVERSKA REALIZACIJA.....................................................................................459. SOFTWARE......................................................................................................................49
9.1.Software mikrokontrolera...........................................................................................499.2.Software u Visual Basic-u..........................................................................................56
10.LABORATORIJSKA VEZBA.........................................................................................6411.PRILOZI...........................................................................................................................65
11.1. AllPic Programator..........................................................................................6511.1.1.Opis uredjaja....................................................................................................6511.1.2.Izrada uredjaja.................................................................................................67
11.1.3.Software..........................................................................................................6711.1.4.Listing koda u asembleru.................................................................................68
12.ZAKLJUCAK..................................................................................................................9913.LITERAURA...................................................................................................................9914.Kratka biografija...............................................................................................................99
-
7/13/2019 ZCuric - USB Komunikacija
3/66
USBKOMUNIKACIJASAPIC18F4550
3
1.
Uvod
Prvi PC racunari su koristili tri porta, i to: jedan za stampac (LPT) i dva serijska (COMl iCOM2), pri cemu je jedan od njih vecinom bio zauzet od strane serijskog misa. Medjutim,
njihova sve veca primena je rezultovala pojavom razlicitih uredjaja koji se na njih ukljucuju,
kao sto su skeneri, digitalne fotoaparati i slicno. To je uzrokovalo uvodjenje USB porta
(Universal Serial Bus),Njegovim uvodjenjem se nastojalo se resavanje sledecih problema:
Resenje u vezi ogranicenja broja slotova na osnovnoj ploci, kao i broja portova
PC racunara.
Jednostavno prosirenja PC racunara upotrebom softverskih drajvera.
Mogucnost napajanja eksternih uredjaja koji malo trose od strane racunara.
Omoguceno je prikljucenje do 127 eksternih uredjaja na glavni USB port, pa se
time resava ogranicenje koje je pre postojalo: jedan uredjaj - jedan slot.
Omogucene su velike brzine prenosa do 478 Mb/s.
Pojednostavljuju se kablovi za prikljucenje uredjaja a njihova duzina se
povecava.
Omogucena je kontrola potrosnje eksternih uredjaja. Podrzano je autokonfigurisanje ovih uredjaja po principu PnP detekcije novih
uredjaja u racunaru.USB standard defmisan je 1996 godine kao verzija 1.0, a koja je dopunjena 1998 godine kada jenastala verzija 1.1. Standard 1.1 podrzava dve brzine prenosa, i to: punu brzinu kada se prenos
krece do 12 Mb u sekundi, i za sporije uredjaje nizu brzinu prenosa do 1.5 Mb u sekundi iomogucuje napajanje uredjaja koji ne trose vise od 500rnA. U aprilu 2000. godine dat je novistandard USB verzije 2.0 koje podrzava velike brzine prenosa do 480 Mb u sekundi.
-
7/13/2019 ZCuric - USB Komunikacija
4/66
USBKOMUNIKACIJASAPIC18F4550
4
2. MIKROKONTROLERI
2.1. Mikroprocesori u odnosu na mikrokontrolere
Da bi ukazali na to kakva razlika postoji izmedju mikroprocesora i mikrokontroleraanaliziracemo sliku 1 koja predstavlja jedan detaljan blok dijagram mikroracunarskogsistema. Dok je mikroprocesor (CPU) na jedinstvenom cipu sam, mikrokontroler, na
jedinstvenom cipu, sadrzi CPU, RAM i ROM memoriju i ostale ulazno-izlazno orijentisanegradivne blokove (paralelni i serijski interfejsi ,tajmeri, logika za prihvatanje prekida, A/D iD/A konvertore i dr.).
Sl.1 Detaljni blok dijagram mikroracunarskog sistema
2.2. Mikroprocesori
Na slici 2 prikazan je blok dijagram mikroprocesora. CPU cine sledeci blokovi: ALU, PC,SP, odredjeni broj radnih registara, kola za taktovanje i sinhronizaciju i kola koja se koriste
za prihvatanje zahteva za prekid.Da bi se kompletirao mikroracunarski sistem pored mikroprocesora potrebno je dodati ROM,RAM memorijske dekodere, oscilator, odredjeni broj ulaznoizlaznih uredjaja, kakvi su
paralelni i serijski portovi za podatke, A/D i D/A konvertori i drugo. Pored ulazno-izlaznihuredjaja specijalne namene, cesto se javlja i potreba da se ugrade i kontroleri prekida, DMAkontroleri, kao I brojaci/tajmeri ciji je zadatak da oslobode CPU od obavljanja U/I aktivnosti.Kada se u sistem instaliraju i uredjaji za masovno memorisanje (hard disk, CD drajver), kao itastatura, mis i CRT displej tada se taj ''mali racunar'' moze koristiti za razlicite aplikacijeopste namene. Osnovna namena CPU-a je da pribavlja podatke, obavlja izracunavanja nad
-
7/13/2019 ZCuric - USB Komunikacija
5/66
USBKOMUNIKACIJASAPIC18F4550
5
podacima I memorise rezultate izracunavanja na disku kao i da za potrbe korisnika prikaze terezultate na displeju (CRT, TFT, LED i dr.). Programi koje koristi mikroprocesor memorisanisu na disku odakle se citaju i smestaju u RAM. Deo programa, najcesce malog obima, seobicno smesta i u ROM-u.
Sl.2 Blok dijagram mikroprocesora (CPU-a)
2.3. Mikrokontroleri
Blok dijagram mikrokontrolera prikazan je na slici 3. Mikrokontroler je u sustini pravi ''maliracunar'' na cipu, koji sadrzi sve gradivne blokove CPU-a (ALU, PC, SP, registre i dr.), alitakodje i RAM, ROM, paralelne i seriske U/I portove, generatore takta i dr. Kao imikroprocesor, i mikrokontroler je uredjaj opste namene, koji pribavlja podatke, obavljaogranicenu obradu nad tim podacima, i upravlja svojim okruzenjem na osnovu rezultataizracunavanja. Mikrokontroler u toku svog rada koristi fiksni program koji je smesten uROM-u i koji se ne menja u toku zivotnog veka sistema.
-
7/13/2019 ZCuric - USB Komunikacija
6/66
USBKOMUNIKACIJASAPIC18F4550
6
Sl.3 Blok dijagram mikrokontroleraMikrokontroler koristi ogranicen skup jedno- ili dvo-bajtnih instrukcija koje se koriste za
pribavljanje programa i podataka iz interne memorije. Veliki broj ulazno-izlaznih pinovamikrokontrolera se moze koristiti za vise namena sto se softverski definise. Mikrokontrolerkomunicira sa spoljnim svetom (pribavlja i predaje podatke) preko svojih pinova, pri cemu jearihitektura i skup instrukcija projektovan za manipulisanje podacima obima bajt ili bit.
2.4. Razlike izmedju mikroprocesora i mikrokontrolera
Razlike su brojne ali one koje su najvaznije su sledece:
Mikroprocesori su najcesce CISC tipa. Za kopiranje podataka iz spoljne memorije uCPU koriste veci broj op-kodova, dok mikrokontroleri jedan ili dva.
Za manipulisanje sa podacima tipa bit, mikroprocesori koriste jedan ili dva tipa
instrukcija, dok je kod mikrokontrolera taj broj veci.
Mikroprocesori su projektovani za brzi prenos podataka iz programa sa spoljno
adresiranih lokacija u cip, dok se kod mikrokontrolera brzi prenos bitova obavlja u
okviru cipa.
Mikrokontroler moze da funkcionise kao racunar bez dodataka spoljnih gradivnih
blokova (memorije i U/I uredjaja), dok operativnost mikroprocesora bez spoljne
memorije i U/I podsistema nije moguca.
2.5. Mikroracunar
Mikroracunar je sastavljen od tri osnovna dela: Procesor (CPU), U/I podsistem imemoriski podsistem. Svaki deo moze varirati u kompleksnosti, od osnovnog pa do jakoslozenog. Ako je procesor realizovan na jedninstvenom cipu, onda se on nazivamikroprocesor. Kada na jedinstvenom cipu postoji mikroprocesor, i ograniceni iznosmemorije i ulaza izlaza tada se to integrisano kolo naziva mikrokontroler. Na slici 4
prikazan je jedan tipican mikroracunarski sistem.
-
7/13/2019 ZCuric - USB Komunikacija
7/66
USBKOMUNIKACIJASAPIC18F4550
7
Sl.4 Tipican mikroracunarski system
Ukazimo sada u kratkim crtama na strukturu i funkcije koje obavljaju osnovni gradivniblokovi mikroracunarskog sistema:Centralna procesorska jedinica (CPU) srce sistema i moze biti realizovana kao 4, 8 ili16-
bitna procesorska jedinica.Memorija moze biti RAM, ROM, EPROM, EEPROM i FLASH tipa ili bilo koja njihovakombinacija. Memorija se koristiti za cuvanje programa i podataka.Ulaz/Izlaz (U/I) cine ga blokovi koji mogu da obavljaju digitalne, analogne I specijalnefunkcije. Preko ulazno-izlaznog podsistema mikrokontroler komunicira sa spoljnim svetom.Oscilator je taktni generator mikroracunar. Njegova uloga je da sinhrono pobudjuje sva kola
u okviru mikroracunarskog sistema. Oscilator moze biti napravljen od diskretnih elemenataili kao gotov modul.Sistem za napajanje- moze biti izveden kao ispravljacka jedinica, autonomna bateriska ilikombinacija. Jedinica za napajanje moze biti izvedena kao linearna (konvertor je tipa AC-DC), kao prekidacki regulator tipa DC-DC konvertor (konverzije tipa AC-DC-DC) ili nekakombinacija.Pas-cuvar (watchdog timer)-koristi se kod sistema za rad u realnom vremenu da obavesti
procesor o tome da je istekao krajnji rok izvrsenja zadatka ili da aktivira procesor iz stanjaHALT u slucaju ako se rad procesora zaustavi kada se procita neki pogresan op-kod ili dr.
2.6. Mikrokontroler PIC 18F4550
2.6.1. Karakteristike
Izbor odgovarajuceg mikrokontrolera za ovaj projekat je bio uslovljen pre svega napodrsku za usb komunikaciju dok je asinhroni serijski modul implementiran u gotovo svimnovijim mikrokontrolerima. Zbog toga je upotrebljen PIC 18F4550 koji po karakteristikama
premasuje poptrebe projekta ali svojom niskom cenom i dostupnoscu na trzistu nije imaoalternativu.
-
7/13/2019 ZCuric - USB Komunikacija
8/66
USBKOMUNIKACIJASAPIC18F4550
8
Pic 18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip. Mikrokontroleriovog proizvoaca se odlikuju malom cenom i sto je najvaznije najboljom besplatnomtehnickom podrskom (kompajleri, razvojni sistemi programatori). Ovi mikroprocesori imajuharvard strukturu pa je memorijska mapa podeljena na programsku i memoriju za podatkekao i EEPROM. CPU koristi tehniku preklapanja kako bi sve instrukcije (osim grananja)izvrsavale jedan ciklus. Zbog toga se osnovni takt deli sa 4 jer se faze izvrsenja naredbi
preklapaju. Sve naredbe su fiksne duzine od 2 bajta tako da je adresiranje memorijeograniceno. Zbog toga se memorija deli na 16 stranica a izbor stranice se vrsi uodgovarajucim kontrolnim registrima. Ova osobina znacajno usporava rad mikrokontrolerameutim napredniji kompajleri vrse pametno planiranje raspodele memorije kako bi sevarijable koje se zajedno koriste nalazile u istoj memorijskoj banci. Programska memorija je32KB dok je RAM velicine 2 KB. Takoe postoji i 256B EEPROM-a. Procesor poseduje
prosireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove nacine adresiranja.Tako su dodate naredbe za hardversko mnozenje i deljenje, inkrementiranje idekrementriranje sa uslovnim skokom, naredbe za citanje tabela i druge.Procesor poseduje istek ali se on nazaost moze koristiti samo indirektno tako sto se u poseban registar upisujezeljeni sadrzaj i potom posebnom instrukcijom sadrzaj tog registra stavlja na stek. Kodcitanja sa steka vrednost se takoe nalazi u tom registru. Oscilator pruza brojne mogucnosti
prilikom izbora radnog takta koji je ujedno i takt za periferije. Maksimalni eksterni takt je48MHZ sto daje CPU takt od 12MHZ. Za to se koristi PLL kolo i delitelji frekvencije.
Najbitnije je da se za rad usb modula mora obezbediti takt od 24MHZ , a PIC ima prednost uodnosu na konkurenciju sto taj takt moze biti nezavistan od takta za CPU i druge jedinice.Mehanizam interapta je organizovan kao jedan interapt vektor koji sadrzi adresu prekidnerutine u kojoj se treba ispitati izvor prekida i preduzeti zeljena akcija, dakle nema interaptvektora za svaki ili grupu izvora prekida sto je jedan od nedostataka ovog mikrokontrolera jerse time gubi na brzini i preglednosti koda.Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogucavaju primenu ugotovo svim aplikacijama.Mikrokontroler poseduje 32 izlazno ulaznie linije, 4 linije za napajanje, 2 linije za oscilator i
po jedna linija za programator i USB kondenzator respektivno, kao sto je prikazano na slici 5:
Sl. 5 Raspred pinova mikrokontrolera
-
7/13/2019 ZCuric - USB Komunikacija
9/66
USBKOMUNIKACIJASAPIC18F4550
9
3. USART MODUL
Univerzalni sinhroni/asinhroni serijski primopredajnik ima mogucnosti half i full duplexprenosa, automatske detekcije i kalibracije bodova brzine. Za komunikaciju se koriste IOpinovi RC6 kao TX i RC7 kao RX za asinhroni prenos. Rad modula se kontrolise pomocu 3
registra. To su:TXSTA : Transmit status and control registar sa sledecim bitovima:
CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D
CSRC - nebitan kod asinhronog prenosaTX9 1 ukljucuje prenos devetog bitaTXEN predaja dozvoljena sa setovanjem ovog bitaSYNC 0 je sinhroni a 1 asinhroni mod radaBRGH setuje veliku brzinu prenosaTRMT status predajnog pomerackog registra, 1 registar je prazan
TX9D deveti bit za prenos (najcesce parnost)
TCSTA: Receive status and control registar sa sledecim bitovima:
SPEN RX9 SREN CREN ADDEN FERR OERR c
SPEN ukljuvuje/iskljucuje serijski portRX9 1 ukljucuje prenos devetog bitaSREN nebitan kod asinhronog prenosaCREN prijem podataka ukljucen setovanjem ovog bita
ADDEN adress detect enable bitFERR framing eror bit za detekciju frame gresakaOERR overrun eror bit za detekciju overrun gresakaRX9D deveti bit za prenos (najcesce parnost)BAUDCON:Baud rate control register
ABDOF RCIDL RXDTP TXCKP BRG16 WUE ABDEN
ABDOF auto baud acquisition rollover bitRCIDL receive operstion idle status bitRXDTP ako je 1 rx podaci su invertovani
TXCKP ako je 1 tx podaci su invertovaniBRG16 ukljucuje 16-bitni generator bodove brzineWUE wakeup enable bitABDEN ukljucuje merenje bodove brzine sledeceg karaktera (55h)
Izbor takta se vrsi setovanjem odgovarajucih bitova i upisom vrednosti u registarski parSPBRGH:SPBRG. U zavisnosti od kombinacije koristi se sledeca tabela za racuananjezeljene brzine asinhrone komunikacije:
-
7/13/2019 ZCuric - USB Komunikacija
10/66
USBKOMUNIKACIJASAPIC18F4550
10
Konfiguracioni bitovi
SYNC BRG16 BRGH
BRG/EUSART
mod
Formula za
racunanje
brzine
0 0 0 8 bitni Fosc/[64(n+1)]
0 0 1 8 bitni Fosc/[16(n+1)]0 1 0 16 bitni Fosc/[16(n+1)]
0 1 1 16 bitni Fosc/[4(n+1)]
U dokumentaciji se mgu naci tablice sa standardnim bodovim brzinama i procentualnimodstupanjima za razlicite konfiguracije takta procesora.Prenos podaka se vrsi preko predajnog i prijemnog kola asinhronog primopredajnika.Predajno kolo je prikazano na sledecoj slici 6.TXREG sadrzi 8-bitni podatak koji se treba poslati. Kada se u ovaj registar upise nekavrednost njegov sadrzaj se prebacuje u TSR registar za siftovanje. Tada je TXREG prazan stomoze izazvati interapt. TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese
poslednji stop bit. TSR je duzine 9 bita. Prvih 8 je vrednost koja se uzima iz TXREG dok je9-ti bit bit parnosti (opciono). Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit paonda vrednost u TXREG kako bi se izbeglo da se 9-ti bit upise posle napustanja 8-bitnevrednosti iz TSR registra. TSR se taktuje signalom iz baud rate generatora koji je ustvari klokza siftovanje. Ovaj registar je vezan za odgovarajuci pin preko koga se prenose serijski
podaci.
Sl. 6 Predajno kolo USART modula
Prijemno kolo je slicne konstrukcije i radi po slicnom principu, prikazano je na slici 7.
-
7/13/2019 ZCuric - USB Komunikacija
11/66
USBKOMUNIKACIJASAPIC18F4550
11
Sl. 7 Prijemno kolo USART modula
Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta vecem taktu od bodovebrzine kako bi se izbegle greske jer je brzina uzorkovanja veca od bodove brzine. Primljenipodaci se pomeraju kroz prijemni sift registar RSR duzine 9 bita. Posle toga se ovimpodacima moze pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupapreko kontrolnog registra. Kada se RCREG napuni vrednoscu iz RSR moze se generisatiinterapt kako bi se obradili preuzeti podaci.Iz prethodnog se moze zakljuciti da se za serijsku komunikaciju mogu koristiti dva nacinarada. Jedan je zasnovan na prekidima koji se generisu pri zavrsetku slanja ili prijema svakog
bajta tako da se u interapt potprogramu moze prihvatiti i obraditi primljeni podatak ilipripremiti slanje sledeceg bajta. Drugi nacin je slican samo se umesto interapta koristiprozivka (pooling) statusnih bitova koji ukazuju na zavrsetak transfera jednog bajta.
4. USB MODUL
Najbitnija karakteristika PIC18F4550 koja ga izdvaja od ostalih iz familije je usbkomunikacioni modul i interfejs. Usb komunikacija je veoma slozena i nije jedinstvena zbogcega cemo samo ukratko opisati osobine usb modula koriscenog mikrokontrolera. Blok semamodula prikazana je na slici 8:
-
7/13/2019 ZCuric - USB Komunikacija
12/66
USBKOMUNIKACIJASAPIC18F4550
12
Sl.8 Blok sema USB modula
Fizicka veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanjeeksternog transivera. Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji
je podeljen na 16 tzv. endpointa i njihove deskriptore koji sadrze podatke o karakteruendpointa (smeru toka podataka), velicini endpointa i njegovoj pocetnoj adresi. Pristup
podacima koji se primaju ili salju se obavlja preko ovih endpointa. USB serijski interfejs vrsiprimopredaju podataka i on mora biti taktovan frekvencijom od 24MHz. Modul ima ugradjen3.3V regulator koji sluzi za napajanjepull upotpornika na D+ liniji sto je bitno kod pocetnefaze prepoznavanja od strane hosta. Njime se odreuje i brzina prenosa (spor ili brz transfer).Komunikacija se zasniva na interaptima kojih ima nekoliko. Za komunikaciju je najvaznijionaj koji se generise kada se primi neki token (podatak). Tada se u odgovarajucim registrimamoze procitati u kom endpointu se podatak nalazi kako bi mu se pristupilo. Postoje i drugi
prekidi koji se okidaju u slucaju greske, reseta, zagusenja ili aktivnosti na liniji. Svi oni semogu iskoristiti za kontrolu komunikacije.Zbog svoje kompleksnosti koja uglavnom visestruko premasuje slozenost vecine aplikacijarad sa usb portom i mikrokontrolerom se najcesce izvodi pomocu gotovih modula. Pogotovotreba imati u vidu da je za ozivljavanje usb komunikacije potrebno pisanje posebnog drajveraureaja na strani hosta kao i odgovarajuceg softvera u mikrokontroleru. Zahvaljujuci
pomenutom HID standardu i gotovim programskim modulima ovaj veliki problem se veoma
lako resava pogotovo ako se radi sa PIC mikrokontrolerima. Sve detaljnije informacijevezane za usb komunikacioni standard se mogu naci na zvanicnom sajtu standardawww.usb.org.
5. USB KOMUNIKACIJA
Prvi PC racunari su koristili tri porta, i to: jedan za stampac (LPT) i dva serijska (COMl iCOM2), pri cemu je jedan od njih vecinom bio zauzet od strane serijskog misa. Medjutim,njihova sve veca primena je rezultovala pojavom razlicitih uredjaja koji se na njih ukljucuju,
-
7/13/2019 ZCuric - USB Komunikacija
13/66
USBKOMUNIKACIJASAPIC18F4550
13
kao sto su skeneri, digitalne fotoaparati i slicno. To je uzrokovalo uvodjenje USB porta(Universal Serial Bus),Njegovim uvodjenjem se nastojalo se resavanje sledecih problema: Resenje u vezi ogranicenja broja slotova na osnovnoj ploci, kao i broja portova
PC racunara. Jednostavno prosirenja PC racunara upotrebom softverskih drajvera. Mogucnost napajanja eksternih uredjaja koji malo trose od strane racunara.
Omoguceno je prikljucenje do 127 eksternih uredjaja na glavni USB port, pa setime resava ogranicenje koje je pre postojalo: jedan uredjaj - jedan slot.
Omogucene su velike brzine prenosa do 478 Mb/s. Pojednostavljuju se kablovi za prikljucenje uredjaja a njihova duzina se
povecava. Omogucena je kontrola potrosnje eksternih uredjaja. Podrzano je autokonfigurisanje ovih uredjaja po principu PnP detekcije novih
uredjaja u racunaru.USB standard defmisan je 1996 godine kao verzija 1.0, a koja je dopunjena 1998 godine kada
je nastala verzija 1.1. Standard 1.1 podrzava dve brzine prenosa, i to: punu brzinu kada seprenos krece do 12 Mb u sekundi, i za sporije uredjaje nizu brzinu prenosa do 1.5 Mb usekundi i omogucuje napajanje uredjaja koji ne trose vise od 500rnA. U aprilu 2000. godine
dat je novi standard USB verzije 2.0 koje podrzava velike brzine prenosa do 480 Mb usekundi.Za prikljucak na USB port koristi se cetvero zicni kabl preko koga se prenose podaci inapajanje sa impedansom 90 , sto je prikazano na slici 9.
Sl. 9 Presek USB kabla
Za prenos podataka se koriste dve linije D+ i D-. Kada se prenosi logicka nula linija D- jena vecem potencijalu od linije D+, dok je u slucaju prenosa logicke jedinice obrnuto.Predajnici moraju da daju napon veci od 2.8 V sa opterecenjem od 15 k. Prijemnici morajuda imaju simetrican ulaz pri cemu do promene stanja dolazi ako se na ulazu prijemnikanaponi razlikuju za vise od 200 mV. Svaka linija za prenos podataka ima i nesimetrican
prijemnik za detekciju greske koja se pojavi ako su obe linije podataka nadju na istomnaponu. Kada se radi o brzom USB prenosu tada se na liniju D+ prikljucuje opteretniotpornik (pull-up) reda 1.5 k, dok se kod sporog prenosa on ukljucuje na liniju D-. Naizlazima drajvera linija D+ i D-prikljucuju se opteretni otpornici reda 15 k. U slucaju kadaUSB eksterna jedinica nije pod naponom i kada je drajverski izlaz porta u stanju visokeimpedanse preko ovih otpornika se odredjuje brzina prenosa. Preko njih se takodje odredjujeda li je eksterni uredjaj povezan na USB cvor. Kada uredjaj nije povezan na USB cvornjegovi izlazni drajveri ce biti u stanju visoke impedanse i obe linije bice na potencijalu
-
7/13/2019 ZCuric - USB Komunikacija
14/66
USBKOMUNIKACIJASAPIC18F4550
14
mase, koje se naziva nesimetricna nula SEO (Single Ended 0). Povezivanjem uredjaja na cvoron ce dobiti napajanje, ali njegovi izlazi i dalje ce biti u stanju visoke impedanse, dok cenapon na liniji podataka porta koji je povezan na opteretni otpor postati visok, sto moze dadetektuje cvor. U slucaju da se ne salju USB paketi, linije podataka se nalaze u stanju visokeimpedanse. Za prikljucenje USB uredjaja koriste se konektori prikazani na slici 10. Konektorina strani PC racunara spadaju u tzv. tip A konektora a na strani uredjaja u tip B. Pored
klasicnog postoji i mali tip B konektora koji koriste pre svega manji uredjaji kao sto sukamere, fotoaparati i slicno.
Sl. 10 USB konektori
Standardni USB kabl za prikljucenje eksternih USB uredjaja je oblika kao na slici 10.
Sl. 10 Standardni USB kabal
Organizacija USB magistrale prikazana je na slici 11.
Sl. 11 Organizacija USB magistrale
-
7/13/2019 ZCuric - USB Komunikacija
15/66
USBKOMUNIKACIJASAPIC18F4550
15
Iz prikazane slike se vidi da se USB magistrala moze predstaviti sa tri nivoa, i to: Nivo USB uredjaja (USB Interface Layer) koji obezbedjuje fizicku vezu za prenos
signala i paketa izmedju racunara i USB uredjaja. Ovaj nivo omogucuje sistemskimprogramima koji kontrolisu USB magistralu, rad sa opstim funkcija koje koristi USBuredjaj
Nivo funkcije se ostvaruje upotrebom klijentskog softvera (Client SW)
Nivo interfejsa obezbedjuje da se fizicki obavlja komunikacija.
Sistem USB povezivanja se deli na cetiri funkcionalno zaokruzene celine: USB uredjaj (USB PhysicalDevice). Klijentski softver (Client Sofhvare) USB sistemski softver (USB System Software) Glavni USB kontroler (USB Host Controller).
USB predstavlja neki eksterni uredjaj koji se prikljucuje na USB i koji izvrsava zahtevanefunkcije. Klijentski softver omogucava da se izvrsi prenos podataka izmedju eksternog USBuredjaja i racunara, a najcesce ga isporucuje proizvodjac USB uredjaja. USB sistemski
softver je deo operativnog sistema za podrsku USB uredjaja i isporucuje se uz operativnisistem. Glavni USB kontroler zaokruzuje u jednu celinu hardver i softver koji omogucuje radUSB uredjaja.
USB uredjaji sa racunarom komuniciraju slanjem paketa. Na pocetku slanja paketa linija zaprenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju,dok se na kraju paketa podataka, ova linija postavlja u SEO stanje u duzini trajanja od dva
bita.USB uredjaji se mogu resetovati na nekoliko nacina od koji se cesto koristi pristup kada selinija podataka postavi u SEO stanje u trajanju od l0 ms. U slucaju da se USB magistralanalazi u mirnom stanju vecem od 3 ms tada eksterni USB uredjaji mogu preci u stanje male
potrosnje, ako to podrzavaju. Vracanje u radno stanje treba da traje najduze 20 ms. Prenospodatka se vrsi upotrebom NRZI metoda kodiranja (Non Return Zero Invert), sto znaci da
ako se pojavi logicka jedinica ona ce trajati celom svojom duzinom, odnosno nece doci dopromene naponskog nivoa. U slucaju pojave povorki nula napon sa linije se menja za svakibit, sto se koristi za uspostavljanje signala takta na prijemu. Kada se u povorci podatakapojavi sest uzastopnih jedinica radi sigurnosti na prijemu, vrsi se umetanje bita, tj. ubaci sejedna nula koja se na prijemu izbacuje.Preko USB magistrale se prenosi i napon napajanja V+ koji iznosi + 5 V, uz maksimalnoopterecenje do 5 A, pri cemu potrosnja pojedinacne eksterne jedinice ne sme preci 400 mAkada je u radnom stanju, a u stanju mirovanja 500 A. Ovaj uslov ne mogu ispuniti svi USBuredjaji tako da u tom slucaju moraju koristiti sopstveno napajanje. Prilikom inicijalizacijeUSB sistema po ukljucenju racunara on pribavlja podake o svim uredjajima koji povezani naUSB magistralu radi numerisanja magistrale (bus enumeration).
Za ispravan rad USB uredjaja koji su povezani na racunare svaki od njih mora da ima adresukoje se krecu u opsegu od 0 do 128 i dodeljuje ih racunar prilikom konfigurisanja magistrala.Adresa 0 je adresa koju koristi racunar za postavljanje uredjaja povezanih na USB magistralui ne mogu je koristiti eksterni uredjaji.
-
7/13/2019 ZCuric - USB Komunikacija
16/66
USBKOMUNIKACIJASAPIC18F4550
16
5.1. USB protokoli
Svaka USB transakcija je sadrzana od:
Token Paketa (njegovo zaglavlje definise sta ce dalje slediti) Opcionalnog Data Paketa (sadrzi podatke)
Status Paketa (koristi se u kontroli transakcija i omogucuje korekciju greski)
Host inicira sve transakcije. Prvi paket je token i omogucuje hostu da opise sta ce daljeslediti i koje ce biti vrste transakcija podataka tj. citanja ili upisivanja kao i koja je adresauredjaja i odgovarajuci endpoint. Sledeci paket je generalno paket podataka iza koga sledihandshaking paket ako je Data paket ispravno primljen, odnosno Stall paket ako to nijeslucaj. Obicno se paketi sastoje od sledecih polja: Pocetak svakog paketa pocinjesinhronizacionim bajtom SOP(SYNC), dok se sledeci paket razdvaja od prethodnog sa EOPsto je prikazano na slici 12.
Sl.12 Prikaz slanja podatka na USB magistrali
Na pocetku svakog paketa salje se sinhronizacioni bajt (SYNC) koji se sastoji od sedam nulai jedne jedinice (80H) za spore USB jedinice i 32 bita za USB jedinice sa punom i velikom
brzinom prenosa. Na osnovu ovog bajta sinhrono kolo na strani prijemnika generise taktnisignal.
Nakon sinhronizacionog bajta sledi polje za identifikaciju paketa PID(Packet Identifier),kodkoga se prva 4 bita koriste za identifikaciju vrste paketa, dok su sledeca cetiri bita (vecetezine) invertovani bitovi PID-a, na osnovu cega se proverava tacnost primljenog PID-a.Polje PID definise vrstu paketa i njegov format, kao i tip detekcije greske. U tabeli 1
prikazane su PID vrednosti za pojedine grupe paketa.
-
7/13/2019 ZCuric - USB Komunikacija
17/66
USBKOMUNIKACIJASAPIC18F4550
17
Tabela 1 PID vrednosti pojedinacnih vrsta paketaAdresno polje (ADDR) je duzine 7 bita i odredjuje jedinicu kojoj se paket salje, pa je moguceukupno adresirati 127 jedinica, s tim sto adresa 0 nije dozvoljena, dok jedinice koje nisuadresirane moraju slati paketa sa adresom 0.Endpoint polje (ENDP) sadrzi 4 bita, omogucujuci 16 endpointa. Spore USB jedinice koristesamo 2 dodatna endpointa na vrhu podrazumevanog kanala (4 endpointa su maksimalna).Cyclic Redundancy Checccs(CRC) koristi se za kontrolu ispravnosti prijema paketa. Svitoken paketi imaju 5-bitni CRC dok Data paket ima 16-bitni CRC.Kraj paketa (ENDP), signalizira se pomocu SEO stanja.
5.2. USB tipovi paketa
Postoje sledeci oblici paketa u USB komunikaciji:
Sl. 13 Format SOF paketa
SOF (Start of Frame Packets)paket ciji je PID=0101 salje 11 - bitni podatak o broju okvira(frame), kao i 5 bitova CRC detekcije. Ovaj paket salje host svake milisekunde 500 ns naUSB jedinicama sa punom brzinom ili svakih 125s0.0625S na brzim USB jedinicama.
Sl.14. Format Setup, IN, Out paketa
-
7/13/2019 ZCuric - USB Komunikacija
18/66
USBKOMUNIKACIJASAPIC18F4550
18
Setup, IN i OUTpaketi imaju oblik kao na slici 14. Setuppaket ciji je PID=1101 vrsisetovanje funkcije od strane racunara i sadrzi tekucu i krajnju (Endpoint)adresu. IN paket ciji
je PID=1001 je prvi paket od eksternog uredjaja prema racunaru. OUT paket ciji jePID=0001 je prvi paket koji racunar salje periferijskom uredjaju.
Sl.15. Format Data paketa
Data0 paket ciji je PID=0011 je paran paket podataka koji sadrzi do 1023 bajta podataka.Datal paket ciji je PID=1011 je neparan paket podataka. Ovi paketi za CRC kontrolu koriste16 bita.
Sl.16. Format Ack, Nak, Stall paketa
Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greske. Nakpaket koji ima PID=1010 je odgovor predajnika o neispravno primljenom paketu. Stall paketkoji ima PID=1110 pokazuje da je neko odrediste zaguseno, tj. ne moze da primi sve do tada
poslate pakete.
Prenos podataka pocinje tako sto racunar posalje paket u kome je definisan tip i smerprenosa, adresa USB uredjaja i adresa krajnjeg odredista. Ovaj paket se naziva token.Adresirani uredjaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postajespreman za prijem ili predaju podataka. Primalac odgovara slanjem odzivnog paketa(handshake packet) izvestavajuci o uspesnosti prenosa. Adresiranje uredjaja se vrsi prekoadresnog polja paketa od 7 bita. Adresa se koristi kod IN, OUT ili Setup paketa. Paket SOFsadrzi broj frejmova od 11 bita, pri cemu se njegov sadrzaj inkrementira za svaki novi okvirsve do vrednosti 7FFH. Paketi podatataka Data0 i Data1 mogu da sadrze do 1023 bajta i tokoriste USB brze jedinice, dok kod sporih jedinica ta je duzina 8 bajta. Ova dva paketaomogucavaju jednostavnu sinhronizaciju predajnika iprijemnika u slucaju zahteva predajnikaza ponovnim slanjem radi greske u prenosu. Predajnik salje novi paket tek kada od
prijemnika dobije porvrdu o uspesnosti, tj. paket Ack. Prvo se salje paket Data0, pa paket
Datal i tako naizmenicno. Svi paketi imaju na kraju bitove za redundantu proveru greske(CRC) da li je paket ispravno primljen ili nije. Pri prenosu podataka uvek se obavljakomunikacija u oba smera i uvek je inicijalizirana od strane racunara. Smer prenosa definiseracunar slanjem IN ili OUT paketa. U IN paketu racunar zahteva od eksternog USB uredjajada mu posalje podatke. Nakon ovog paketa eksterni uredjaj ili racunar salje Data paket, pricemu se na kraju svakog primljenog paketa strana koja je vrsila prijem salje potvrduuspesnosti slanjem Ack, Nak ili Stall paketa.
-
7/13/2019 ZCuric - USB Komunikacija
19/66
USBKOMUNIKACIJASAPIC18F4550
19
5.3. USB funkcije
Najcesce se misli na USB jedinicu, ili USB periferiju ali osim njih postoji i USB jedinica zaslanje, koju koristi host ili periferija, odosno USB Hub ili Host kontroler, ili USB periferijska
jedinica. Zbog toga su uradjene odgovarajuce USB funkcije koje omogucuju USB jedinicamasposobnost i funkcionalnost kao sto su stampaci, skeneri, modemi i druge periferijski
uredjaji.Najveci broj USB funkcija podrzava USB protokole niskog nivoa sve do transakcionog sloja.Razlog pokrivanja vecine USB funkcija je zato sto ce kontroleri prijavljivati greske kao uslucaju PID encoding greske. Vecina funkcija ima seriju bafera obicno duzine 8 bajta. Svaki
bafer ima odgovarajuci endpoint - EPO IN, EPO OUT itd. Pretpostavimo da host posaljezahtev za Device deskriptorima. Funkcija hardvera procitati ce Setuppaket, odredjujuci izadresnog polja da li je paket za njega, i ako je tako on ce iskopirati podatke iz paketa uodredjeni endpoint bafer odredjen vrednoscu polja Setup token-a. Tada ce slediti slanjeHandsakepaketa od primaoca i generisanje internog interapta unutra mikrokontrolera zaodgovarajuci endpoint nakon prijema paketa. Softver odmah obradjuje interapt i cita sadrzajendpoint bafera i izdvaja device deskriptore.
5.4.
Endpoints
Endpoints se moze opisati kao izvor podataka. Kako je bas centar hosta, to se endpointpojavljuje kao kraj komunikacionog kanala u USB funkciji. Softverski sloj, odnosno drajverjedinice moze slati pakete jedinici npr. EPl. Podaci koji izlaze iz hosta, kao kraj imace EPOUT bafer. Firmwareu USB jedinici moze tada procitati podatke. Ako se radi o vracanju
podataka, funkcija ne moze jednostavno upisati podatke na bas jer je on kontrolisan od stranehosta. Zato se podaci upisuju u EPl IN bafer koji u njemu ostaju sve dotle dok host ne posaljezahtev za IN paketom od endpointa od koga su zahtevani. Zbog toga se endpoint mozesmatrati interfejsom izmedju funkcija hardvera i firmware koji obradjuje funkcije jedinice.Sve jedinice moraju podrzavati nulti endpoint. To je endpoint koji primaju sve kontrole
jedinice i statusne zahteve u toku enumeriacije sve dotle dok jedinica ne bude operativna nabas-u.
5.5. Pipes
U isto vreme jedinice salju i primaju podatke iz razlicitih endpoint-a, a pomocu Clientsoftvera kroz razlicite pipes. Pipe je logicka konekcija izmedju hosta-a i endpoint-a. Pipes
predstavlja skup parametara koji odredjuju sirinu njegovog opsega, koji je tip transfera(Control, Bulk, Iso ili Interrupt), smera kretanja podataka kao i maksimalnu velicinu
paketa/bafera. Podrazumevani pipeje bi-direkacionalni, uradjen tako da omogucuje kakonulti endpoint ulaz tako i nulti endpoint izlaz sa Control transfer tipom. Pipe-ovi se dijele na
pipe-ove za: tokove (stream) - za interrupt, bulki isochronusprenos poruke (message) - za kontrolni (control)prenos (za defaultpipe)
-
7/13/2019 ZCuric - USB Komunikacija
20/66
USBKOMUNIKACIJASAPIC18F4550
20
Sl. 17 Tokovi komunikacije u USB sistemu
5.6. HID protokoli
Univerzalni serijski bas (USB) povezuje se preko habova i funkcija sa PC-jem. Haboviobezbedjuju tacke povezivanja, u isto vreme sa funkcijama za pristup PC-u. HID Interfacejefunkcija koja pripada tzv. Human Interface Device (HID) i podklasa je od USBkomunikacione arhitekture.USB arhitektura sastoji se od 4 sloja i to: clinet sofhvare, USBdriver(USBD),Host Conrolllerdriver (HCD) i Host Controllera(HC) sto je prikazano na slici 18.
Sl. 18 USB konverzija informacija od Client Software ka Bus-u
-
7/13/2019 ZCuric - USB Komunikacija
21/66
USBKOMUNIKACIJASAPIC18F4550
21
Clientsoftwareupotrebljava/generise specificne funkcije za podatke u/iz a funkcija endpoint preko poziva i povratnog poziva zahteva IRP (Input/Output Request Packets) sa USBinterfejsom. USBD konvertuje podatke u clientTRPs u/iz jedinici kao krajnjoj tacki preko
poziva/povratnog poziva sa odgovarajucim HCD. HCD konvertuje IRP u/iz transakcije iorganizuje ih za manipulaciju pomocu Host Controller-a. HC uzima transakcije i generise
aktiviranje bus-a delujuci preko paketa sa funkcijama za podatke na datoj strani busa-a zasvaku transakciju. Transakcije se ponavljavaju sa svakim USB frejmom ili 1 milisekunde.Ove transakcije mogu da sadrze do tri paketa i to: token, data i handsake i limitirane suvelicinom od 8 bajta za spore (low) USB jedinice. Svaka transakcija pocinje od strane HC, iz
bazne tabele, slanjem Tokenpaketa jedinicama opisanim tipom i smerom transakcije, USBadresom jedinice i broja krajnje tacke(endpoint number). Adresirana USB jedinica selektujega dekodiranjem odgovarajuceg adresnog polja. Tok podataka moze biti samo u jednomsmeru u datom vremenu, bilo od hostaka USB jedinici (OUT) ili od jedinice ka hostu (IN).Izvor transkacije je npr. host kada salje podatke jedinici (OUT) ili za USB jedinicu (IN).Uredjaj koji prima paket odgovara tzv. Handsake packet-ompotvrdjujuci da je transferzavrsen.
5.7. HID komunikacioni protokol
HID jedinice koriste dva od ukupno cetiri USB komunikaciona tipa. Na najnizem nivou, zasve vrste komunikacija izmedju hosta i jedinica koristi se transfer paketa. Na funkcionalnomnivou, komunikacioni tipovi razlikuju se u formatima podataka, njihovoj velicini kao i u
pouzdanosti u prenosu.USB speifikacija 1.1 omogucuje prenos podataka za tzv. low speed (male brzine) USB
jedinica. HID jedinice podrzavaju samo Control Interupt transfer podataka. Control transferpodataka koristi se uz pomocu USB sistemskog softvera pri konfigurisanju jedinica kada seone prvi put prikljucuju. Interapt transferpodataka koristi se kada se radi sa malom broju
podataka i ogranicen je na vreme cekanja odziva. Control transferkomunikacija prikazana jena slici 19.
Sl. 19 Format kontrol transakcije
-
7/13/2019 ZCuric - USB Komunikacija
22/66
USBKOMUNIKACIJASAPIC18F4550
22
Kako se vidi iz slike Contol transferformat, inicira hostna taj nacin sto salje SETUP paket ufunkciji, primarnoj jedinici za prijem podataka. Host zatim salje Data paket, koji prilikom
prijema se potvrdjuje slanjem ACK paketa prem hostu. Interapt transakcija prikazana je naslici 20.
Sl. 20 Format Interapt transakcije
Iz slike se vidi da ova transakcija pocinje jednim IN ili OUT paketom. Paket signal funkcijamoze biti slanje podataka hosta (TN) ili prijem podataka hosta (OUT). Jedan poslati ili
primljeni podatak hosta, zavrsava se sa ACK paketom ako je podatak primljen ispravno. Akoprijem IN paketa nije izvrsen od strane jedinice, ona salje NAK ili STALL paket hostu.Slicno tome ako se pojavi greska u prijemu DATA paketa, jedinica salje NAK ili STALL
paket host-u. Pre nego sto USB jedinica pocne da komunicira sa PC, HID Interface mora bitiprepoznat kao HID jedinica i detektovana da je prikljucena na USB port. Zbog toga kada seHIDInterfaceprvi put prikljuci na USB port, ulazi se u konfiguraciono stanje kada hostodreduje fukcije i opseg koji se zahtevaju. Informacije o konfiguraciji sadrzane su obicno uROM sekciji jedinice i organizovane su pomocu deskriptora.
5.8. Deskriptori
Deskripotori predstavljaju niz bajtova podataka slicne sadrzine.Devlce, string, configurationi endpoint deskriptori su standardni USB deskriptori, dok su reporti physical deskriptori HIDklase. Hijerarhija deskriptora prikazana je na slici 21.
-
7/13/2019 ZCuric - USB Komunikacija
23/66
USBKOMUNIKACIJASAPIC18F4550
23
Sl. 21 Hijerarhijska struktura USB deskriptora
Vrednosti deskriptora dati su u tabeli 2.
Tabela 2 Vrednosti deskriptor tipova
Device deskriptor daje generalne informacije o jedinici kao sto je velicina paketa zastandardnu komunikaciju izmedju podrazumevanih kanala, Prodavca, Verziju itd. Njegova jestruktura data je u tabeli 3.
-
7/13/2019 ZCuric - USB Komunikacija
24/66
USBKOMUNIKACIJASAPIC18F4550
24
Tabela 3 Opis Device deskriptora
bodUSBpolje govori o kojoj se vrsti USB jedinice radi i ima BCD vrednost u obliku0xJJMn gde JJ predstavlja pocetni broj verzije, M sledeci i N krajnji, pa takoUSB2.0 bice predstavljen sa 0x200, USB 1.1 sa 0x110 i USB 1.0 sa 0x100.
bDeviceClass, bDeviceSubClass i bDeviceProtocol koristi operativni sistem da
pronadje drajver klasu za jedinicu. Obicno je samo bDeviceClasspostavljen na ovomnivou.
Configurations deskriptor opisuje konfiguraciju jedinice koju zahteva SetConfiguration()zahtev. Ova klasa deskriptora opisana je u tabeli 4.
-
7/13/2019 ZCuric - USB Komunikacija
25/66
USBKOMUNIKACIJASAPIC18F4550
25
Tabela 4 Opis Configurations deskriptora
Kada configurations deskriptor tabela bude procitana, ona vraca kompletnu hijerarhijuukljucujuci sve njene interface i endpointdeskriptore. wTotalLenghtpolje predstavlja ukupan
broj bajta u hijerarhiji a sto je prikazano na slici 22.
Sl. 22 Hijerarhija Configurationsdeskriptora
bNuminterface jebroj interfejsa koje opisuje ova konfiguracija bConfigurationValue se koristi od SetConfiguration zahteva kako bi odabrao ovu
konfiguraciju iConfiguration je indeks od string deskriptora koji opisuje konfiguraciju u citljivom
-
7/13/2019 ZCuric - USB Komunikacija
26/66
USBKOMUNIKACIJASAPIC18F4550
26
obliku bmAttributes opisuje parametre napajanja uredjaja bMaxPower daje podataka o maksimalnoj snazi jedinice koju ona moze da
zatrazi od bus-a za napajanje.
Interface deskriptor ukljucuje indikator HID klase koji pocinje brojem interfjesa (pocev od
0), i brojem od endpoints interfejsa. Opis ovog desriptora dat je u tabeli 5.
Tabela 5 Opis Interfacedeskriptora
Grupisanjem endpointsunutar interfacedeskriptora omogucuje preciznu alokaciju resursa zaspecifirane funkcije jedinica.Endpoint deskriptor definise smer podataka, komunikacioni tip,velicinu paketa podataka kao i opseg zahteva za endpoint. Endpoint deskriptor opisan je utabeli 6.
-
7/13/2019 ZCuric - USB Komunikacija
27/66
USBKOMUNIKACIJASAPIC18F4550
27
Tabela 6 OpisEndpoint deskriptora
String deskriptori su opcionalni Unicode kriptovani i sadrze informacije kao sto je
proizvodjac i ime proizvoda a sto se koristi pozivom GetDescriptor().Ova dva podatka suobavezna i moraju biti ugradjena. Struktura tabele String deskriptora data je u tabeli 7.
-
7/13/2019 ZCuric - USB Komunikacija
28/66
USBKOMUNIKACIJASAPIC18F4550
28
Tabela 7 Struktura nultog String deskriptora
Hostkoristi ovaj deskriptor kako bi odredio koji su mu jezici na raspolaganju. Kada je jezik
podrzan on ce biti preuzet sa GetDescriptor(String) zahtevom. Ostali podstring deskripotri,kojih moze biti vise, imaju strukturu datu u tabeli 8.
Tabela 8 Struktura ostalih String deskriptora
Jedinice koje imaju samo jedan devicedeskriptor mogu imati vise configurationdeskriptorasvaki opisan sa razlicitim konfiguracijama. Svaka konfiguracija mora imati najmanje jedaninterface deskriptor, a svaki interface deskriptor mora imati endpoints sa. zadatimkarakteristikama.
Sl. 23 Dijagram deskriptora HID klase
-
7/13/2019 ZCuric - USB Komunikacija
29/66
USBKOMUNIKACIJASAPIC18F4550
29
HID deskriptor specificira duzinu i tip HID klase deskriptora a njegov opis date je u tabeli 9.
Tabela 9 Opis HID deskriptora
Phiysicaldeskriptorisu opcionalne strukture koji pokazuje relaciju izmedju coveka i kontrolnejedinice. Reportdeskriptori opisuju svaki deo podataka koji jedinica generise imajuci u viduprotokol podataka. On je nadlezan za operacije sa jedinicama i zbog toga je vrlo bitan.
5.8.1.Report deskriptori
Prethodno opisani deskriptori su predstavljeni kao tabele koje sadrze informacije. Svakatabela informacije moze se zamisliti kao blok podataka. Report deskriptori se sastoje od delainformacija. Svaki deo informacije naziva se item. Svaki item ima jedan bajt prefiks koji sesastoji od: item taga-a, item typa i itema size-a. On koristi dva tipa item-a i to: short(kratkog)i long(dugackog).Na slici 24 je prikazana shor tipkoje se sastoji od 4 bajta.
Sl.24 Report deskriptor short itemformat
Na slici 25 data je struktura longitem tipa.
Sl. 25 Reportdeskriptor longitemformat
HID klasa drajvera poseduje parser koji se koristi za analaziranje item-a koji se nalaze uReport deskriptoru. Parser uzima informacije iz deskriptora i formira linearnu strukturu.Izdvojene informacije upisuje u tzv. item state tabelu. Item state tabela se sastoji od
pojedinacnih item-a. Gledajuci sa strane parsera, HID klasa jedinica izgleda kao na slici 26.
-
7/13/2019 ZCuric - USB Komunikacija
30/66
USBKOMUNIKACIJASAPIC18F4550
30
Sl. 25 Tabela stanja item Report a
Kada dodje do sukobavljavanja item-a, sadrzaj item state tabele bice pomeren. Ovi itemiukljucuju sve:Main, Pushi Popitem-e.
KadaMainitem postoji, nova report struktura se alocira i inicijalizira kao tekuca itemstatetabela. Svi lokalni itemibiceizbaceni iz item statetabele, osim Globalitemakojiostaje. U tom smeru, Globalitemspostavlja podrazumevanu vrednost za podsekvencu
novih Main item-a. Main itemi su povezani sa kolekcijom pomocu definisanogredosleda. Nova kolekcija pocinje kada parser dotigne Colectionitem.Itemparserje
povezan sa kolekcijom pomocu svih definisanih Mainitema izmedju Colectionitemai sledeceg Colectionitem-a.
Kada je Push itemsukobljen, item state tabela se kopira i zamenjuje na steku, da bikasnije bila obnovljena.
Kada Pop itempostoji, item state tabela se zamenjuje sa tabelom koja se nalazi navrhu steka.
Definisano je petMainitem tagova a to su: Input item tag: Opisuje podatke za jednu ili vise pojedinacnih kontrola na jedinici.
Naprimer citanje x, y pozicije, ili vise nivoa ili citanje niza podataka koji opisujuprekidace na nekoj tabli.
Output item tag: Opisuje podatke za jednu ili vise pojedinacnih kontrola na jedinici.Naprimer pozicioniranje na x, y poziciju, ukljucenje date led diode i sl.
Feature item tag: Opisuje za jedinicu kako input tako i output ne nameravajucizamaranje krajnjeg korisnika - naprimer kao sto je softverska osobina ili izmenaControlPanel-a.
Collection item tag: Znacajno grupisanje Input, Output i Feature item-a -na primermis, tastatura, dzojstik itd.
-
7/13/2019 ZCuric - USB Komunikacija
31/66
USBKOMUNIKACIJASAPIC18F4550
31
End Collection item tag: Oznacava kraj itemkolekcije.Report deskriptor dobavlja svaku pojedinacnu kontrolu za jedinicu. Svaki Main item tag(Input, Output i Feature) identifikuje velicinu podatka koji ce biti vracena pojedinacnomkontrolom, kao i da li je podatak absolutan ili relativan, i da li je informacija vazana.Prethodni Local i Global itemidefmisu minimalne i maksimalne vrednosti podataka. Reportdeskriptori predstavljaju kompletan skup svih itemadate jedinice. Moze se smatrati da Report
deskriptori sami opsluzuju aplikaciju podacima.Jedno ili vise polja od podataka za kontrolu definisano je kao Main item i prethodno opisano
pomocu Global i Local item-a. Local item opisuje samo polja podataka koja su defmisanakao sledeci Main item. Global itemi predstavljaju podrazumevane vrednosti za svasubsekvencna polja u deskriptoru. Razmotrimo sledeci primer:
Report Size(3)
Report Count(2)
Input
Report Size(8)
Input
Output
Itemparser interpretiraReport deskriptor itemeod pocetka i kreira sledeci report (LSB se
nalazi levo), sto je prikazano na slici 26.
Sl. 26 Prikaz reportadobijenog za dati primer
Reportdeskriptor moze da sadrzi vise razlicitih Main item-a. Reportdeskriptor mora ukljucitisvaki od pojedinacnih itema kako bi opisao kontrolne podatke (svi drugi itemisuopcionalni):
Input(Output ili Fature) Usage
Usage Page
Logical Minimum
Logical Maximum
Report Size
Report Count
-
7/13/2019 ZCuric - USB Komunikacija
32/66
USBKOMUNIKACIJASAPIC18F4550
32
6.
MIKROC KOMPAJLER ZA PIC
MIKROKONTROLERE
mikroC prestavlja mocan softverski alat, koji je razvila beogradska Mikroelektronika,i namenjen je pisanju koda za Microchipove PIC mikrokontrolere. Koristeci mikroC,
programeru je omogucen jednostavan nacin da kontrolise proces programiranja i napravikvalitetanfirmware.Osnovne karakteristike programa mikroC su sledece:
Pisanje C koda koriscenjem kvalitetnog editora, sto se ogleda automatskomkontrolom i upozorenjima vezanim za sintaksu koda, koriscenih parametara, kao iautomatskoj korekciji pojedinih gresaka
Preglednost strukture programa (koda), promenljivih i funkcija omogucava Codeexplorer
Jasan asemblerski kod i standardna kompatibilnost generisanih HEX datoteka tokaprogra-ma preko ugraeg debagera (debugger)
Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina, kojeznacajno ubrzavaju pisanje programa
Detaljan izvestaj i graficko predstavljanje RAM i ROM mape, statistike koda islicno.
Moramo da napomenemo kako mikroC odstupa od ANSI standarda u nekoliko segmenata.Neka odstupanja su nacinjena su u cilju da se olaksa programiranje, dok su druge rezultathardverskih ograni-cenja PIC mikrokontrolera. Pomenucemo neke specificnosti:
Rekurzivne funkcije (function recursion) su podrzane sa izvesnim ogranicenjima,koja su posledica nesto slozenijeg pristupa magacinu (stack) i ogranicenja vezanaza memoriju
Pokazivaci (pointers) promenljivih i pokazivaci konstanti nisu kompatibilni, tj. nijemoguca meusobna dodela ili uporeivanje
mikroC tretira oznacavanje constkao true constans (kodC++), sto omogucavakoris-cenje constobjekta na mestima gde ANSIC ocekuje constant izraz .Ukolikose tezi ka pre-nosivosti programa, treba koristiti tradicionalno pretprocesorskodefinisanje konstanti
mikroC dozvoljava C++ stil jednolinijskih komentara, koristeci dve kose crte (//).Komentar moze da pocne bilo gde i traje do sledece nove linije programskog koda
Brojne standardne C biblioteke (ctype, math, stdlib, string ) implementirane su umikroC, uz individualna odstupanja
Napominjemo da mikroC podrzava gotovo sve PIC mikrokontrolere serija 12, 16 i 18.Izuzetak su mikrokontroleri koji imaju staro hardversko jezgro kao na primer PIC12C508,PIC12F508, PIC12C509, PIC12F509 itd. Inace, ogranicena verzija (do 2KB programa)
moze da s preuzme sa sajta Mikroelektronike (www.mikroe.com). U slicaju ako se zelipotpuna verzija (neogranicen kapacitet programa), mora da se plati licenca od 250$.
6.1. Instalacija
Ovde cemo preko Slika 27-31 ilustrovati proces instaliranja mikroC-a. Inace, instalacijatraje 30 sekundi. Posle instalacije treba pokrenuti mikroC, a to se najjednostavnijeostvaruje klikom na ikonicu:
-
7/13/2019 ZCuric - USB Komunikacija
33/66
USBKOMUNIKACIJASAPIC18F4550
33
Sl. 27 Pocetak procesa instalacije se ostvaruje klikom na izvrsni fajl mikroC_..._.exe
Sl. 28 Sada treba kliknuti na komandno dugme NEXT
-
7/13/2019 ZCuric - USB Komunikacija
34/66
USBKOMUNIKACIJASAPIC18F4550
34
Sl. 29 Prihvatanje uslova licenciranja i zatim treba kliknuti na komandno dugme NEXT
Sl. 30 Izbor programatora (PicFlash), gotovih primera i zatim klik na komandno dugmeNEXT
-
7/13/2019 ZCuric - USB Komunikacija
35/66
USBKOMUNIKACIJASAPIC18F4550
35
Sl. 31 . Izbor foldera za smestanje programa i klik na komandno dugme NEXT
6.2. Kreiranje koda
U narednim redovima bice ilustrovan postupak kreiranja koda u mikroC-u (Slike 32-39).
Sl. 32 Izgled editora po startovanju programa mikroC
-
7/13/2019 ZCuric - USB Komunikacija
36/66
USBKOMUNIKACIJASAPIC18F4550
36
Sl. 33 Kreiranje novog projekta preko opcije Project New Project
Sl. 34 Podesavanje parametara novog projekta (naziv, tip mikrokontrolera, takt, parametrikontrolera)
-
7/13/2019 ZCuric - USB Komunikacija
37/66
USBKOMUNIKACIJASAPIC18F4550
37
Sl. 35 U editor treba uneti program (kod) mikrokontrolera
Sl. 36 U editor je unet za primer Soft_UART program
-
7/13/2019 ZCuric - USB Komunikacija
38/66
USBKOMUNIKACIJASAPIC18F4550
38
Sl. 37 Sada treba izvrsiti prevoenje (compile) programa preko opcije Project Build
Sl. 38 Izgled prozora posle kompilacije sa izvestajem (Messages)
-
7/13/2019 ZCuric - USB Komunikacija
39/66
USBKOMUNIKACIJASAPIC18F4550
39
Sl. 39 Kao produkti prevoenja (kompilacije/kompajliranja) generise se nekoliko fajlova:asemblerski kod (ASM), heksadecimalni kod (HEX), izvestaji itd
7.
PROGRAMIRANJE MIKROKONTROLERA
PIC18F4550
7.1. AllPic progranator
Da bi se heksadecimalni kod dobijen iz kompilatora/kompajlera (compiler) upisao umikrokontroler, neophodno je posedovati programator. Programator cine dve celine:bootstrap loader(hardver-ski deo) i softver (za programiranje firmware-a).Uloga bootstraploader-a je da transformise naponske nivoe porta (DB9, DB25 ili USB) na
nivoe standardne logike, dok je uloga softvera da upise heksadecimalni kod u programsku(najcesce: EPROM ili flash) memoriju mikrokontrolera. Za potrebe ovog rada koriscenisu bootstrap loader ALLPIC i softver IC-ProgElektricna sema bootstraploader-a, ciji je autor Danijel Dabic, prikazana je na slici 40, aizgled plocice i gotov ureaj na slikama 41 i 42, respektivno
-
7/13/2019 ZCuric - USB Komunikacija
40/66
USBKOMUNIKACIJASAPIC18F4550
40
Sl. 40 Elektricna sema ALLPIC bootstrap loader-a
Sl. 41 . Izgled stampane plocice ALLPIC-a
Sl. 42 Izgled ALLPIC-a
7.2.
Software Ic-Prog
Za programiranje mikrokontrolera PIC18F4550 moze da se koristi softver IC-Prog. Inace,ovaj softver je kompatibilan sa mnogim bootstrap loader-ima, kao sto su JDMProgrammer, TAFE Programmer, TAIT Programmer, Conquest Programmer, ProPIC 2Programmer itd. IC-Prog poseduje mogucnost citanja, upisa i verifikacije (Read, Write,Verify) sadrzaja mikrokontrolera. Narav-no, softver dozvoljava mogucnost podesavanja
parametara (WDT, PWRT, BODEN, LVP, CPD, CO, Debugger), kao i izbor oscilatora(RC, LP, XT, HS).Program IC-Prog se ne instalira na racunaru, vec se pokrece direktno tacnije, klikom nafajlICPROG.EXE(Sl. 43).
Sl. 43 Pokretanje softvera IC-Prog
Ako programer ima racunar sa verzijom Windows-a visom od Windows-a 98, odmah postar-tovanju progra-ma IC-Prog na ekranu ce se pojaviti prozor sa upozorenjem, koji je
-
7/13/2019 ZCuric - USB Komunikacija
41/66
USBKOMUNIKACIJASAPIC18F4550
41
prikazan na Sl. 44. Razlog je sto su kod svih Windows-a sa platformom NT zasticeniportovi. Zbog toga je neophodno da se instalira odgovarajuci drajver.
Sl. 44 Upozorenje prilikom pokretanja programa
Ulaskom u podmeni Misc, koji se nalazi u meniju Options, ostvaruje seinstaliranje/ukljucivanje drajvera icprog.sys (Settings Options Misc: Enable2000/NT/XP), sto je ilustrovano na Sl. 45. Na taj nacin omogucava se pristup serijskom
portu racunara. Isto tako, neophodno je da se prioritet programiranja postavi ili na High ilina Realtime, a nikako na Normal. Ovo potonje je veoma bitno. Naime, program postartovanju automatski podesi normalan prioritet i ukoliko se ne promeni na High iliRealtime, racunar ne moze da pristupi PIC mikrokontrolerima preko serijskog porta.
Sl. 45 Ukljucivanje drajvera i prioriteta
Nakon sto je instaliran/ukljucen drajver, program ce se restartovati i ponudice opcijupodesavanja hardverskih parametara, koji treba da budu postavljeni kao na Sl. 46. IC-Progima slicnu konfigura-ciju kao JDM Programmer, signali su bez inverzije dok se
-
7/13/2019 ZCuric - USB Komunikacija
42/66
USBKOMUNIKACIJASAPIC18F4550
42
komunikacija obavlja preko, na primer, serijskog porta COM2. Ako racunar ima samojedan serijski port, podrazumeva se da je to COM1.
Sl. 46 Podesavanje parametara programa
Najpre treba izabrati mikrokontroler PIC18F4550 (obelezeni padajuci meni u gornjemdesnom uglu osnovnog prozora programa), a potom ucitati heksadecimalni kod klikom naopciju Open File iz menija File - sto je ilustrovano na Slikama 47, 48 i 49. (Napomena :Heksadecimalni kod se dobija kompilacijom programa koji je napisan na nekom visem
programskom jeziku (C, Pascal, Basic itd.) ili na asembleru. Visi programski jezici zamikrokontrolere imaju izvesne specificnosti u odnosu na stan-dardne programske jezike,ali ovde te specificnosti nece biti razmatrane.)
-
7/13/2019 ZCuric - USB Komunikacija
43/66
USBKOMUNIKACIJASAPIC18F4550
43
Sl. 47 Upisivanje/ucitavanje koda u bafer programa
Sl. 48 Upisivanje/ucitavanje fajla projekat.hex koji sadrzi kod
Ulaskom u meni Command i startovanjem opcije Program All (Sl. 49). Zapravo, procespro-gramiranja podrazumeva da se sadrzaj bafera programa (Sl. 48) upise u flashmemoriju naseg mikro-kontrolera.
Naravno program ce postaviti pitanje, tj. mogucnost da se izabere da li da otpocne procesprogra-miranja ili da se od njega odustane (Sl. 50). Ukoliko se izabere programiranje,program ce obrisati prethodni sadrzaj flash memorije mikrokontrolera i u nju prepisatisadrzaj bafera programa, ciji se je-dan deo vidi na Sl. 49
Napredak proces programiranja, a potom i verifikacije programiranja je ilustrovan na Sl.51. Ukoliko je proces uspesno okoncan, na ekranu ce se pojaviti prozor kao na Sl. 52 usuprotnom, izgled prozora ce biti kao na Sl. 53
-
7/13/2019 ZCuric - USB Komunikacija
44/66
USBKOMUNIKACIJASAPIC18F4550
44
Sl. 49 Startovanje programiranja mikrokontrolera
Sl. 50 Mogucnost da se prekine proces programiranja
Sl. 51 Proces programiranja, a zatim i verifikacije
Sl. 52 Poruka nakon uspesnog programiranja
Sl. 53 Poruka nakon neuspesnog programiranja
-
7/13/2019 ZCuric - USB Komunikacija
45/66
USBKOMUNIKACIJASAPIC18F4550
45
8.
HARDVERSKA REALIZACIJA
Za hardversku realizaciju koriscen je programski paket Protel 99 Se. Sistem se sastoji od
mikrokontrolera PIC18F4550, kao centralnog elementa, koji ima ulogu da opsuzuje USB
komunikaciju i kontrrolise LED kao izlazni blok i PID prekidace kao ulazni blok. Sistem
koristi napajanje sa USB porta. Za ovakvo resenje smo odlucili iz razloga sto sistem nije
veliki potrosac, te moze da se napaja sa USB porta. Na slici 54.b) prikazana je elekticna sema
celokupnog sistema, dok je na slici 54.a) prikazana principijelna blok sema realizovanog
kola.
MCLR/VPP/RE3
RD7/SPP7/P1D
RD6/SPP6/P1C
RA0/AN0 RD5/SPP5/P1B
RA1/AN1 RD4/SPP4
RA2/AN2/VREF-/CVREF RD3/SPP3
RD2/SPP2
RD1/SPP1
RD0/SPP0
RC4/D-/VM RC5/D+/VP
Sl.54.a) Blok sema realizovanog kola
Ulazno kolo predstavljaju tri mikroprekidaca. Njihova uloga je da na pinove 1, 2 i 3 PORTA
dovedu logicku nulu ili jedinicu, sto je kasnije iskorisceno u grafickoj aplikaciji koja kontrolise
sistem.
PIC18F4550
Kolo zareset
Tester1
Taster
Taster3
Ulazno kolo
Leddiode
Izlaznokolo
USBkonektor
PORTD
PORTA
PORT C
-
7/13/2019 ZCuric - USB Komunikacija
46/66
USBKOMUNIKACIJASAPIC18F4550
46
Izlazno kolo cine osam LED dioda sa pratecim elementima za povezivanje. Povezane su na
PORTD. Kontroler prima informacije o stanju aplikacije za kontrolu sistema i na osnovu njih
ukljucuje pojedine diode.
Kolo za reset je mikro taster koji resetuje mikrokontroler dovodjenjem pina MCLR na logicku
nulu. Pritiskom na taster za reset MCLR pin mikrokontrolera kratkospajamo sa masom sistema , pa
se kontroler vraca u pocetno stanje. Prekida se USB konekcija, vrsi se incijalizacija promenjivih iponovo obnavlja USB konekcija.
USB konektor je tipa B. Povezan je na PORTC mikrokontrolera preko zastinih otpornika, sto
mozemo da vidimo na elektricnoj semi.
Sl. 54.b) Elektricna sema sistema
LED od D2 do D3 ovezane su na PORTD. Njihova uloga je da signaliziraju stanjeaplikacije koja kontrolise sistem. Tj. Pomocu aplikacije mozemo da kontrolisemo stanjedioda pojedinacno. Dioda D10 je signalizaciona dioda koja sluzi za indikaciju prisustvanapona napajanja sistema. Struje kroz diode su ogranicene otpornostima ok 1k. Kristal zataktovanje sistema ima vrednost 8 MHz. PID prekidaci sluze kao ulazni blok sistema.Aplikacija za kontrolu sistema stalno proverava stanje prekidaca i vizuelno prikazuje
-
7/13/2019 ZCuric - USB Komunikacija
47/66
USBKOMUNIKACIJASAPIC18F4550
47
nihovo stanje. Prikljuceni su na PORTA. Postoje tri prekidaca iz razloga sto je smatrano daje za labolatoriske potrbe to dovoljno. U sistemu je prisutan konektor za programirajeuredjaja oznacen sa ICSP. Ostali delovi su standarni pri projektovanju mikrokontrolerskihsistema (taster za reset T1, dioda za zastitu za vreme programiranja, kondezatori zafiltriranje napona) i necemo se zadrzavati na njima.
Na slici 55 prikazan je izgled stampane ploce sistema. Prilikom projektovanja stampane
ploce vodjeno je racuna o bezbednosti prilikom koriscenja sistema, o malim gabaritimaploce kao i o funkcionalnosti sistema, tj. da bude jednostavan za rukovanje.
Sl. 55 Izgled stampane ploce sistema
-
7/13/2019 ZCuric - USB Komunikacija
48/66
USBKOMUNIKACIJASAPIC18F4550
48
Sitem se na racunar povezuje standardnim USB kablom koji dolazi uz sistem na USBport racunara. Pre povezivana sistenma potrbno je iskopirati drajver mcHID.dll u folderc:\widows\sistem32. Drajver se nalazi na pratecem CD-u. Ovaj drajver omogucava HID
protokola na racunaru i neophodan je za rad sistema. Ako je ovo uspesno uradjeno uredjajje spreman za rad. Ako je uradjeno sve kako je gore napisano u Device Menager-upojavice se nova stavka, kao na slici 56.
Sl. 56 Potvrda da je drajver uspesno instaliran
-
7/13/2019 ZCuric - USB Komunikacija
49/66
USBKOMUNIKACIJASAPIC18F4550
49
9.
SOFTVER
9.1. Softver mikrokontrolera
Blok 1
Blok 2
Blok 3
Izgled algoritma softvera za mikrokontroler
MMain funkcijaInt_main ()Enable_hid
START
Inicijalizacija promenjivihDefinisanje portova
Definisanje smerova portova
While (1)
Cekamo prijem
Ako je prmljen 251
Upisi stanje na portu DUzni stanje porta A
Posalji stanje porta A aplikaciji
Kraj
Main funkcijaInt_main ()Enable_hid
-
7/13/2019 ZCuric - USB Komunikacija
50/66
USBKOMUNIKACIJASAPIC18F4550
50
Blok 1 algoritma programa mikrokontrolera vrsi inicijalizaciju promenjivih koje su koriscene u
programu (userRD_buffer[8] , userWR_b uff e r[8], p rvi , d rug i, broj). U ovom bloku jeodradjena funkcija void Init_M a in() koja podesava portove mikrokontrolera, vrsinjivu inicijalizaciju, iskljucuje sve interapte, iskljucuje priorite medjuinteraptima, konfigurise sve portove kao digitalne, vrsi konfigurisanje smeraregistra i stanje registra. Ovoj blok predstavlja celinu od pocetka programa
pa do pocetka Ma inrutine.Blok 2 je Ma inrutina. U njoj se odvija izvrsenje programa, dodeljuju se
pocetne vrednosti promenjivima i ukljucuje se HID.Petlja While(1) je beskonacna petlja koja ima zadatak da sve vreme
opsluzuje program kontrolera.Ukljucena je HID komunikacija, cekamo prijempodatka sa racunara. Ako je primljen podatak 251 znac i da se aplikacijaobratila sistemu sa ciljem da prikupi podatke sa PORTA i da posalje podatkena PORTD.
Blok 3 prihvata podatke koje je aplikacija poslala sistemu, ukljucujepojedine diode na PORTD u saglasnosti sa stanjem aplikacije i vrsi iscitavanjePORTA. Zatim vraca podatke aplikaciji o stanju PORTA.
Kao sto je vec napomenuto ranije softver za mikrokontroler je radjen u MikroC-u. Njegovlisting sa komentarina prikazan je:
unsigned char userRD_buffer[8]={0,0,0,0,0,0,0,0};unsigned char userWR_buffer[8]={0,0,0,0,0,0,0,0};unsigned char prvi, drugi, broj;//*************************************************************************// Interapt rutina
void interrupt()
{HID_InterruptProc();}//*************************************************************************//*************************************************************************// Rutina za inicijalizaciju//*************************************************************************void Init_Main(){//--------------------------------------// Iskljuci sve interapte
//--------------------------------------INTCON = 0; // Iskljuci GIE, PEIE, TMR0IE,INT0IE,RBIEINTCON2 = 0xF5;INTCON3 = 0xC0;RCON.IPEN = 0; // Iskljuci prioritete medju interaptimaPIE1 = 0;PIE2 = 0;PIR1 = 0;
-
7/13/2019 ZCuric - USB Komunikacija
51/66
USBKOMUNIKACIJASAPIC18F4550
51
PIR2 = 0;ADCON1 | = 0x0F; // Konfiguracija svih portova kao digitalni//--------------------------------------// Konfiguracija portova//--------------------------------------
TRISA = 0xEF;TRISB = 0x00;TRISC = 0xFF;TRISD = 0x00;TRISE = 0x07;LATA = 0;LATB = 0;LATC = 0;LATD = 0;LATE = 0;}//*************************************************************************// Main rutina//*************************************************************************void main(void){unsigned char i;broj=0;i=0;prvi=0;Init_Main();Hid_Enable(&userRD_buffer, &userWR_buffer);
Delay_ms(1000);
while(1){
while(HID_Read());if (userRD_buffer[0]==251){
PORTD=userRD_buffer[1];broj=0;if(PORTA.F0==1){
broj=broj+1;}
if(PORTA.F1==1){
broj=broj+2;}
if(PORTA.F2==1){
-
7/13/2019 ZCuric - USB Komunikacija
52/66
USBKOMUNIKACIJASAPIC18F4550
52
broj=broj+4;}
userWR_buffer[2]=broj;while(!HID_Write(&userWR_buffer,8));userRD_buffer[0]=0;}
}HID_Disable();}
Program USBDsc.c koji konfigurise kontroler za USB komunikaciju je:
/ /*************************************************************************/// / File Version 1.01/// /*************************************************************************#include "Definit.h"
#include "VARs.h"//*************************************************************************// The number of bytes in each report,// calculated from Report Size and Report Count in the report descriptor//*************************************************************************unsigned char const HID_INPUT_REPORT_BYTES = 8;unsigned char const HID_OUTPUT_REPORT_BYTES = 8;unsigned char const HID_FEATURE_REPORT_BYTES = 2;//*************************************************************************// Byte constants//*************************************************************************unsigned char const NUM_ENDPOINTS = 2;unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN +
USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS *USB_ENDP_DESCRIPTOR_LEN);unsigned char const HID_ReportDesc_len = 47;unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len;unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len >> 8;unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE;unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE >> 8;//****************************************************************************// Descriptor Tables//****************************************************************************unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN*2] = {// Device Descriptor
USB_DEVICE_DESCRIPTOR_LEN, 0, // bLength - Length of Device descriptor
(always 0x12)USB_DEVICE_DESCRIPTOR_TYPE, 0, / / bDescriptorType - 1 = DEVICE descriptor0x00, 0, / / bcdUSB - USB revision 2.00 (low byte)0x02, 0, / / (high byte)0x00, 0, / / bDeviceC lass - Zero means each interface operates
independently (class code in the interface descriptor)0x00, 0, // bDeviceSubC lass0x00, 0, // bDeviceProtocolEP0_PACKET_SIZE, 0, // bMaxPacketSize0 - maximum size of a da ta packet
for a control transfer over EP0
-
7/13/2019 ZCuric - USB Komunikacija
53/66
USBKOMUNIKACIJASAPIC18F4550
53
0x34, 0, / / idVendor - Vendor ID (low byte)0x12, 0, / / (high byte)0x01, 0, // idProduct - Product ID (low byte)0x00, 0, / / (high byte)0x01, 0, / / bcdDevice - ( low byte)0x00, 0, / / (high byte)0x01, 0, // iManufac turer - String1
0x02, 0, / / iProduct - String20x00, 0, / / iSerialNumber - ( None )0x01, 0, // bNumConfigurations - 1
// C onfiguration DescriptorUSB_CONFIG_DESCRIPTOR_LEN, 0, / / bLength - Length of Configuration
descriptor (a lways 0x09)USB_CONFIG_DESCRIPTOR_TYPE, 0, / / bDescriptorType - 2 = CONFIGURATION
descriptorConfigDescr_wTotalLength, 0, // wTotalLength - Total length of this config.
descriptor plus the interface and endpoint descriptors that are part of the configuration.0x00, 0, / / ( high byte)0x01, 0, / / bNumInterfaces - Number of interfac es
0x01, 0, // bC onfigurationValue - Configuration Value0x00, 0, / / iConfiguration - String Index for this configuration ( None )0xA0, 0, // bmAttributes - attributes - "Bus powered" and "Remote
wakeup"200, 0, // MaxPower - bus-powered draws 200*2 mA from the
bus.
// Interface DescriptorUSB_INTERF_DESCRIPTOR_LEN, 0, / / bLength - Length of Interface descriptor
(always 0x09)USB_INTERFACE_DESCRIPTOR_TYPE, 0, // bDescriptorType - 4 = INTERFAC E descriptor0x00, 0, // bInterfaceNumber - Number of interfac e, 0 based array0x00, 0, // bAlternateSetting - Alternate setting
NUM_ENDPOINTS, 0, // bNumEndPoints - Number of endpoints used in thisinterface0x03, 0, / / bInterfaceC lass - assigned by the USB0x00, 0, / / bInterfaceSubC lass - Not A boot device0x00, 0, / / bInterfaceProtocol - none0x00, 0, / / iInterface - Index to string descriptor that describes this
interface ( None )
// HID DescriptorUSB_HID_DESCRIPTOR_LEN, 0, // bLength - Length of HID descriptor (always
0x09)USB_HID_DESCRIPTOR_TYPE, 0, // bDescriptorType - 0x21 = HID descriptor0x01, 0, / / HID class release number (1.01)0x01, 0,0x00, 0, / / Localized country code (none)0x01, 0, / / # of HID class descriptor to follow (1)0x22, 0, / / Report descriptor type (HID)Low_HID_ReportDesc_len, 0,High_HID_ReportDesc_len, 0,
// EP1_RX DescriptorUSB_ENDP_DESCRIPTOR_LEN, 0, // bLength - length of descriptor (always
0x07)USB_ENDPOINT_DESCRIPTOR_TYPE, 0, / / bDescriptorType - 5 = ENDPOINT descriptor
-
7/13/2019 ZCuric - USB Komunikacija
54/66
USBKOMUNIKACIJASAPIC18F4550
54
0x81, 0, / / bEndpointAddress - In, EP1USB_ENDPOINT_TYPE_INTERRUPT, 0, / / bmAttributes - Endpoint Type - InterruptLow_HID_PAC KET_SIZE, 0, / / wMaxPacketSize - max packet size - low order
byteHigh_HID_PACKET_SIZE, 0, // - max packet size - high order byte1, 0, // bInterval - polling interval (1 ms)
// EP1_TX Descriptor
USB_ENDP_DESCRIPTOR_LEN, 0, // bLength - length of descriptor (always0x07)
USB_ENDPOINT_DESCRIPTOR_TYPE, 0, / / bDescriptorType - 5 = ENDPOINT descriptor0x01, 0, / / bEndpointAddress - Out, EP1USB_ENDPOINT_TYPE_INTERRUPT, 0, / / bmAttributes - Endpoint Type - InterruptLow_HID_PAC KET_SIZE, 0, / / wMaxPacketSize - max packet size - low order
byteHigh_HID_PACKET_SIZE, 0, // - max packet size - high order byte1, 0, // bInterval - polling interval (1 ms)
// HID_Report Descriptor0x06, 0, / / USAGE_PAG E (Vendor Defined)0xA0, 0,
0xFF, 0,0x09, 0, // USAG E ID (Vendor Usage 1)0x01, 0,0xA1, 0, // COLLECTION (Application)0x01, 0,
// The Input report0x09, 0, // USAG E ID - Vendor defined0x03, 0,0x15, 0, / / LOGICAL_MINIMUM (0)0x00, 0,0x26, 0, // LOGICAL_MAXIMUM (255)0x00, 0,0xFF, 0,
0x75, 0, / / REPORT_SIZE (8)0x08, 0,0x95, 0, / / REPORT_C OUNT (2)HID_INPUT_REPORT_BYTES, 0,0x81, 0, // INPUT (Data,Var,Abs)0x02, 0,
// The Output report0x09, 0, // USAG E ID - Vendor defined0x04, 0,0x15, 0, / / LOGICAL_MINIMUM (0)0x00, 0,0x26, 0, // LOGICAL_MAXIMUM (255)0x00, 0,0xFF, 0,0x75, 0, / / REPORT_SIZE (8)0x08, 0,0x95, 0, / / REPORT_C OUNT (2)HID_OUTPUT_REPORT_BYTES, 0,0x91, 0, / / OUTPUT (Data,Var,Abs)0x02, 0,
// The Feature report0x09, 0, // USAG E ID - Vendor defined0x05, 0,
-
7/13/2019 ZCuric - USB Komunikacija
55/66
USBKOMUNIKACIJASAPIC18F4550
55
0x15, 0, / / LOGICAL_MINIMUM (0)0x00, 0,0x26, 0, // LOGICAL_MAXIMUM (255)0x00, 0,0xFF, 0,0x75, 0, / / REPORT_SIZE (8)0x08, 0,
0x95, 0, / / REPORT_C OUNT (2)HID_FEATURE_REPORT_BYTES, 0,0xB1, 0, // FEATURE (Data,Var,Abs)0x02, 0,
// End Collection0xC0, 0 // END_COLLECTION
};//****************************************************************************unsigned char const LangIDDescr[8] = { 0x04, 0,
USB_STRING_DESCRIPTOR_TYPE, 0,0x09, 0, / / LangID (0x0409) - Low0x04, 0 // - High
};//****************************************************************************unsigned char const Manufac turerDescr[16] = { 8, 0,
USB_STRING_DESCRIPTOR_TYPE, 0,'u', 0, 0, 0,'s', 0, 0, 0,'b', 0, 0, 0
};//****************************************************************************unsigned c har const ProductDescr[16] = { 8, 0,
USB_STRING_DESCRIPTOR_TYPE, 0,
'u', 0, 0, 0,'s', 0, 0, 0,'b', 0, 0, 0
};//****************************************************************************unsigned char const StrUnknownDescr[4] = { 2, 0,
USB_STRING_DESCRIPTOR_TYPE, 0};//****************************************************************************//****************************************************************************// Initialization Function//****************************************************************************void InitUSBdsc(){Byte_tmp_0[0] = NUM_ENDPOINTS;Byte_tmp_0[0] = ConfigDescr_wTotalLength;Byte_tmp_0[0] = HID_ReportDesc_len;Byte_tmp_0[0] = Low_HID_ReportDesc_len;Byte_tmp_0[0] = High_HID_ReportDesc_len;Byte_tmp_0[0] = Low_HID_PACKET_SIZE;Byte_tmp_0[0] = High_HID_PACKET_SIZE;
-
7/13/2019 ZCuric - USB Komunikacija
56/66
USBKOMUNIKACIJASAPIC18F4550
56
DescTables;
LangIDDescr;ManufacturerDescr;ProductDescr;StrUnknownDescr;
}//***************************************************************************
9.2. Sofrver u Visual Basic-u
Aplikacija na racunaru radjena je u Visual Basic-u. Njena uloga je da kontrolise sistem prekoUSB magistrale. Na aplikaciji mozemo da ocitamo stanja ulaznish tastera. Takodje mogu da
pomocu aplikacije kontrolisu LED svaka pojedinacno. Izglaed alikacije prikazan je naslikama 57 i 58.
Sl. 57 Pocetni izgled aplikacije na racunaru
-
7/13/2019 ZCuric - USB Komunikacija
57/66
USBKOMUNIKACIJASAPIC18F4550
57
Sl. 58 Aplikacija u stanju kada su ukljucene diode D1 i D4, i kada je ukljucen taster T3
Rad sa aplikacijom je jednostavan. Potrebno je kliknuti na objekte koji oznacavaju pojedinediode, a zatim kliknuti na dugme Start. Aplikacija ce ukljuciti diode koje su oznacene, aiskljucice istovremeno diode koje nisu oznacene. Istovremeno ce ocitati stanje na
prekidacima. Aplikacija sa stanjem na slici 58 ukljucice diode D1 i D4, i ocitace stanjeprekidaca na ulazu.
Blok 1
Blok 2
Blok 3
Blok4
Start
Inicijalizacijabuffer-a i
promenjivih
Rutina zakomandu Start
Rutina zakomandu End
Rutina za citanje
-
7/13/2019 ZCuric - USB Komunikacija
58/66
USBKOMUNIKACIJASAPIC18F4550
58
Izgled algoritma koda za aplikaciju
Blok 1 algoritama graficke aplikacije vrsi incijalizaciju ulaznog i izlaznog bafera za USB
komunikaciju, inicijalizaciju koriscene promenjive. Obradjuje se dogadjaj za promenu, ukljucenje iisklucenje HID uredjaja. Vrsimo obradu podataka u smislu odredjivanja prikljucenog uredjaja iispisivanja VendorIDi ProductIDna aplikaciji.
Blok 2 je rutina koja de pokrece na dogadjaj koji se desava klikom na konadu Start. Ovde dajemopromennjivoj Adresa vrednost 251, sto kasnije koristimo u programu mikrokontrolera. Zatimpozivamo rutinu za upis podataka na USB liniji.
Blok 3 je rutina koja se pokrece na dogadjaj koji se desava klikom na konadu End. U ovom blokuvrsimo iskljucivanje Hid uredjaja i zatvaramo formu.
Blok 4 je rtina koja vrsi citanje potaka sa USB magistrale. U ovom bloku aplikacija obraduje tepodatke, uzima one koje se odnose na PORTA, jer on definise stanje prekidaca. Zatim dekodiramo
informaciju o stanju prekidaca i prikazujemo graficki na aplikaciji u vidu promene boja objekta kojisimulira prekidac.
Kod u Visual Basic-u prikazan je u nastavku:
Option Explicit'' Konstante za vendor i productPrivate Const VendorID = &H1234
Private Const ProductID = &H1'' Definisanje Bafera'Private Const BufferInSize = 8Private Const BufferOutSize = 8Dim BufferIn(0 To BufferInSize) As ByteDim BufferOut(0 To BufferOutSize) As Byte' Ostale promenljivePublic Adresa As BytePublic Broj, Broj1, i As Integer
Private Sub Command1_Click()Adresa = 251WriteSomeDataEnd Sub
Private Sub Command2_Click()DisconnectFromHIDEnd
Kra
-
7/13/2019 ZCuric - USB Komunikacija
59/66
USBKOMUNIKACIJASAPIC18F4550
59
End Sub
'Podprogram koji se pokrece ucitavanjem formePrivate Sub Form_Load()
Connec tToHID (Me.hwnd) 'HID konekcijalVendorName.Caption = ""lProductName.Caption = ""
Command1.Enabled = False 'Onemoguci komanduEnd Sub'Podprogram koji se pokrece zatvaranjem formePrivate Sub Form_Unload(Cancel As Integer)
DisconnectFromHIDEnd Sub'Podprogram koji se pokrece prikljucenje HID jedinicePublic Sub OnPlugged(ByVal pHandle As Long)
Dim DeviceHandle As LongDim VendorName As String * 15Dim ProductName As String * 25
If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) =ProductID Then ' Good one?
'' preuzmi device handleDeviceHandle = hidGetHandle(VendorID, ProductID)'
' Preuzmi trgovca i proizvod iz DevicehandlehidGetVendorName DeviceHandle, VendorName, 255hidGetProductName DeviceHandle, ProductName, 255' Prikazi trgovca i proizvodlVendorName.Caption = VendorNamelProductName.Caption = ProductNameEnd If
If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) =ProductID Then
Text1.Text = "Prikljuceno USB kolo"
Command1.Enabled = TrueEnd If
End Sub
'Podprogram koji se pokrece iskljucenjem HID jedinicePublic Sub OnUnplugged(ByVal pHandle As Long)
If hidGetVendorID(pHandle) = VendorID And hidGetProductID(pHandle) =ProductID Then
-
7/13/2019 ZCuric - USB Komunikacija
60/66
USBKOMUNIKACIJASAPIC18F4550
60
Text1.Text = "Iskljuceno USB kolo"Command1.Enabled = False
End IfEnd Sub'Podprogram koji se pokrece nakon promene kontroleraPublic Sub OnChanged()
Dim DeviceHandle As LongDeviceHandle = hidGetHandle(VendorID, ProductID)hidSetReadNotify DeviceHandle, True
End Sub'Podprogram koji se pokrece za c itanjePublic Sub OnRead(ByVal pHandle As Long)
' Provera da je prvi clan nula...If hidRead(pHandle, BufferIn(0)) Then
'Ako jeste primljeni su podaci od USB-a'Prvi bajt je report ID, t.j. BufferIn(0)'Ostali bajti su bajtovi podataka
Broj1 = BufferIn(3)'prikazi rezultat
For i = 0 To 2If Broj1 And 2 i ThenShape2(i).BackColor = RGB(255, 255, 255)ElseShape2(i).BackColor = RGB(0, 0, 255)
End IfNext i
End IfEnd Sub
'Podprogram za upis podataka u USB koloPublic Sub WriteSomeData()
BufferOut(0) = 0 'Prvi bajt je report IDBufferOut(1) = Adresa 'Drugi bajt je zahtev USB koluBufferOut(2) = Broj 'Trec i bajt je vrednost led dioda
BufferOut(3) = 0 '0BufferOut(4) = 0 '0BufferOut(5) = 0 '0BufferOut(6) = 0 '0BufferOut(7) = 0 '0BufferOut(8) = 0 '0
hidWriteEx VendorID, ProductID, BufferOut(0) 'upisi podatke u USB
-
7/13/2019 ZCuric - USB Komunikacija
61/66
USBKOMUNIKACIJASAPIC18F4550
61
End Sub'Podprogram za odredjivanje stanja led didodaSub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y AsSingle)Dim i, j As Integer
i = 9
If (X >= 360) And (X < 975) And (Y > 1200) And (Y < 1575) Then i = 7
If (X >= 960) And (X < 1575) And (Y > 1200) And (Y < 1575) Then i = 6
If (X >= 1680) And (X < 2295) And (Y > 1200) And (Y < 1575) Then i = 5
If (X >= 2280) And (X < 2895) And (Y > 1200) And (Y < 1575) Then i = 4
If (X >= 2880) And (X < 3495) And (Y > 1200) And (Y < 1575) Then i = 3
If (X >= 3480) And (X < 4095) And (Y > 1200) And (Y < 1575) Then i = 2
If (X >= 4080) And (X < 4695) And (Y > 1200) And (Y < 1575) Then i = 1
If (X >= 4680) And (X < 5295) And (Y > 1200) And (Y < 1575) Then i = 0
If i 9 Then
If (Shape1(i).BackColor = RGB(255, 255, 255)) ThenShape1(i).BackColor = RGB(255, 0, 0)
Else: Shape1(i).BackColor = RGB(255, 255, 255)End If
End If
Broj = 0
For i = 0 To 7
j = 0If (Shape1(i).BackColor = RGB(255, 0, 0)) Then j = 1
Broj = Broj + 2 i * jNext i
End Sub
Modul koji koristi Visual Basic za USB komunikaciju je:
'
-
7/13/2019 ZCuric - USB Komunikacija
62/66
USBKOMUNIKACIJASAPIC18F4550
62
' WinProc () calls your main form 'event' procedures - these are currently' set to..'' MainForm.OnPlugged(ByVal pHandle as long)' MainForm.OnUnplugged(ByVal pHandle as long)' MainForm.OnChanged()' MainForm.OnRead(ByVal pHandle as long)
Option Explicit
' HID interface API declarations...Dec lare Function hidConnect Lib "mcHID.dll" Alias "Connect" (ByVal pHostWinAs Long) As BooleanDeclare Function hidDisconnect Lib "mcHID.dll" Alias "Disconnect" () AsBooleanDeclare Function hidGetItem Lib "mcHID.dll" Alias "GetItem" (ByVal pIndex AsLong) As LongDeclare Function hidGetItemCount Lib "mcHID.dll" Alias "GetItemCount" () AsLongDeclare Function hidRead Lib "mcHID.dll" Alias "Read" (ByVal pHandle AsLong, ByRef pData As Byte) As BooleanDec lare Function hidWrite Lib "mcHID.dll" Alias "Write" (ByVal pHandle AsLong, ByRef pData As Byte) As BooleanDec lare Function hidReadEx Lib "mcHID.dll" Alias "ReadEx" (ByVal pVendorIDAs Long, ByVal pProductID As Long, ByRef pData As Byte) As BooleanDec lare Function hidWriteEx Lib "mcHID.dll" Alias "WriteEx" (ByVal pVendorIDAs Long, ByVal pProductID As Long, ByRef pData As Byte) As BooleanDeclare Function hidGetHandle Lib "mcHID.dll" Alias "GetHandle" (ByVal
pVendoID As Long, ByVal pProductID As Long) As LongDeclare Function hidGetVendorID Lib "mcHID.dll" Alias "GetVendorID" (ByValpHandle As Long) As LongDeclare Function hidGetProduc tID Lib "mcHID.dll" Alias "GetProductID" (ByValpHandle As Long) As LongDec lare Function hidGetVersion Lib "mcHID.dll" Alias "GetVersion" (ByValpHandle As Long) As LongDeclare Function hidGetVendorName Lib "mcHID.dll" Alias "GetVendorName"(ByVal pHandle As Long, ByVal pText As String, ByVal pLen As Long) As LongDeclare Function hidGetProductName Lib "mcHID.dll" Alias"GetProduc tName" (ByVal pHandle As Long, ByVal pText As String, ByVal pLen
As Long) As LongDec lare Function hidGetSerialNumber Lib "mcHID.dll" Alias "GetSerialNumber"(ByVal pHandle As Long, ByVal pText As String, ByVal pLen As Long) As LongDeclare Function hidGetInputReportLength Lib "mcHID.dll" Alias"GetInputReportLength" (ByVal pHandle As Long) As LongDeclare Function hidGetOutputReportLength Lib "mcHID.dll" Alias"GetOutputReportLength" (ByVal pHandle As Long) As Long
-
7/13/2019 ZCuric - USB Komunikacija
63/66
USBKOMUNIKACIJASAPIC18F4550
63
Dec lare Sub hidSetReadNotify Lib "mcHID.dll" Alias "SetReadNotify" (ByValpHandle As Long, ByVal pValue As Boolean)Declare Function hidIsReadNotifyEnabled Lib "mcHID.dll" Alias"IsReadNotifyEnabled" (ByVal pHandle As Long) As BooleanDeclare Function hidIsAvailable Lib "mcHID.dll" Alias "IsAvailable" (ByValpVendorID As Long, ByVal pProductID As Long) As Boolean
' windows API declarations - used to set up messaging...Private Declare Function CallWindowProc Lib "user32" Alias"CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long,ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Dec lare Function SetWindowLong Lib "user32" Alias "SetWindowLongA"(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) AsLong
' windows API ConstantsPrivate Const WM_APP = 32768Private Const GWL_WNDPROC = -4
' HID message constantsPrivate Const WM_HID_EVENT = WM_APP + 200Private C onst N