Come funziona un hub USB?


9

Conosco la risposta di Google e la risposta di Wikipedia per la domanda di cui sopra. Ma ho una domanda più specifica a portata di mano. Gli hub USB hanno molte porte in entrata e in uscita e una sola porta in uscita, per questo sono in grado di usare insieme un numero n di dispositivi. Ma non capisco come può una porta USB eseguire trasferimenti di dati con un numero n di porte USB?
come può inviare dati diversi a tutte le porte USB contemporaneamente?

*

schematico

simula questo circuito - Schema creato usando CircuitLab

*.


1
Più o meno allo stesso modo in cui il tuo router di rete può connettere una porta LAN (Internet) a più dispositivi. A ciascun endpoint (dispositivo USB) viene assegnato un indirizzo e gli hub instradano semplicemente le richieste dall'host al dispositivo corretto, tenendo traccia di quale indirizzo si trova su quale porta. È molto più semplice per USB, nel senso che esiste un solo master (la porta host) che avvia tutte le transazioni.
Tom Carpenter,

@ TomCarpenter In che modo la porta USB invierebbe insieme dati diversi?
Aaditya Sahay,

1
La porta host richiede un endpoint specifico per parlare. Gli endpoint rispondono solo quando richiesto dall'host.
Tom Carpenter,

@TomCarpenter Ma tutti vengono utilizzati contemporaneamente e non uno per uno, ma tutti insieme.
Aaditya Sahay,

3
Ricorda che il bus USB può funzionare fino a 480 Mbps su USB 2.0. L'host parla sempre e solo a un endpoint alla volta, ma parla a tutti in sequenza e passa da uno all'altro così velocemente che non si può dire. La stessa cosa che fanno le reti. "Ehi, mouse sulla porta 1, dimmi se ti sei spostato. Ok ora tastiera sulla porta 2 hai qualche tasto premuto per segnalare? Ora sei lì sulla porta 3, unità flash, memorizzare questi dati per me. Qualunque altro io ho bisogno di parlare con? no, ok allora, mouse sulla porta 1, dimmi se ti sei trasferito ... "
Tom Carpenter,

Risposte:


16

Ha tutto a che fare con l'arbitrato. Qualsiasi sistema che richiede la connessione di più dispositivi ha bisogno di un modo per determinare chi dovrebbe parlare quando. Esistono diversi schemi come ci si aspetterebbe a seconda dell'applicazione.

Un esempio comune: nel networking abbiamo molti nodi che parlano tra loro. Questo viene fatto da ciascun nodo che ha un indirizzo (es. Indirizzo IP) e quando un nodo vuole parlare con un altro nodo, invia un pacchetto a quell'indirizzo. Quindi hai dispositivi come router che accettano pacchetti che arrivano su più porte e li inoltrano alla porta corretta. L'arbitrato viene eseguito utilizzando la memoria per archiviare i pacchetti fino a quando la porta di destinazione è libera.


Ora su USB. Questo è in realtà molto più semplice della rete perché non tutti i nodi sono uguali. Hai due tipi, un host e un endpoint. Esiste sempre un solo host, ma possono esserci molti endpoint. In questo caso l'arbitrato è molto più semplice perché solo la porta host può parlare a piacimento. Gli endpoint possono parlare solo quando richiesto dall'host e l'host parla sempre e solo con un endpoint alla volta.

Per i pacchetti host-> endpoint, gli hub USB passano semplicemente la richiesta dall'host a tutti gli endpoint. Poiché tutti gli endpoint hanno un indirizzo, solo quello a cui è stata indirizzata la richiesta farà qualcosa con esso (es. Risposta), tutti gli altri ignoreranno il pacchetto.

Per i pacchetti host endpoint->, l'host invia prima un pacchetto a un endpoint specifico tramite l'indirizzo per dire "ora puoi parlare", quindi quell'endpoint deve inviare immediatamente una risposta. Poiché solo un endpoint è autorizzato a parlare in qualsiasi momento, l'hub USB instraderà semplicemente il pacchetto da qualsiasi porta risponde a una richiesta dall'host.


In termini di come l'host determina quali dispositivi sono collegati e in che modo l'endpoint ottiene il proprio indirizzo, ciò viene ottenuto tramite l'enumerazione.

Tutte le porte host e hub hanno resistenze pull-down (15kOhm) sulle linee D + e D-. Questi mettono le linee dati di quella porta in uno stato noto quando non è collegato alcun dispositivo, uno stato in cui la porta non invierà alcun dato su linee D + / D-.

Quando un dispositivo è collegato, si fa conoscere collegando la linea dati D + (piena velocità) o D- (bassa velocità) a VCC utilizzando una resistenza da 1,5 kOhm. Ciò attiva un evento di enumerazione. La porta inizierà quindi il processo di configurazione del dispositivo e di assegnazione di un indirizzo. Se si collegassero due dispositivi contemporaneamente, verranno elencati uno alla volta .

