Esiste davvero un "protocollo di comunicazione USB"?


24

Secondo 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 esiste davvero un " protocollo di comunicazione USB "? La mia comprensione è che:

  1. Colleghi un dispositivo USB a una macchina (ad esempio Ubuntu o qualsiasi tipo di Linux)
  2. Linux trova il driver di dispositivo per quel dispositivo (in qualche modo - bonus se lo sai!) E lo carica
  3. Il dispositivo è ora collegato sotto /dev/theDevice
  4. Le app dello spazio utente ora possono leggere / scrivere /dev/theDevicee il driver gestisce l'IO di basso livello sul dispositivo / hardware sottostante

Per me, in nessun punto di questo flusso appare un "protocollo di comunicazione USB". Se la mia comprensione è corretta, l'USB è solo il cavo e la connessione elettrica tra il PC e il dispositivo.

Sbaglio qui? USB implementa effettivamente una sorta di protocollo di basso livello che sottolinea il flusso sopra? In tal caso, cos'è e come funziona con una vista di 30.000 piedi?


45
"il driver gestisce l'IO di basso livello verso il dispositivo / hardware sottostante" lo fa usando il protocollo di comunicazione che è nello standard.
EBGreen

29
Oh ... ho letto la domanda "Esiste davvero un" protocollo di comunicazione USB "?" Quindi la risposta sarebbe sì. Se vuoi sapere qual è l'attuale protocollo di comunicazione, leggi semplicemente lo standard. Oppure leggi la sezione 11 sulla pagina wiki a cui ti sei collegato.
EBGreen

6
"l'USB è solo il cavo e la connessione elettrica tra il PC e il dispositivo". Il cavo Ethernet è solo un cavo tra il PC e uno switch / router / qualunque cosa. Ci sono ancora alcuni protocolli usati per comunicare su questo cavo e fare cose utili con esso.
ysdx,

13
"Linux trova il driver di dispositivo per quel dispositivo" Come pensi che Linux sia in grado di rilevare quale dispositivo è collegato all'altra estremità. Un protocollo comune, forse?
spender

4
@Ramhound "Quei protocolli di comunicazione sono indipendenti dallo standard almeno nel caso di Ethernet." Questo è falso I protocolli Ethernet (sia a livello fisico che MAC) sono definiti dagli standard IEEE Ethernet (in particolare, gli standard 802.3 ). Naturalmente, è possibile (e comune) inviare qualcosa di diverso dal protocollo Ethernet tramite un cavo di categoria 6 con Connettori RJ-45, ma a quel punto non è più Ethernet. Questa è una pratica comune con i sistemi telefonici non VoIP, ad esempio.
reirab

Risposte:


47

Sì, vedi i protocolli USB

A quanto ho capito, le specifiche USB definiscono un insieme complesso di protocolli e profili dispositivo stratificati.

Ad esempio, i dispositivi USB possono essere conformi a modelli di alto livello come archiviazione di massa, tastiera (o Human Interface Device, ecc.) Ed essere gestiti da un driver di dispositivo generico. Alcuni dispositivi USB possono comunicare a un livello inferiore in modo tale che il supporto USB a basso livello del sistema operativo sia in grado di riconoscere che sono necessari driver di livello superiore specifici del dispositivo.


30

Domanda: esiste un protocollo di comunicazione USB di basso livello in azione e di cosa si tratta?

Risposta:

Sì, 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, ad esempio archiviazione di massa, HID, ecc.

Per dettagli su come funziona il protocollo USB, questo wiki OSDev è utile. Ecco un'altra interessante descrizione che utilizza diagrammi di sequenza per descrivere le varie transazioni di dati secondo il protocollo USB.

Domanda bonus: In che modo Linux trova e carica il driver di dispositivo per quel dispositivo?

Risposta bonus :

