La maggior parte di noi non dà mai molta importanza ai nostri dispositivi USB, li colleghiamo e li dimentichiamo. Ma cosa succede se sei il tipo curioso che vuole saperne di più su come funziona l'USB? Il post di domande e risposte di SuperUser di oggi contiene le risposte alle domande di un lettore curioso.
La sessione di domande e risposte di oggi ci arriva per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento guidato dalla comunità di siti web di domande e risposte.
Foto per gentile concessione di Evilelka Kowalski (Flickr) .
La domanda
Il lettore SuperUser smeeb vuole sapere se esiste davvero un vero protocollo di comunicazione USB:
According to Wikipedia, USB :
- Definisce i cavi, i connettori e i protocolli di comunicazione utilizzati in un bus per la connessione, la comunicazione e l'alimentazione tra computer e dispositivi elettronici.
Ma c'è un vero Protocollo di comunicazione USB ? La mia comprensione è che:
- Colleghi un dispositivo USB a una macchina (Ubuntu o qualsiasi tipo di Linux per esempio).
- Linux trova in qualche modo il driver del dispositivo per quel dispositivo ( bonus se lo sai! ) e lo carica.
- Il dispositivo è ora connesso sotto / dev / theDevice .
- Le app dello spazio utente possono ora leggere e scrivere / dev / theDevice e il driver gestisce l'input e l'output di basso livello al dispositivo / hardware sottostante.
Per quanto ne so, a Protocollo di comunicazione USB non appare da nessuna parte in questo flusso. Se la mia comprensione è corretta, l'USB è solo il cavo e la connessione elettrica tra il PC e il dispositivo.
Mi sbaglio qui? USB implementa effettivamente un qualche tipo di protocollo di basso livello che sottolinea il flusso sopra? In tal caso, che cos'è e come funziona con una vista di 30.000 piedi?
Esiste un vero protocollo di comunicazione USB?
La risposta
I contributori di SuperUser RedGrittyBrick e projectdp hanno la risposta per noi. Il primo, RedGrittyBrick:
Sì ( vedi Protocolli USB ).
A quanto ho capito, le specifiche USB definiscono un insieme complesso di protocolli a strati e profili dei dispositivi.
Ad esempio, i dispositivi USB possono essere conformi a modelli di alto livello come archiviazione di massa, tastiera, dispositivo di interfaccia umana, ecc. Ed essere gestiti da un driver di dispositivo generico. Alcuni dispositivi USB possono comunicare a un livello inferiore in modo che il supporto USB di basso livello del sistema operativo possa riconoscere che sono necessari driver di livello superiore specifici del dispositivo.
Seguito dalla risposta di projectdp:
Domanda
Esiste un protocollo di comunicazione USB di basso livello in azione e che cos'è?
Risposta
Si C'è. La specifica USB include il protocollo USB che definisce il modo in cui il bus viene utilizzato a livello di bit. Questo sarebbe il protocollo di basso livello che sta alla base dei protocolli di livello superiore (cioè archiviazione di massa, HID, ecc.).
Per le specifiche su come funziona il protocollo USB, questo Wiki di OSDev è utile. Eccone un altro descrizione interessante utilizzando diagrammi di sequenza per descrivere le varie transazioni di dati per il protocollo USB.
Domanda bonus
In che modo Linux trova e carica il driver del dispositivo per quel dispositivo?
Risposta bonus
Su Linux, quando si utilizza un kernel abilitato per USB, un dispositivo USB funzionante verrà rilevato tramite l'hardware e il kernel a causa della specifica USB. Sul lato hardware, il rilevamento viene effettuato dal controller host USB. Quindi nel kernel il driver del controller host prende il sopravvento e traduce i bit di basso livello sul cavo in informazioni formattate con protocollo USB. Queste informazioni vengono quindi inserite nel driver usbcore nel kernel.
Ho parafrasato da questo eccellente Opensourceforu article , che ha molti più dettagli e chiarezza sulla tua domanda nel contesto Linux.
Assicurati di controllare il resto della vivace discussione tramite il collegamento del thread condiviso di seguito!
Hai qualcosa da aggiungere alla spiegazione? Audio disattivato nei commenti. Vuoi leggere altre risposte da altri utenti esperti di tecnologia Stack Exchange? Dai un'occhiata al thread di discussione completo qui .