# USB On-The-Go

L'USB OTG (USB On-The-Go) è una specifica che permette a una periferica di agire come host (ad esempio uno smartphone), e quindi di comunicare con altre periferiche USB come HDD esterni, chiavette o pendrive, tastiere, mouse o joypad attraverso un cavo con interfaccia USB.

## Storia

Le specifiche iniziali risalgono al 2000 con l'uscita dell'USB 2.0, ma le specifiche ricevettero numerose modifiche tra cui la versione 1.3, risalente al 2006, la 2.0 risalente al 2008, e la 3.0 risalente al 2011.
La versione 3.0, commercializzata a partire dal 2008 e denominata High-Speed USB On-The-Go, è la prima compatibile con i nuovi pin dell'USB 3.0 consentendo un trasferimento dati di ben 4,8 Gbit/s, invece le precedenti sono limitate a 480 Mbit/s (velocità dell'USB 2.0).

## Caratteristiche

A differenza dell'USB standard, i dispositivi collegati sono driver-free. L'utilizzo di USB OTG permette a questi dispositivi (normalmente smartphone, tablet e altro) di assumere il ruolo di host (o master) e peripheral (o slave). Ad esempio, un telefono cellulare può leggere da supporti rimovibili agendo da dispositivo host, o presentarsi come una memoria di massa USB quando è collegato a un computer host. È una tecnologia utilizzata soprattutto in ambito mobile, tramite un file manager, per leggere, copiare, incollare, eliminare o spostare qualsiasi file. È inoltre possibile collegare ai propri dispositivi anche tastiere, mouse, joypad, fotocamere digitali.
L'OTG dà la possibilità ad una periferica di svolgere sia il ruolo di host sia quello di client. La scelta se essere host o client è gestita tramite software. Un cavo OTG è praticamente un classico cavo con una spina Micro-USB (Mini-USB per i dispositivi più vecchi) con il pin 4 "sense" messo a GND. Alcuni dispositivi elettronici, come il Nokia N900, possono lasciare all'utente la libertà di usare lo stesso cavo nelle due modalità attraverso una scelta nel menù del dispositivo.
L'USB On-The-Go non vieta l'utilizzo di hub, ma nell'hub devono essere collegati solo dispositivi client (mouse, memorie di massa, tastiere) e non host. Nell'hub non possono essere utilizzati, in contemporanea, dispositivi MHL e USB OTG; nel dispositivo (telefono) può essere usato uno solo dei protocolli in contemporanea. Il consumo di batteria è notevole, non è possibile utilizzare contemporaneamente il caricabatterie per mantenere il livello di carica.
Alcuni dispositivi utilizzano un connettore USB On-The-Go a 11 pin (contro i 5 pin normali): la versione a 11 pin consente di utilizzare l'USB OTG in contemporanea all'MHL o al classico USB, ma nonostante questo adesso si utilizza sempre di più il classico Micro-USB tipo B (a 5 pin nella versione 2.0). L'OTG supporta anche i nuovi connettori della versione 3.0 dell'USB, a patto che il telefono disponga di quel tipo di connettore.

## Protocolli

L'USB On-The-Go supporta solo dispositivi driver-free gestiti tramite il protocollo Host Negotiation Protocol (HNP), prima dell'introduzione dell'HNP venivano utilizzati protocolli proprietari.
I nuovi protocolli introdotti dall'USB OTG 2.0 sono i seguenti:
* Attach Detection Protocol (ADP): consente che un dispositivo host controlli lo stato e il collegamento dell'altro dispositivo, permettendo di fornire energia tramite il bus. Il secondo dispositivo utilizzerà Session Request Protocol per avviare la comunicazione dati.
* Session Request Protocol (SRP): consente alla periferica (dispositivo client) di richiedere all'host di alimentare la linea V$_{BUS}$ e incominciare una sessione. Il dispositivo può terminare una sessione spegnendo la linea per abbassare il consumo, come richiesto in tutti i dispositivi alimentati a batteria come un telefono cellulare.
* Host Negotiation Protocol (HNP): consente la commutazione dei ruoli di host e client purché entrambi siano dispositivi OTG dual-role. Quindi, qualsiasi dispositivo OTG è in grado di avviare il trasferimento dati su bus USB OTG.
Invece l'USB On-The-Go non supporta alcuni protocolli utilizzati per i dispositivi driver-free nell'USB: Enhanced Host Controller Interface (EHCI); Open Host Controller Interface (OHCI); Universal Host Controller Interface (UHCI).
Con la terza release dell'USB On-The-Go viene introdotto un nuovo protocollo: Role Swap Protocol (RSP).
* Role Swap Protocol (RSP): è una alternativa all'HNP utilizzando però le novità introdotte dall'USB 3.0, funziona più o meno allo stesso modo ma utilizza i nuovi pin dell'USB 3.0.

## SuperSpeed OTG (SS-OTG)

La seconda release dell'OTG (USB On-The-Go 2.0) è uscita dopo il rilascio dello standard USB 3.0; nonostante ciò, le nuove caratteristiche introdotte (i nuovi pin e la velocità molto più elevata) non sono ancora supportate. Nel 2011 viene lanciato il SuperSpeed OTG (OTG 3.0) in cui, oltre al supporto al nuovo standard, sono introdotte novità sui protocolli e altre piccole novità.

## Utilizzo e supporto

La possibilità di inviare i dati senza utilizzare un USB master (tipicamente un computer) controllore apre un vasto campo di applicazione: per esempio, una fotocamera in grado di inviare le immagini direttamente a una stampante, un telefono in grado di leggere un disco rigido, videocamere collegate a lettori DVD, ecc. permette un ampio utilizzo nel mondo del mobile.
I primi dispositivi che supportavano il protocollo OTG sono stati i Nokia con Symbian, il supporto all'OTG è in tutti i principali sistemi operativi (Android, iOS, Windows Phone) ma nonostante ciò il supporto, in alcuni dispositivi, è limitato (i Nexus, con Android stock, non supportano le memorie di massa), non è utilizzabile senza jailbreak (iOS), oppure è stato introdotto ma non è utilizzabile (introdotto con Windows Phone 8.1, ma inattivo).