In che modo USB 2.0 ha evitato le collisioni?


33

Osservando i pin delle prese USB 3.0, posso vedere che ci sono coppie di trasmissione e ricezione separate, tuttavia per USB 2.0 esiste solo una coppia di pin "dati". In che modo USB 2.0 garantisce che i dispositivi non comunichino contemporaneamente?


2
Potresti anche essere interessato a guardare cose come CSMA / CD, che è come è risolto in altri contesti
PlasmaHH,

1
Le coppie di trasmissione / ricezione separate non risolvono tutti i conflitti. Immagina di avere un pendrive e un modem, entrambi vogliono inviare alcuni dati all'host, quindi iniziano entrambi a trasmettere. Dove? Sulla stessa coppia: host host. Il conflitto è ancora lì. Non è così che funziona l'USB, ma è esattamente come funziona Ethernet 10/100: ogni direzione ha la sua coppia, ma la luce "collisione" sull'hub continua a lampeggiare.
Agent_L

Risposte:


67

USB è rigorosamente master-slave. Il dispositivo non trasmette a meno che l'host non gli dica di trasmettere.

Anche la cosiddetta modalità di "interruzione" è davvero polling: ad esempio, ogni 8 millisecondi (o meno se si ottiene un mouse gamer), il PC chiede al mouse "qual è la tua posizione" e il mouse risponde.

Lo stesso se hai un'interfaccia USB-seriale per esempio. Quando l'interfaccia riceve i dati sulla linea seriale, non li trasmetterà al PC. Aspetterà invece che il PC avvii la transazione e richieda i dati.

Questa pagina web ha una buona spiegazione dei pacchetti scambiati. Fondamentalmente, tieni presente che l'USB è stato implementato per consentire il funzionamento della periferica più stupida e più economica possibile, il che significa che la maggior parte dell'intelligenza si trova nell'host, nel controller USB host, nel sistema operativo e nei driver. Questo è molto evidente quando si leggono le specifiche.

Firewire (ad esempio) ha una filosofia completamente diversa, è molto più potente, è multi-master quindi i dispositivi possono parlare tra loro senza l'aiuto di un host / master. In realtà è molto più vicino nella sua filosofia a qualcosa come l'anello token con trasferimenti isocroni schiaffi sopra, piuttosto che all'USB. Tuttavia, "multi master" significa che richiede un potente microcontrollore nei dispositivi, che esegue uno stack software complesso. È quindi più costoso e quindi limitato a prodotti costosi come videocamere e custodie per dischi rigidi veloci. Un mouse firewire non ha senso, sarebbe troppo costoso. Questo è uno dei motivi per cui FireWire ha fallito.


3
Spiegazione eccellente e confronto molto appropriato con FireWire (e sì, costruiamo una rete arbiting basata su token per ... realisticamente, al massimo 5 dispositivi su un bus).
Marcus Müller,

3
Questa è una buona risposta, ma penso che sarebbe più completo se menzionassi l'enumerazione. Scoprire quali dispositivi sono collegati a una rete dinamica senza funzionalità di arbitrato (come una rete multi-master avrebbe) è un problema non banale e in molti modi definisce perché USB non può utilizzare una topologia di bus reale.
Jon,

Grazie;) Non conosco i dettagli cruenti sull'enumerazione dal lato host. Ma IMO il vero motivo per cui l'USB è così è che è stato progettato a metà degli anni '90 e a quel tempo i microcontrollori erano più costosi di oggi e il modo per dispositivi economici era renderli il più stupidi possibile con meno RAM e codice il più possibile. Inoltre, funziona molto bene, ha colpito un punto debole.
peufeu,

5
USB non corretto è un bus . Ha solo una topologia (stella) diversa rispetto al bus "lineare" più familiare. Tutte le transazioni host USB 2.0 (HS) vengono trasmesse su tutti i segmenti della stella, quindi non è molto diversa dal bus "lineare". Simile al bus lineare, tutti i dispositivi vedono l'attività del bus quasi contemporaneamente. L'unica differenza è che le risposte dei dispositivi non sono visibili ad alcuni altri dispositivi che si trovano su rami diversi.
Ale..chenski,

2
@rahuldottech è abbastanza bello se funziona , ma FireWire era molto meno affidabile dell'USB, in particolare il plug & play WRT. E con USB, puoi facilmente collegare molte unità a una singola porta usando un hub aggiuntivo. C'è un compromesso tra le prestazioni, ma l'affidabilità e la semplicità vincono.
leftaroundabout

18

Nel framework USB i dispositivi non possono comunicare contemporaneamente, perché "parlano" solo quando l'host USB "consente" di parlare. E l'host USB consente a un altro dispositivo di "parlare" solo quando il protocollo di transazione sequenziale con il primo dispositivo è completato. E i dispositivi USB non hanno alcun mezzo per "parlare" da soli, non c'è alcun meccanismo di interruzione attivo nella USB. In breve, il meccanismo di attuazione di questa disciplina è il seguente.

Dopo aver collegato i dispositivi USB 2.0, l'host li enumera assegnando indirizzi univoci a ciascun dispositivo.

Ogni transazione sul bus viene avviata dall'host USB.

Le intestazioni di ogni transazione USB riportano l'indirizzo specifico del dispositivo. Anche quando le transazioni vengono trasmesse sull'intero albero USB (sulla specifica istanza del controller host), solo il dispositivo con indirizzo corrispondente risponderà alla transazione e prenderà i dati o risponderà con i dati.

Il link "partner" invierà quindi un riconoscimento nella direzione da chi riceve i dati con successo. L'intera transazione segue un protocollo stabilito con una sequenza definita di token, timeout e codici di correzione degli errori, per garantire l'integrità della transazione.

Tutti gli altri dispositivi stanno solo ascoltando e ignorando il traffico che non è diretto a loro.

Questo è tutto, è un'interfaccia "half-duplex".


1
Non ha familiarità con il protocollo USB, quindi come fa l'host a sapere che il dispositivo corretto ha risposto?
Derek 功夫 會 功夫

@Derek 朕 會 功夫, l'host lo sa perché questo è l'unico dispositivo che dovrebbe rispondere, nessun altro risponderà. Le transazioni USB 2.0 sono "atomiche", non ci sono risposte differite, tutto dipende dal timeout. Nessuna risposta tempestiva (transazione non completata) comporterà un nuovo tentativo.
Ale..chenski,

Per dare seguito, la mia domanda è che dal momento che ogni dispositivo è collegato allo stesso bus, cosa mi impedisce di fingere di essere un altro dispositivo collegato?
Derek 功夫 會 功夫

7
@Derek 朕 會 功夫: Niente. Ecco perché non si collegano chiavi USB casuali che si ottengono dai mercati off-street. Non puoi fidarti di loro.
Corse di leggerezza con Monica il

7
@Derek 朕 會 功夫, a parte le intenzioni dannose, un dispositivo USB deve accettare un indirizzo durante l'enumerazione e un altro dispositivo avrà un indirizzo diverso, tutti controllati dall'host. Ciò non è diverso rispetto a quando più moduli di memoria sono collegati a un bus parallelo, ma ciascun modulo risponde solo alla selezione del decodificatore / chip. E se due dispositivi USB rispondessero accidentalmente (diciamo, host rovinato con assegnazione dell'indirizzo), ci sarà un pasticcio di collisioni sul bus e nessun pacchetto passerà CRC (che è collegato a ogni token USB) e la porta corrispondente essere disabilitato a causa di errori enormi.
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.