USB
Ülesehitus
USB kasutab täht-topoloogiat kus võrgu tipus asub ainult üks host. Host-i külge ühenduvad alamseadmed (inglise keeles device). Seadmed on kas hub-id mille külge võivad omakorda alamseaded ühenduda või funktsioonid (inglise keeles functions) mis täidavad mingit rolli. Rolle võib ka mitu olla – näiteks võib üks füüsiline seade olla korraga nii klaviatuur kui hiir. Vabas kõnepruugis nimetatakse ühe funktsiooniga seadmeid siiski lihtsalt USB seadmeteks ja hub-e hub-ideks, kuigi standardi järgi on needki seadmed. Ka käesolevas töös on kasutatud lihtsamat nimetamist.
Kokku võib ühes USB võrgus olla kuni 127 seadet ja hub-i. Hub-e võib olla järjestikku kuni 5, ehk kokku võib võrk moodustada koos host-iga kuni 7 tasandit (inglise keeles tier). Kogu andmevahetus toimub USB võrgus ainult host-i initsiatiivil. Seadmed ise midagi saata ei tohi.
Elektrilised ühendused
USB standard määrab ära elektrilised ühendused. Kuni USB 2.0 standardini on elektrilisi ühendusi neli – need on maa, toide ja keerupaar-andmeliin. Lisaks on kaablil varjestus. Igal liinil on oma värv ja pistikutes/pesades on need alati loetletud kindlas järjekorras.
| Nr. | Liin | Värv |
|---|---|---|
| 1. | Vbus | Punane |
| 2. | D+ | Valge |
| 3. | D- | Roheline |
| 4. | GND | Must |
USB toitepinge on 5 V, kuid see võib sõltuvalt seadme voolutarbest kõikuda. Kõik USB seadmed võivad vaikimisi maksimaalselt 100 mA voolu tarbida, kuid sõltuvalt seadme tüübist võib see peale seadistamist (kokkulepet host-iga) ka rohkem tarbida. Toite jagamise ja tarbimise alusel eristatakse kokku kuut liiki seadet:
- Host – jagab iga ühenduse kaudu kuni 500 mA.
- Siinitoitega hub – võib tarbida kuni 500 mA, peab jagama 100 mA pordi kohta.
- Iseseisva toitega hub – võib tarbida kuni 100 mA, peab jagama kuni 500 mA pordi kohta.
- Madala voolutarbega seade – võib tarbida kuni 100 mA
- Suure voolutarbega seade – võib tarbida kuni 500 mA.
- Iseseisva toitega seade – võib siinilt tarbida kuni 100 mA, väljastpoolt rohkem.
Host-i ja iseseisva toitega hub-i portide väljundpinge peab olema 4,75 V kuni 5,25 V piires. Siinitoitega hub-i väljundpinge on lubatud 4,4 V kuni 5,25 V piires.
Andmeliinil edastakse andmeid difernetsiaalsignaalidega kolmes erinevas kiiruserežiimis:
- Suur kiirus (High Speed) – 480 Mbit/s
- Täiskiirus (Full Speed) – 12 Mbit/s
- Madal kiirus (Low Speed) – 1,5 Mbit/s
Täiskiiruse režiim pärineb USB 1.0 standardist ja madal kiirus USB 1.1 standardist mis loodi odavama riistvara kasutamise võimaldamiseks. Näiteks pole sel puhul vaja takti genereerimiseks kvartsostsillaatoreid vaid piisab ka ±1,5 % täpsusega resonaatorist. Kaabli karakteristlik impedants (Z0) peab olema 90 Ω ± 15 %. Suure kiiruse režiim tuli USB 2.0 standardiga ja see määrab ära ka andmeliinide 45 Ω koormuse maa suhtes, et vähendada signaalide peegeldumist.
Selleks, et host teaks mis kiiruserežiimis suhelda tuleb seadmel kas D+ või D- andmeliin pull-up takistiga 3,3 V peale tõsta. D+ tõstmine tähistab täiskiirusega seadet, D- madal kiirusega seadet. Suure kiiruse seade peab käivituma täiskiirusega seadmena ja suurele kiirusele üle minema pärast madala taseme suhtlust hub-i või host-iga. Seda tehakse spetsiaalse „chirp“ signaaliga.
USB kaabli pikkust on ette nähtud kuni 5,0 m. Suuremad pikkused võivad töötada aga mitte garanteeritult.
Pistikud
USB 1.0 standardiga tulid ka pistikud ja pesad. Host-i ja device-i pistikud/pesad on erineva kujuga, sellest tulenevalt nimetatakse pistikuid ka A- ja B- tüüpi. A-tüüpi pistikud ja pesad on host-i poolel, B-tüüpi device-i poolel. USB 2.0 OTG standardiga, mis lubas läbirääkimiste teel host-i ja device-i paika panemist, tulid aga AB-tüüpi pistikud ja pesad. Kui algselt oli olemas vaid standardsed A ja B-tüüpi pistiku ja pesad siis mobiilsete seadmete arenguga läks vaja väiksemaid ühendusi ning tulid ka mini ja micro pistikud/pesad.
Pistikute ja pesade standardiseeritus ja levik oli ka käesolevas töös üks suuri argumente USB poolt. Peale selle, et pistikute/pesade kuju on ära määratud, leidub neid pistikuid ka veekindla ja fikseeritava kraega, mis on igati vajalikud välistingimustes liikuva platvormi peal kasutamiseks.
Andmeside
USB andmeliinil 4 elektrilist olekut – Diferentsiaalne „0“ ja „1“ ning singulaarne (inglise keeles single-ended) „0“ ja „1“.
| Liini olek | Madal- ja täiskiirus | Suur kiirus |
|---|---|---|
| Diferentsiaalne „1“ | D+ > 2,8 V ja D- < 0,3 V | D+ > 400 mV ja D- < 10 mV |
| Diferentsiaalne „0“ | D+ < 0,3 ja D- > 2,8 V | D+ < 10 mV ja D- > 400 mV |
| Singulaarne „0“ (SE0) | D+ < 0,3 V ja D- < 0,3 V | D+ < 10 mV ja D- < 10 mV |
| Singulaarne „1“ (SE1) | D+ > 2,8 V ja D- > 2,8 V | D+ > 400 mV ja D- > 400 mV |
Andmeolekud on aga „J“ ja „K“ mitte 0 ja 1. Põhjus selles, et madala- ja täiskiiruse režiimis on elektrilised olekud vastupidised. Seepärast on kasutusel abinimetused mis ei tekitada protokolli kirjeldamisel mitme kiiruse tõttu segadust.
| Andmeolek | Madal kiirus | Täis- ja suur kiirus |
|---|---|---|
| „J“ | Diferentsiaalne „0“ | Diferentsiaalne „1“ |
| „K“ | Diferentsiaalne „1“ | Diferentsiaalne „0“ |
Andmete edastamine baseerub modifitseeritud NRZI (inglise keeles non-return-to-zero, inverted) kodeeringul. Selles kodeeringus on signaalil 2 olekut ja null-olek puudub. NRZI pole küll sünkroniseeriv kodeering nagu RZ (inglise keeles return-to-zero) või Manchesteri kodeering kuid signaali energia ja ribalaius on suuremad. Sünkroniseerimine tehakse USB-s ära aga spetsiaalse sünkroniseeriva paketi algusega. Standardses NRZI-s edastatakse binaarväärtust „1“ signaali muutusega ja „0“ signaali mitte muutes. USB puhul toimub see vastupidi. Ehk kokkuvõttes edastatakse binaarväärtust „0“ andmeolekuid „J“ ja „K“ vahetades ning binaarväärtust „1“ elektrilist olekut samaks jättes. Näiteks kõige esimest binaarväärtust „0001“ edastatakse „KJKK“ andmeolekutega sest algne olek on „J“ - seda pull-up takisti tõttu nii madalal kui suurel kiirusel.
Singulaarseid olekuid kasutatakse andmepaketi alguse ja lõpu tuvastamiseks. Näiteks paketi lõpetab kahe biti aja jooksul olev SE0 ja järgnev ühe biti ajane „J“ olek.
Addresseerimine
USB seadmetel pole jäiku unikaalseid füüsilisi aadresse – selleks pole ka vajadust kuna USB siiniarhitektuur on hierarhiline ja igas host-i ja hub-i pordis saab olla vaid üks seade. Seadmetel on aga mälupõhine aadress mis võrku ühendudes on 0 ja mille määrab host täpsemalt pärast seadmega suhtlemist. Seda kasutatakse edaspidises suhtluses andmete õigesse kohta suunamisel läbi hub-ide. USB seadmel on peale seadme aadressi ka mitu endpoint aadressi. Endpoint on justkui virtuaalne postkast seadmes kust andmeid lugeda või kuhu neid kirjutada. Igal seadmel peab olema üks endpoint 0 mille kaudu toimub seadme seadistamine. Teised endpoint-id on seadistatavad. Nende arv sõltub kiiruse režiimist.
Paketi väljad
USB siinil edastatakse andmeid pakettidena. Pakett on jagatud väljadeks kus bitijärjestus on LSB (inglise keeles least-significant bit) esimesena, ehk madalamast järgust kõrgema järguni. Pakettides on kasutusel 6 välja (inglise keeles field):
- SYNC
Tegu on sünkroniseeriva paketi algusega. Madala- ja täiskiiruse puhul on see väli 8-bitine, suure kiiruse puhul 32-bitine. Väli sisaldab nulle mis lõpevad ühega, ehk vastavalt NZRI kodeeringule toimub „0“ väärtuse korral „J“ ja „K“ olekute muutumine millega sünkroniseerimine toimubki. Viimane „1“ bitt tähistab sünkroniseerimise lõppu ja paketi päise algust.
- PID
Iga paketi juurde kuuluv 8-bitine paketi identifitseerimise väli. 4 esimest bitti näitavad identifikaatori väärtust ja 4 järgmist on nende inversioon. Seade peab liiasuse abil kontrollima PID välja korrektsust. Vea korral seade vastama ei pea.
| Grupp | Identifikaator | PID | Kirjeldus |
|---|---|---|---|
| Token | OUT | 0001 | |
| IN | 1001 | ||
| SOF | 0101 | ||
| SETUP | 1101 | ||
| Data | DATA0 | 0011 | |
| DATA1 | 1011 | ||
| DATA2 | 0111 | ||
| MDATA | 1111 | ||
| Handshake | ACK | 0010 | |
| NAK | 1010 | ||
| STALL | 1110 | ||
| NYET | 0110 | ||
| Spetsiaalne | PRE | 1100 | |
| ERR | 1100 | ||
| SPLIT | 1000 | ||
| PING | 0100 | ||
| Reserveeritud | 0000 | Reserveeritud |
- ADDR
7-bitine seadme aadressiväli. Sellest tulenevalt saab seadmel olla 128 erinevat aadressi. Vaikimisi peab seade reageerima aadressile 0 mis loendamise (inglise keeles enumeration) käigus host-i poolt muudetakse.
- ENDP
Endpoint väli on 4-bitine, millega saab täis- ja suure kiiruse seadmetes addresseerida 16 erinevat endpoint-i, kuid madala kiiruse seadmetel on see piiratud kolmega (koos endpoint nulliga).
- CRC
Tsükkelkoodkontroll paketi korrektsuse kontrolliks. Token pakettidel on kasutusel 5-bitine ja andmepakettidel 16-bitine CRC. Kontrollitakse kõiki väljasid mis tulevad peale PID-i.
Token paketi CRC generaatori polünoom: G(X) = X5 + X2 + 1
Andmepaketi CRC generaatori polünoom: G(X) = X16 + X15 + X2 + 1
- EOP
Tegu pole küll päris väljaga kuid see on kohustuslik paketi lõpu tähistamise signaal. Edastatakse SE0 SE0 „J“.
Paketid
Pakettide saatmine toimub USB siinil tehinguna (inglise keeles transaction). Üks tehing võib koosneda mitmest järjestikusest paketist. Esimene pakett ütleb mis toimuma hakkab, teine võib olla andmepakett ja kolmas kinnitus- või olek.
Token pakett
Võib olla kas IN, OUT või SETUP tüüpi pakett mis tähendavad vastavalt, et host soovib lugeda, kirjutada või seadistada seadet. Suure kiiruse režiimis võib host edastada ka PING tüüpi paketi. Pakett koosneb järgnevatest väljadest:
| PID | ADDR | ENDP | CRC5 |
SOF
See on kaadri alguse pakett millega host saadab perioodiliselt suurenevat kaadri numbrit. Seda paketti võivad seadmed kasutada ajastamiseks. Täis-kiiruse režiimis saadetakse SOF paketti iga 1 ms ±0.0005 ms ja suure kiiruse režiimis iga 125 μs ±0.0625 μs järel.. Paketi formaat:
| PID | 11-bitine kaadri number | CRC5 |
Andmepakett
Andmepaketiga edastatakse infot baitide kaupa. Maksimaalne baitide arv sõltub kiirusest:
- Madal kiirus – kuni 8 B
- Täiskiirus – kuni 1023 B
- Suur kiirus – kuni 1024 B
Paketil võib olla neli tüüpi: DATA0, DATA1, DATA2 ja MDATA. DATA0 ja DATA1 kasutatakse vaheldumisi pakettide järjestamiseks, teisi kasutatakse olenevalt andmeedastuse tüübist (neist edaspidi). Paketi formaat:
| PID | DATA (0-1024) | CRC16 |
Handshake
Olekupakett mis järgneb käskudele või andmetele. Sellega antakse teada andmete või käsu päralejõudmisest, keeldumisest, vookontrollist või veast. 5 võimalikku tüüpi:
- ACK – Andmete päralejõudmise kinnitus
- NAK – Andmete mitte kohalejõudmine või andmete olemasolu eitus
- STALL – Andmete edastamise võimetus
- NYET – Erinevate kiiruste ristkasutusest tekitatud viide hub-is.
- ERR – Teade hub-ilt veast madalama kiiruse pordis.
Paketi formaat:
| PID |

