[LAB] YLH2 - USB 2.0 Hub
-
Mi sono (ri)messo a pasticciare con cavetti, breadboard, IC, ecc. per riprende un'idea avuta ai tempi del Covid e poi abbandonata: il fine ultimo è quello di fare una PCB con HUB USB incorporato.
Ai tempi avevo deciso di puntare sul controller USB2512B di Microchip e questa volta credo di essere arrivato ad un punto...
-
interessante... 2 porte per, presumo, mouse e eventuali pennette per storage? ( posto che poi uno ci attacca più o meno quello che vuole
)
-
@ZIOLele1980 l'obbiettivo sarebbe quello di realizzare una board dove poter connettere una Yubikey (presente?) in modo da avere a portata di dito un 2FA sicuro (e comodo).
Ero partito da questa idea, che poi alla fine è scalabile: la famiglia USB251xB arriva fino a 4 porte. Al momento ho in mente bene o male questa roadmap:
- realizzare PCB standalone per fare vari test di stabilità e performance sul progetto
- realizzare un macro pad (stile CU7) con HUB integrato
- realizzare tastiera 60% con HUB integrato
Durante il percorso si potrebbe anche lavorare ad una daughter-board con HUB integrato.
Sono arrivato ad un prototipo su breadboard funzionante ma con alcune limitazioni, soprattutto in termini di velocità: anche se è solo USB 2.0 il problema dello USB differential routing si sente eccome, dovrò studiare molto bene come realizzare al meglio la PCB.
Il prototipo però supporta il power delivery, USB-C in ingresso e molti parametri possono essere configurati per mezzo di EEPROM (se fai caso dalla GIF si vede infatti prodotto e produttore custom): si dovrà però testare bene per capire se e quanto è stabile. -
Credo di aver completato tutte le prove che mi ero prefissato: sto scrivendo queste righe con la mia board connessa tramite l'HUB prototipato su breadboard, riesco a ricaricare i dispositivi (telefono, cuffie, ecc.) - anche a PC spento (
) - e sono finalmente venuto a capo (spero) di un problema che mi stava tirando pazzo.
Penso di aver scoperto una cosa che merita di essere approfondita - anche se alla fine non ritengo sia oggi così fondamentale.
È ormai parecchio tempo che di base l'HUB è funzionante - mi mancava in sostanza di riuscire a far funzionare la ricarica anche a PC spento, problema che ho poi risolto riuscendo a trovare il giusto registro nella EEPROM. Ironia della sorte, riuscivo a collegare e far funzionare praticamente tutto tranne... le tastiere.
Ho passato settimane a pensare che il grattacapo fosse causato da qualche difetto di progetto o di collegamento ma alla fine ho capito che il problema era un altro: QMK.Mi spiego meglio. Inserita la testiera, il kernel mi diceva:
Su quel «due to insufficient available bus power» ci ho sbattuto la testa per ore e ore ma alla fine ho capito: volendo fare le cose per bene, e avendo letto e studiato attentamente le specifiche dello standard USB 2.0, ho correttamente dichiarato il mio HUB come «bus powered».
In questo modo l'host permette di erogare un massimo pari a 100 mA, non una virgola di più. E per una tastiera questo dovrebbe essere più che sufficiente, e invece... a quanto pare gli sviluppatori di QMK ritengono «normale» dichiarare un consumo di default pari a 500 mA.
Al momento della connessione, la tastiera dichiara di voler consumare fino a 500 mA, l'HUB risponde di poter offrire solo fino a 100 mA... e la negoziazione fallisce.
Ma inserendo nel config.h la definizione:
#define USB_MAX_POWER_CONSUMPTION 100
il risultato cambia
.
Ho il sospetto che la valorizzazione a 500 mA di default sia presente da moltissimo tempo - ma voglio indagare meglio su questo aspetto.
Oltretutto, da quello che penso di aver intuito, ci sono un sacco di HUB in commercio che per aggirare problemi come questo si dichiarano come «self powered»...
Devo indagare ancora un po': ma al momento l'HUB - così configurato - è perfettamente funzionante e compliant con tutte le specifiche USB.