Esperimenti su USB OTG

Ho acquistato dei connettori plug micro USB per fare degli esperimenti. Sto costruendo un dispositivo che sfrutta un phablet (phone-tablet) con lo schermo da 6.5 pollici e sistema operativo Android, come interfaccia utente per un sistema di controllo luci casalingo. Ho collegato una interfaccia USB-Serial al cavetto in dotazione al phablet (quello che ha un plug microUSB e un receptacle USB-A) ed ho scritto un programma di prova (perfettamente funzionante) che mi permetteva di colloquiare tramite la porta seriale disponibile, col resto del mio apparato. Bene, però non è pratico avere il phablet con il cavetto adattatore, l’interfaccia USB-Serial e lo spinottino di alimentazione collegati. Ho pensato: adesso aggiungo al mio circuito un chip di convertitore USB-Serial della FTDI e faccio un cavetto che parta direttamente dalla scheda e finisca nel phablet, nel receptacle microUSB presente. Sarebbe bello, ho pensato, sfruttare lo stesso cavo ANCHE per alimentare il phablet e ricaricare la sua batteria. Con questa idea in testa, sono andato a leggere un po’ di documentazione sulla USB OTG ed ho trovato che oltre ai soliti 4 segnali, ce n’è un quinto. Questo segnale viene definito ID ed ha molteplici funzioni. Quella di base è semplice: se viene messo a GND, “avvisa” il dispositivo che deve comportarsi come un USB HOST e deve anche generare la tensione di 5V tipica di un dispositivo di questo tipo. Si noti che ormai praticamente tutti i dispositivi tablet, smartphone, phablet funzionano con una batteria da 3.7V (che in full charge è a 4.2V) e che quindi è necessario, all’interno del dispositivo, un regolatore step-up in grado di portare la tensione della batteria un pochino più in alto, per raggiungere i fatidici 5V. Questo step-up, ho scoperto a mie spese, ha una corrente limitata e qualche volta non è protetto (maledizione). Per cui, se provate a collegare, per esempio, un motorino elettrico ai contatti positivo e negativo del connettore USB, il telefono …si guasta 🙁 Nello specifico, il mio Samsung Nexus non voleva più saperne di spegnersi. Premevo il pulsantino di lato, si spegneva per tre secondi e poi si riaccendeva da solo. Certe volte passava più tempo, ma alla fine si riaccendeva da solo. Essendo fuori garanzia, ho costruito un connettorino microUSB con una resistenza, che prende il livello di una delle linee di dati e lo riporta sul pin di alimentazione. Così il telefono “vede” di nuovo una situazione regolare sul connettore microUSB e funziona come prima. La scocciatura è che ho sempre questo piccolo plug attaccato alla base del telefono. Un amico mi ha chiesto: “ma che cos’è che hai attaccato lì sotto ?”. Ed io ho mantito dicendo che si trattava di un dispositivo per diminuire l’influenza delle microonde sul mio cervello. Tornando al regolatore step-up presente nel dispositivo, sono andato a cercare quale fosse la corrente tipica disponibile e ho trovato su un solo documento un riferimento ad un’applicazione con Imax = 8mA. Leggendo le varie opzioni dei costruttori di chip con funzione di USB OTG, ho notato che il pin ID è collegato anche a dei comparatori interni, quindi non è solo un pin di on/off, ma fornisce al controller diversi possibili “stati” in funzione della tensione presente. Ora, dato che internamente c’è una resistenza di pull-up (verso il positivo), la tensione presente sul pin ID dipende dalla resistenza verso GND che mettiamo sul nostro circuito esterno. Tolta la resistenza da zero Ohm (che è quella vista in precedenza), ci sono altri valori tipici (e precisi) che permettono di “avvisare” il controller di come deve comportarsi il circuito. Addirittura, in un modello di chip, è possibile collegare una tastiera a questo singolo pin ! Ogni tasto viene decodificato in base al valore di resistenza che mette a GND. I valori “standard” per le funzioni più importanti dovrebbero essere 36.5K / 68K /120.4KOhm.
Quello che interessa a me è di poter “dire” al phablet che deve comportarsi da HOST, cioè deve “vedere” la mia interfaccia USB-Serial e utilizzarla come accessorio USB, ma che NON deve generare il 5V con lo step-up, perché il 5V lo voglio fornire io dall’esterno per ricaricare il phablet. Quindi, ho costruito un cavetto e mi sono messo a fare delle prove.

