USB On-The-Go

**Universal Serial Bus On-The-Go** (**USB OTG**) on USB spetsifikatsiooni laiend, mida esimest korda kasutati 2001 aastal ning see lubab USB seadmetel olla vajaduse korral nii ühenduse **peremees** (**host**) kui ka **klient/alam**.  

## Tekkelugu
Universal Serial Bus ehk USB oli esialgselt loodud, et kasutajad saaksid kiiresti ja mugavalt oma personaalarvutitega ühendada teisi seadmeid. Enamasti olid personaalarvutid ehk ühenduse peremehed palju suurema võimekusega kui alamseaded ning USB standardi kohaselt on peremeesseadmed need, kes kontrollivad täielikult loodud ühendust ning saavad ära kasutada ühendatud alamseadmete pakutavaid võimalusi. Esialgselt vaadeldi mobiiltelefone kui alamseadmeid, mida sai peremeesseadme külge ühendada. Murekoht tekkis aga siis, kui mobiiltelefonid ning mõned teised seadmed muutusid võimekamateks. Tekkis olukord, kus ka nemad võiksid ise mõningaid alamseadmeid enda kasuks tööle panna. Seega tuli välja mõelda lahendus, kus üks seade peaks suutma olla vastavas ühenduses nii peremeesseade kui ka alamseade. **[[USB Implementers Forum]]** lõi uue spetsifikatsiooni (**On-The-Go Supplement to the USB 2.0 Specification**), kus defineeritakse erinevad tarkvara ning riistvara komponendid, et mobiiltelefone ning teise sääraseid seadmeid saaks teha sellise kahe rollilise võimekusega. Tulemuseks saavutati tehnoloogia, kus näiteks mobiiltelefoni on võimalik ühendada läbi sama pesa nii peremehe kui ka alamseadme rollis, kuid mitte mõlemas korraga.

## Ülevaade
USB On-The-Go spetsifikatsioon defineerib uut tüüpi USB seadme, mis suudab funktsioneerida nii ühenduse peremehena kui ka ühenduse alamana/kliendina. Samuti defineeritakse protokollis ka uued kaablid, pistikud ning mõned protokollid.
USB OTG muutis USB maailmas väga palju, esimest korda said USB seadmed suhelda omavahel ilma, et arvuti USB ühendust üleval peaks. Omavahel suhelda saavad sedaviisi ainult seadmed, mis vastavad USB On-The-Go spetsifikatsioonile. See näiteks võimaldab nutitelefoniga ühendada teisi USB seadmeid (mälupulk, klaviatuur, hiir jne). Selleks, et USB seade oleks USB OTG seade, peab ta olema suuteline funktsioneerima kui ühenduse peremees, varem said seda rolli kanda vaid personaalarvuti tüüpi seadmed.    

### OTG seade
OTG seadet, mis on ühendatud A tüüpi pistikuga, kutsutakse A seadmeks ning see peab ka ühendusele voolu võimaldama. Vaikimisi on A seade ka ühenduse peremees, kuid rolle saab ühenduse ajal hiljem vahetada. OTG ühenduse peremehed peavad suutma tagada vähemalt 8 mA voolu 4,4V ja 5,25V pinge vahel. OTG seadet, mis on ühendatud B tüüpi pistikuga, kutsutakse B seadmeks ning see käitub kui alam. Kui B seade peaks tahtma saada peremehe rolli, siis kasutatakse **HNP** protokolli, mille järgi vahetatakse seadmete rollid, kuid tema ei pea tagama ühendusele voolu, seda teeb ikka A seade, mis on määratud kaabli poolt.

#### Mis peab OTG seadmel olema?
Nimekiri asjadest, mis peab OTG seadmel olema ning funktsioonidest, mida ta peab toetama.

* Limiteeritud peremehena funktsioneerimise võimekus
* **Targeted Peripheral List**
* Alamseadmena peab suutma töötada **Full-speed** režiimis (High-speed režiim on valikuline)
* Peremehena peab toetama **Full-speed** režiimi (Low-speed režiim ja High-speed režiim on valikulised)
* **Host Negotiation Protocol**
* **Session Request Protocol**
* Üks Mini-AB pesa
* Võimalus saata kasutajale sõnum/märguanne (näiteks mingisuguse vea korral või kui Targeted Peripheral Listis pole seadet millega proovitakse ühendust luua)
* Peremehena peab võimaldama minimaalselt 8 mA voolu VBus siinile 

### Ühenduse näited

#### Näide 1
Oletame, et kasutaja soovib ühendada kaamera ning printeri ning välja printida eelnevalt jäädvustatud pildi. Kui kasutaja loob ühenduse kaamera, mis on ühenduse peremehe rollis, ning printeri vahel, mis on ühenduse alama rollis, ning vajutab print käsklust, siis võimaldatakse USB siinile voolu ning otsitakse sobivat alamseadet. Kui alamat ei leita, siis väljastatakse veateade ning kui sobiv alam leitakse, siis hakatakse soovitud pilti printima ning töö lõppemisel katkestatakse ühenduse voolustatus ning lõpetatakse sessioon.

#### Näide 2
Oletame, et kasutaja soovib ühendada klaviatuuri oma nutitelefoniga, mis toetab HID seadmeid (Human Interface Device). Kui ühendada need kaks seadet omavahel, siis telefon kui ühenduse peremees ei paku ühendusele kohe voolu, sest vastasel korral võiks telefoni aku üpris kiiresti tühjeneda. Seega ta hoopis kontrollib siini pidevalt ADP (Attach Detection Protocol) tehnoloogiaga ning kui ühenduse teises otsas tuvastatakse sobiv klaviatuur, siis muudetakse siin voolustatuks ning käivitatakse programm, mis reageerib klahvivajutustele.

