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.

USB võrgu arhitektuur

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 pistikutüübid

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