USB On-The-Go: l’evoluzione dello standard USB..
Dalla rivista:
Elettronica Oggi
Scambio di ruoli
La specifica OTG definisce un protocollo di negoziazione identificato dall’acronimo HNP (Host Negotiation Protocol), grazie al quale è possibile lo scambio di ruoli tra i dispositivi A e B.
Poiché il dispositivo A è per default l’host del bus, esso fornisce la tensione a VBUS. Quando il dispositivo A pilota, la tensione sale sopra un livello valido e il dispositivo B attiva il suo resistore di pullup. Nel momento in cui rileva un collegamento, il dispositivo A effettua il reset e l’enumerazione del dispositivo B: a questo punto il dispositivo A utilizza le funzioni fornite dal dispositivo B. Una volta che il dispositivo A termina di utilizzare il dispositivo B, esso può determinare se quest’ultimo è un dispositivo a doppia funzionalità richiedendo il descrittore delle funzionalità OTG del dispositivo B. Nel caso questi risponde con un descrittore valido che indica il supporto al protocollo HNP, il dispositivo A genera un apposito comando (HNP_Enable) che informa il dispositivo B della possibilità di assumere il ruolo di host una volta che il bus viene posto in Suspend Mode. A questo punto il dispositivo A esegue il comando Suspend del bus.
Il dispositivo B a questo punto segnala la sua intenzione di assumere il ruolo di host inviando un segnale di disconnessione (mediante la disattivazione del resistore di pullup se opera a full speed o del resistore di pulldown nel caso operi ad high speed). In risposta alla disconnessione del dispositivo B, il dispositivo A attiva il proprio resistore di pull up e inizia a operare come una periferica. Una volta che il dispositivo B ha eseguito il reset e l’enumerazione del dispositivo A, può utilizzare le funzioni rese disponibili da quest’ultimo. Una volta che il dispositivo B ha terminato con le funzioni del dispositivo A, effettua la sospensione del bus e attiva il proprio resistore di pullup, tornando a funzionare come una periferica. Quando viene rilevata la sopsensione del bus, il dispositivo A segnala la disconnessione e riassume il ruolo di host. Nel caso il dispositivo B sia del tipo a doppia funzionalità e il dispositivo A non desideri utilizzare le funzioni del dispositivo B, il dispositivo A reinvia il medesimo comando (HNP-Enable) e sospende il bus. Se il dispositivo B non segnala la richiesta di assumere il ruolo di host in un intervallo di tempo prestabilito, il disposityivo A può terminare la sua sessione facendo scendere il valore di diminuire il valore di VBUS.
Nel caso sia il dispositivo B ad avviare una sessione, il dispositivo A può saltare il processo di enumerazione dopo il reset inviando il comando HNP_Enable mentre il dispositivo B si trova ancora nello stato di default. Se il comando ha esito positivo, ovvero B è un dispositivo a doppia funzionalità, il dispositivo A sospende il bus. Nel caso il comando non abbia successo, ovverossia il dispositivo B agisce solamente come periferica, il dispositivo A procede all’enumerazione del dispositivo B e, se possibile, effettua i compiti previsti per la sessione.