'Su Linux quando si utilizza un kernel abilitato USB, un dispositivo USB funzionante verrà rilevato tramite hardware e kernel a causa delle specifiche USB. Sul lato hardware, il rilevamento viene eseguito dal controller host USB. Quindi nel kernel l'Host Controller Driver prende il controllo e traduce i bit di basso livello sul filo in informazioni formattate con protocollo USB. Queste informazioni vengono quindi popolate nel driver principale USB nel kernel. "

Ho parafrasato questo eccellente articolo di Opensourceforu , che contiene molti più dettagli e chiarezza sulla tua domanda nel contesto Linux.


7
Spero che "domanda bonus" significhi "ricompensa" per te.
dotancohen,

@projectdp - Sarebbe molto utile se inserissi alcune delle informazioni dai tuoi riferimenti principali nella tua stessa risposta.
Ramhound,

@Ramhound - Grazie per il tuo feedback, ho riscritto la mia risposta in un modo più utile. Per quanto riguarda l'aggiunta di ulteriori informazioni dalle risorse, cosa ti piacerebbe vedere che è rilevante per le domande?
projectdp,

14

Come quasi ogni altro tipo di interfaccia di comunicazione, l'USB è implementato come stack di protocollo. I livelli all'interno di questo stack che sono comuni a tutti o più tipi di dispositivi sono definiti dagli stessi standard USB, che entrambi consentono la compatibilità e impediscono a ciascun dispositivo di progettare un protocollo ridondante. Inoltre, ogni livello del protocollo estrae i dettagli di cui il livello successivo non deve preoccuparsi. Quindi, quando stai effettivamente scrivendo il livello specifico del dispositivo, hai solo funzioni generiche di "invio" e "ricezione" che ottengono i dati dall'endpoint A all'endpoint B. Tu, come progettista del dispositivo, non devi preoccuparti come succede. Inoltre, livelli inferiori all'interno dello stack di protocollo possono cambiare l'implementazione purché espongano un'interfaccia comune al livello sopra di essi. In questo modo, quando una parte dello stack del protocollo cambia, il resto dello stack non deve necessariamente cambiare.quale protocollo viene utilizzato a un livello inferiore dello stack. In linea generale, ogni livello consecutivo nello stack incapsulerà il messaggio prodotto dal livello più alto successivo all'interno del proprio campo di payload quando viene inviato un messaggio. Quando viene ricevuto un messaggio, ogni livello si stacca dalla parte relativa a quel livello e inoltra il suo payload al livello appropriato successivo nella pila. Questo è vero, non solo USB, ma quasi tutti i bus di comunicazione. Lo stack TCP / IP / Ethernet è probabilmente il più comunemente usato, ad esempio. Le attività di cui i livelli specifici sono comunemente responsabili sono descritte in modelli, come il modello OSI .

