zcuric - usb komunikacija

Upload: nikolicnemanja

Post on 10-Oct-2015

40 views

Category:

Documents


1 download

DESCRIPTION

U radu je opisan nacucin rada USBa i njegovih komunikacionih protokola.

TRANSCRIPT

  • 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