## Kaablid, pistikud, pesad
Enne USB OTG spetsifikatsiooni oli defineeritud 2 pistikut ning 2 pesa: A-pistik ja B-pistik, A-pesa ja B-pesa. A-pistik sobis vaid A-pessa ning B-pistik sobis vaid B-pessa. USB kaabel oli siis vastavalt, et ühes otsas oli A-pistik ning teises otsas B-pistik. Peremehed olid ühendatud A poolega ning alamseadmed B poolega. See aga keelas ära peremees-peremees ja alamseade-alamseade suhtluse ning samuti määras ta konkreetselt kindlaks kummagi seadme rolli.

Seega OTG standard defineeris uued pistikud ja pesad ning tegi neid ka oluliselt väiksemaks, et need oleks mobiiltelefonidele sobilikumad ja võtaks seadme küljes vähem ruumi.

OTG kaablid siiski järgivad esialgse USB standardit kaablite osas ehk kui esialgse standardi järgi oli ühes otsas A pistik ning teises otsas B pistik, siis OTG puhul on ühes otsas on Micro-A ning teises otsas Micro-B. 

**Micro-AB** pesa (vaata Pilt 2. USB Micro-AB pesa) on OTG tehnoloogia puhul väga oluline, sest sinna saavad ühendada nii Micro-A pistik kui ka Micro-B pistik, kuid mitte mõlemad korraga. Selline lahendus suures osas tagabki kahe rollilise võimekuse. Kui Micro-AB pessa on ühendatud seade Micro-A pistikuga, siis see seade on vaikimisi peremeesseade ning kui Micro-AB pessa on ühendatud seade Micro-B pistikuga, siis see seade on vaikimisi alamseade. See, milline pistik antud hetkel pessa ühendatud on, tehakse kindlaks OTG ID viigu järgi.

Regulaarsel USB-l on 4 viiku: D+, D-, VBus ning GND (ehk maa).

USB OTG-l on aga 5 viiku: D+, D-, VBus, GND ning ID. 

ID viik on Micro-A pistiku puhul ühendatud GND viiguga ning Micro-B pistiku puhul ei ole ta üldse mitte millegagi ühendatud. Selline teguviis avab võimaluse määrata, milline pistik on ühendatud Micro-AB pessa. 

## Targeted Host ja Targeted Peripheral List (TPL)
Targeted Host on peremees, mis peab toetama vaid ühendusi, mis on kirjeldatud Targeted Peripheral List-is. See, milliseid ühendusi Targeted Host toetab on seadme tootja sätestada.Toetatavatest seadetest moodustatakse nimekiri ning selle nimi ongi Targeted Peripheral List ehk lühendatult TPL. Kui Targeted Host-iga ühendatakse seade, mida ei ole Targeted Peripheral List-is, siis peab Targeted Host genereerima kasutajale arusaadava veateate, et antud ühendust ei ole võimalik luua, vastasel korral võib tekkida kasutajal suur arusaamatus, et miks seadmed korralikult ei tööta. Igal USB OTG seadmel peab olema Targeted Peripheral List.

## Protokollid

### Attach Detection Protocol (ADP)
Lubab USB seadmel kontrollida, kas ühenduse teises otsas on teine USB seade või mitte. USB ühenduse peremees mõõdab, kui kaua kulub aega, et USB siini pinge jõuaks määratud tasemeni, seda tehakse kindla voolutugevusega. Kui tuvastatakse piisavalt suur ajaline muutus, siis ühenduse otsas on ka teine seade. Siini kontrollitakse niiviisi umbes iga 1,75 sekundi tagant. Seda kasutatakse vaid, siis kui USB ühendus on välja lülitatud. Kui ühendus on sisse lülitatud, siis kontrollitakse teise seadme olemasolu D+ ja D- viikude pingete järgi. ADP ei tööta USB jaoturite puhul, seega ühenduse peremees ei suuda tuvastada seadet, kui see on ühendatud läbi USB jaoturi.

### Session Request Protocol (SRP)
Lubab mõlemal seadmel kontrollida USB ühenduse vooluseisu, tavalise USB puhul saab seda teha ainult peremees. See on eelkõige vajalik voolutarbe kontrollimiseks. Ühenduse peremees saab jätta ühenduse vooluta ning seda pakkuda teisele seadmele vaid siis, kui ta seda vajab ja küsib. Selline teguviis aitab säästa seadmete akut, mis teeb nende kasutamise mugavamaks.

### Host Negotation Protocol (HNP)
Kui kaks OTG seadet on ühendatud, siis USB kaabli suund määrab ära vaikimisi, milline seade on A-seade ehk peremees ning milline on B-seade ehk alamseade. OTG arendajate üheks eesmärgiks oli see, et seadete rolle saab vahetada ilma, et peaks kaabli ära võtma ning selle teist pidi ühendama. Eesmärk püstitati eelkõige sellepärast, et seadete omavaheline ühendamine oleks kasutajasõbralikum. Seega eesmärgi täitmiseks defineerisid OTG arendajad Host Negotation Protokolli, mis lubab OTG seadmetel ühenduse ajal rolle vahetada. Rollide vahetamiseks peavad mõlemad olema OTG seadmed. Uue standardi kohaselt käib vahetus nii, et peremees pidevalt kontrollib, kas alamseade soovib saada peremeheks või mitte ning kui ühel hetkel soovib, siis vahetatakse omavahel rollid.

## Viited