Se non ci sono hub, l'host comunica semplicemente con il nuovo dispositivo e lo configura. Se ci sono hub nel sistema, è l'hub che segnala che il nuovo dispositivo è collegato . Se un hub segnala che è collegato un nuovo dispositivo, l'host indicherà all'hub di ripristinare il nuovo dispositivo e avviare le comunicazioni. Durante il ripristino, all'endpoint viene assegnato un indirizzo predefinito di 0 (*). L'host può quindi comunicare con l'endpoint utilizzando l'indirizzo predefinito e configurarlo con un indirizzo univoco diverso da zero che gli consentirà di sapere quando viene parlato.

(*) Poiché viene mai elencato un solo dispositivo alla volta, l'indirizzo 0 sarà sempre univoco per il dispositivo appena collegato.


Potresti quindi chiedere "bene come posso avere più dispositivi che parlano tutti contemporaneamente?". Supponi di avere un mouse, una tastiera e un'unità flash collegati allo stesso hub USB. Sappiamo tutti che puoi usare il mouse e la tastiera contemporaneamente copiando anche i file da / verso la tua unità flash, ma se solo un dispositivo può parlare alla volta, come può essere possibile?

Bene, tutto si riduce al fatto che le poche centinaia di millisecondi necessari al tuo cervello per notare che hai premuto un tasto e ti aspetti che lo schermo si aggiorni è un'eternità per il computer. Un'interfaccia USB 2.0 può funzionare fino a 480 Mbps (USB 3.1 può funzionare fino a 10 Gbps!), Il che significa che anche se l'host parla sempre e solo con un endpoint in un dato momento, scorre tra di loro così velocemente che puoi dire che lo sta facendo.

Host USB: "Ehi, mouse sulla porta 1, dimmi se ti sei spostato. Ok ora tastiera sulla porta 2 hai qualche tasto premuto per segnalare? Ora sei lì sulla porta 3, unità flash, memorizzare questi dati per me. Qualcun altro con cui devo parlare? No, ok allora, mouse sulla porta 1, dimmi se ti sei trasferito ... "

Umano: "Oh guarda, il computer ha notato che ho appena spostato il mouse, premuto un tasto sulla tastiera e copiato un'immagine sull'unità flash, tutto allo stesso tempo!"

Il dispositivo host tiene traccia di quali indirizzi endpoint vengono utilizzati e invierà pacchetti a ciascuno in sequenza o secondo necessità (ovvero quando il sistema operativo richiede l'accesso a un dispositivo specifico). Quindi, mentre non accade tutto simultaneamente, l'arbitrato è così veloce che i computer non riescono a capire la differenza.


2
Per aggiungere: i dispositivi USB (solo endpoint "di interruzione", per essere precisi) possono richiedere di eseguire il polling a un determinato intervallo fino a 1 ms. Finché non hai centinaia di dispositivi di input non noterai mai un ritardo.
Michael,

Come fa l'host a sapere quali endpoint sono collegati? Inoltre, questo in realtà non sembra rispondere alla domanda originale sugli hub. Come interagiscono in questo processo? Come interagiscono nell'enumerazione?
Yona Appletree,

1
Enumerazione @YonaAppletree. Gli host e gli hub eseguono la scansione di tutte le porte alla ricerca di connessioni ai dispositivi: rilevano una resistenza di pull-up da 1,5 kOhm su D + (Full Speed) o D- (Low speed). Aggiungerò alcune informazioni su come viene assegnato un indirizzo agli endpoint.
Tom Carpenter,

@YonaAppletree in termini di hub durante il funzionamento, la risposta ne parla già. Da host a endpoint: "Gli hub USB passano semplicemente la richiesta dall'host a tutti gli endpoint". Affinché l'endpoint possa ospitare: "Poiché un solo endpoint può parlare in qualsiasi momento, l'hub USB instraderà semplicemente il pacchetto da qualsiasi porta risponde"
Tom Carpenter,

1

Risposta più breve: l'host invia i dati indirizzati a un determinato dispositivo (che era "enumerato" preliminare), una transazione alla volta, in sequenza. L'hub trasmette tutti i pacchetti a tutti i dispositivi. Un dispositivo risponde solo alle transazioni a cui è indirizzato. Questo è tutto, vero per i dispositivi HS.

Per i dispositivi FS e LS il processo è un po 'più complicato. Utilizza "traduttori di transazioni" che sono integrati in ogni hub per ogni porta, che traducono le cosiddette "transazioni divise" nel traffico LS o FS.


Che dire di USB 3?
jbarlow,

Gli hub USB3 sono più intelligenti per il collegamento Super-Speed ​​e utilizzano il routing esplicito verso dispositivi / endpoint. La sezione USB2 rimane la stessa. Vedere la sezione 3.1 "Riepilogo architettonico" delle specifiche USB3.1 più recenti, usb.org/developers/docs/usb_31_052016.zip
Ale..chenski,
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.