In USB, esiste un protocollo di livello fisico che definisce gli stati di tensione / temporizzazione / ecc. sul filo e come dovrebbero essere interpretati. Questo protocollo deve ovviamente far parte degli standard USB stessi, non specifici per un determinato dispositivo (soprattutto perché l'host non ha modo di sapere quale tipo di dispositivo sta per essere collegato a una determinata porta USB.)

Successivamente, c'è un protocollo di gestione del bus, usato per descrivere chi può parlare sul bus quando. Questo è chiamato livello di accesso ai media nel modello OSI. In USB questo livello può praticamente essere riassunto come "il dispositivo può trasmettere quando l'host gli dice di farlo", quindi non esiste un protocollo particolarmente complicato su questo livello in USB.

Successivamente, c'è un protocollo standard per descrivere un pacchetto di dati e come dovrebbero essere instradati dal mittente al destinatario. Questo livello deve anche far parte dello standard USB stesso, in modo che la comunicazione iniziale per scoprire quale tipo di dispositivo è stato collegato possa avvenire prima che il tipo specifico di dispositivo sia effettivamente conosciuto dall'host. Oltre a ciascun dispositivo con un ID specifico in questo livello, esiste anche il concetto in USB di un ID endpoint. Ciò consente a un determinato dispositivo di avere più endpoint USB, che sono multiplexati e demultiplati dallo stack USB standard, più o meno allo stesso modo in cui i socket sono multiplexati e demultiplati dallo stack TCP / IP standard. Un'applicazione può trattare ciascuno di questi endpoint come flussi di dati separati.

Infine, c'è il protocollo definito per il dispositivo stesso. Si noti che in realtà ce ne sono alcuni pre-progettati comuni inclusi come parte dello standard USB per casi d'uso comuni, come dispositivi di archiviazione di massa, mouse, tastiere, ecc., In modo che ogni produttore di dispositivi non debba reinventare il ruota. Tuttavia, i dispositivi più complicati sono liberi di progettare il proprio protocollo personalizzato a questo livello. L'output di questo layer per una determinata trasmissione viene passato come payload di un pacchetto di dati nel layer precedente. Si noti che, per dispositivi sufficientemente complicati, la parte specifica del protocollo del dispositivo può essere divisa in più livelli indipendenti, ma i livelli inferiori non devono saperlo o preoccuparsene. Tutto quello che devono sapere è che devono passare un determinato set di byte dall'host a un particolare endpoint del dispositivo o da un particolare endpoint del dispositivo all'host. Ancora una volta, avere l'interfaccia standard tra i livelli consente la separazione delle preoccupazioni, quindi un livello non deve preoccuparsi del funzionamento interno di un altro livello, ma solo i dati specifici a cui dovrebbe passare o aspettarsi di ricevere dai livelli immediatamente sopra o sotto di esso nello stack.


9

Esistono in realtà una serie di protocolli di comunicazione correlati che interagiscono.

Al livello più basso, esiste un protocollo che descrive come i pacchetti di byte vengono inviati tramite una connessione seriale. Questo è comune per tutti i dispositivi USB (ma diverso tra USB2 e USB3).

Uno dei primi pacchetti inviati chiede al dispositivo di descriversi. Per prevenire un problema con galline e uova, il protocollo di identificazione è lo stesso per tutti i dispositivi USB. Il sistema operativo può utilizzare questa identificazione per caricare il driver corretto.

A un altro livello, USB è un bus che significa che più dispositivi devono condividere la larghezza di banda. Ciò significa che esiste un protocollo che indica a ciascun dispositivo quando può parlare e quando no. Poiché tutti i dispositivi USB devono essere conformi a questo, un protocollo comune viene utilizzato per organizzare questo.

Infine, molti semplici dispositivi USB sono così semplici che esistono protocolli aggiuntivi che descrivono un'intera classe di dispositivi (mouse, tastiere, memoria, adattatori Ethernet, ...). La maggior parte dei dispositivi supporta zero o uno di questi protocolli funzionali.


"L'USB è un bus che significa che più dispositivi devono condividere la larghezza di banda" - Un punto che l'OP ha trascurato quando usa solo una configurazione punto-punto per la sua domanda. Poiché due (o più) dispositivi USB possono condividere il cavo con il PC host, possiamo dedurre che ci deve essere un protocollo.
segatura,

@sawdust Dato che funziona (anche punto-punto), possiamo dedurre che esiste un protocollo. Il rilevamento dei dispositivi, ad esempio, non sarebbe possibile se non esistesse un protocollo standard.
reirab

Esiste davvero uno standard di comunicazione e al suo interno c'è quindi una comunicazione seriale Universal Serial Bus.
Ramhound,

@Ramhound Sì, come la maggior parte dei moderni design di bus per tutto tranne le interfacce di memoria, USB utilizza coppie differenziali seriali per la trasmissione dei dati. USB <= 2.0 aveva una singola coppia differenziale, mentre USB 3 ha due coppie differenziali aggiuntive (una per la trasmissione SuperSpeed ​​e un'altra per la ricezione SuperSpeed, che consente la comunicazione full duplex a 5 Gbps per direzione).
Reirab

Ho solo pensato di puntare il suo bus seriale al centro dello standard, l'autore non sembrava consapevole di questo fatto, quindi la domanda.
Ramhound,

5

Forse parte della risposta sta nella definizione della frase " protocollo di comunicazione ". Andando alla stessa fonte che hai fatto (Wikipedia) troverai informazioni utili come:

  • Affinché la comunicazione avvenga, è necessario concordare protocolli.
  • I sistemi di comunicazione utilizzano formati ben definiti (protocollo) per lo scambio di messaggi.
  • un protocollo deve definire la sintassi, la semantica e la sincronizzazione della comunicazione.
  • Un protocollo può quindi essere implementato come hardware, software o entrambi.

Un modo semplice per pensarci è che un protocollo è un modo predefinito e concordato di fare qualcosa , in questo caso qualcosa è come spostare i dati dentro e fuori da un dispositivo USB collegato. Dal punto di vista hardware ogni pin ha un livello di tensione e un protocollo di utilizzo predefiniti, ogni tipo di dispositivo ha un protocollo di utilizzo predefinito per ogni pin e ogni pacchetto di dati ha una sintassi e un formato di dati predefiniti. C'è anche un protocollo di comunicazione che agita la mano incorporato. Collettivamente queste sono tutte parti della raccolta di standard per l'utilizzo di dispositivi USB, ovvero il protocollo USB, che viene deciso (ovvero progettato, proposto, discusso, rivisto e infine approvato) dai membri di USB Implementers Forum, Inc.

Quindi sì, c'è un protocollo USB, o più correttamente ci sono un certo numero di pre-definito e concordato protocollo USB s per i diversi usi USB.


1
1. Il processo di comunicazione comprende (almeno) tre elementi: (1) codifica / invio E (2) ricezione / decodifica (3) _informazione_ (al contrario del rumore casuale). Se manca uno di questi 3 elementi, il processo fallisce. Possono anche essere presenti elementi aggiuntivi come feedback, mezzo (canale) e contesto tra gli altri. FONTE: Uno dei miei gradi è in Studi sulla comunicazione
OMY

1
2. SETI non riguarda la comunicazione, riguarda l' esplorazione e la scoperta . Anche se rileviamo un segnale prodotto autentico, non vi è alcuna garanzia che lo capiremo mai o saremo in grado di comunicare con il mittente. FONTE: [SETI Mission Statement] [1] [1]: seti.org/about-us
OMY

1
3. La compatibilità tra browser è in genere causata da (a) produttori di browser che non seguono i protocolli o (b) protocolli scritti male che causano implementazioni errate (ad esempio si considerano i famigerati bug del modello di box IE e si veda anche < quirksmode.org> ). Ecco perché ora abbiamo HTML 5 e CSS 3 , perché i protocolli necessitavano di miglioramenti. FONTE: Ho posseduto e gestito la mia società di sviluppo web per un certo numero di anni
OMY,

1
4. In primo luogo, i segnali radio che "sincronizzano" sulla frequenza utilizzano protocolli AM (modulazione di ampiezza). I segnali radio FM (modulazione di frequenza) "sincronizzano" con un integrale temporale. I protocolli per i sistemi FM prevedonoelementi fissi e dinamici per elaborare le informazioni. L'elemento dinamico sono leimpostazioni di frequenza variabile , che è limitato a un intervallo predefinito e limitato di frequenze.
OMY,

1
Gli elementi fissi sono le formule matematiche per modulare e demodulare il segnale. Indipendentemente dalle frequenze, queste formule sono costanti e possono essere implementate per elaborare il segnale tramite hardware analogico o software digitale. FONTE: esperienza personale come appassionato di elettronica e anche [Wikipedia] [1] [1]: en.wikipedia.org/wiki/Frequency_modulation
OMY
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.