Il primo cavo costruito per le prove

Il primo cavo costruito per le prove

Per prima cosa, ho cercato la piedinatura di un connettore plug microUSB e l’ho trovata subito in internet. Ho costruito il cavetto e non funzionava in nessun modo. Per forza… gli schemi che avevo trovato su internet erano SBAGLIATI ! Ho preso un multimetro e dei fili molto sottili ed ho fatto delle misure in Ohm. Trovata la giusta piedinatura, ho proseguito nell’esperimento. Nella foto sotto potete vedere il mio connettore con i piedini giusti.

Il secondo cavo., quello usato nel prototipo completo

Il secondo cavo., quello usato nel prototipo completo

Poi sono andato avanti per vedere come raggiungere il mio obbiettivo. Secondo la documentazione, il dispositivo dovrebbe fare quello che ho scritto prima se “vede” una resistenza da 36.5KOhm. Non ho questo valore tra le mie resistenze e quindi ho usato una 33K con in serie un trimmer multigiri da 5K. Ho misurato il valore preciso di 36.5KOhm ed ho collegato il circuito, ma niente, non faceva quello che mi aspettavo.
Ho deciso, allora, di usare un trimmer da 100KOhm, senza resistenza in serie, e sono partito da zero salendo poi di un pochino per volta. Arrivato tra 3.9K e 4.7K il phablet, improvvisamente, si è messo a fare quello che volevo. Come l’ho capito ? Avevo un voltmetro messo sui pin Vbus (Vcc, il +5V della USB) e GND. Con la resistenza di zero Ohm sul pin ID, si vede il tester che segna immediatamente 5V (lo step-up interno è stato attivato) salendo verso i 3KOhm il 5V è scomparso, quindi lo step-up doveva essere stato disattivato. Ora c’era da vedere se il phablet riconoscesse l’accessorio USB, perché mi servono entrambe le cose. Lo riconosceva. Ho provato ad aumentare ancora il valore di resistenza e sono arrivato a circa 6KOhm e a questo punto l’interfaccia USB-Serial non veniva più riconosciuta. Allora ho messo sul mio circuito una resistenza da 4.7K e via.
Attenzione, su un altro dispositivo (di marca diversa) la cosa non funziona. Ho notato che queste “regole” sulla USB OTG vengono, come dire, “interpretrate” dai vari costruttori secondo le proprie esigenze. Comunque, il metodo rimane valido. Si costruisce il cavetto e si provano le resistenze tipiche per ottenere la tal funzione. Se la tensione di 5V scompare e un dispositivo accessorio USB (ovviamente alimentato esternamente) viene correttamente riconosciuto, allora si può ricaricare il telefono / tablet attraverso i pin Vbus (VCC) e GND del connettore microUSB.

Ricordo a chi volesse provare, che un errore significa bruciare il circuito interno, quindi se leggendo queste righe vi è venuta voglia di provare e così facendo rompete il vostro dispositivo (o quello di un imprudente amico che ve l’ha prestato), non venitevi a lamentare con me. Vi metto in guardia: IL DISPOSITIVO SI PUO’ ROMPERE, SE SBAGLIATE QUALCOSA.

Bene, chiudo qui. Il mio phablet mostra il segno di ricarica ( e si ricarica ! ) e contemporaneamente “vede” il circuito esterno come un accessorio USB. Quindi, dal mio circuito al phablet c’è solo un piccolo cavo, che da una parte ha un connettore a vaschetta (tipo IDC) e dall’altro un plug microUSB. Job done.