In un cavo USB, è possibile scambiare i fili D + e D-?


54

Ho sentito che D + e D- sono segnali differenziali, importa se li scambio quando si collega un dispositivo USB al computer?


Domanda interessante ... Valida per tutti i protocolli differenziali validi .. come CAN!
Swanand,

Risposte:


58

Sommario

Quando si entra e si esce dallo stato inattivo, la polarità è importante e lo scambio delle linee D + e D causerà problemi.

Trasmissione dati

I dati USB sono codificati NRZ in modo tale che "One" sia rappresentato da nessuna variazione del livello fisico e "Zero" sia rappresentato da una modifica del livello fisico (vedere la figura seguente). Pertanto, l'inversione del segnale (ad esempio, scambiando D + e D-) non comporta alcun cambiamento funzionale durante la trasmissione dei dati. Ma potrebbero esserci problemi prima e dopo la trasmissione dei dati che possono interrompere la comunicazione con il dispositivo.

Uscita dallo stato inattivo

L'host include resistori pull-down da 15 kΩ su ciascuna linea di dati. Quando nessun dispositivo è collegato, questo porta entrambe le linee di dati in basso nel cosiddetto stato "zero single-ended" (SE0 nella documentazione USB) e indica una connessione ripristinata o disconnessa. Un dispositivo USB tira in alto una delle linee dati con una resistenza da 1,5 kΩ. Ciò sovrasta uno dei resistori pull-down nell'host e lascia le linee dati in uno stato inattivo chiamato "J". Per USB 1.x, la scelta della linea dati indica la velocità del segnale del dispositivo; i dispositivi a larghezza di banda tirano D + alto, mentre i dispositivi a larghezza di banda tirano D + alto.

Mentre i dati sono codificati NRZI, la sequenza di sincronizzazione e EoP sono definiti in termini di stati fissi (J / K / SE0). Quando D + e D- vengono commutati, lo stato J viene commutato con K e SE0 è ancora SE0 (entrambe le linee in basso). Quindi la sequenza di sincronizzazione ed EoP diventeranno errati in caso di inversione. In USB 1.x, se D + e D- vengono scambiati, i dispositivi a larghezza di banda completa vengono riconosciuti come larghezza di banda ridotta e viceversa. Quindi il dispositivo non comunicherà nemmeno alla stessa velocità dell'host.

Ingresso inattivo

L'estremità di un pacchetto USB, chiamata EOP (end-of-packet), è indicata dal trasmettitore che esegue 2 bit di SE0 (D + e D - entrambi al di sotto del massimo) e 1 bit di stato J. Successivamente, il trasmettitore smette di pilotare le linee D + / D e i suddetti resistori pull up lo mantengono nello stato J (inattivo).

Con un driver scambiato D + / D, l'host vedrà la sequenza (SE0, SE0, K) anziché quella corretta (SE0, SE0, J). L'host potrebbe quindi non riconoscere la fine del pacchetto, causando problemi.

inserisci qui la descrizione dell'immagine

Conclusione

Se il dispositivo e l'host rispettano rigorosamente le specifiche USB, lo scambio dei piedini D + e D comporterà un errore. È ipotizzabile che il progettista dell'host preveda una tale modalità di errore e abbia integrato la compatibilità per essa. Ma se un tale cavo scambiato funzionasse o meno nella pratica, certamente non aderirebbe alle specifiche.

Un altro membro, Andrew Kohlsmith, lo ha sperimentato quando i pin di un hub USB sono stati scambiati accidentalmente. Il problema si manifestava quando i dispositivi collegati non venivano visualizzati. Il dispositivo USB mostrerebbe che era alimentato ma non è stato riconosciuto dal computer sul lato a monte dell'hub (che è stato collegato correttamente all'host).

Fonte: Wikipedia

Modifica: grazie a coloro che hanno commentato. Ho aggiunto enfasi e dettagli dai tuoi utili appunti.


2
Va notato che l'host differenzia la velocità bassa / completa di quale linea hanno tirato su. Se si scambiano le linee D + / D, il dispositivo non comunicherà nemmeno alla stessa velocità dell'host. Inoltre, mentre i dati sono codificati NRZI, la sequenza di sincronizzazione ed EoP sono definiti in termini di J / K / SE0 e diventeranno errati in caso di inversione.
avakar,

2
Posso dire per esperienza che scambiando D + / D- si ottiene un'interfaccia USB non funzionale. Ho dovuto rielaborare alcuni prototipi con un hub USB incorporato. Non così divertente.
akohlsmith,

@avakar Grazie per i dettagli. Penso che la risposta abbia coperto la maggior parte di questo brevemente, ma cercherò di aggiungere ulteriori dettagli in modo che sia più chiara.
Travisbartley,

@Andrew Kohlsmith Sono informazioni utili. Se ricordi, ho alcune domande per te. Il dispositivo o l'hub hanno lo scambio di pin? Come si è manifestato l'errore? Quando hai collegato il dispositivo, non è stato riconosciuto o riconosciuto come malfunzionamento? Come hai diagnosticato il problema? Qualsiasi dettaglio sarebbe di aiuto, cercherò di aggiungere le tue informazioni alla risposta.
Travisbartley,

2
@ trav1s Avevo scambiato il D + / D- sul lato mozzo. Il problema si è manifestato quando il dispositivo non veniva visualizzato. La chiave USB mostrerebbe che era alimentata ma non è stata riconosciuta dal computer sul lato a monte dell'hub (che era collegato correttamente all'host). Diagnosi Sono imbarazzato di scrivere, ho passato molto tempo a pensare che fosse un problema di configurazione / software dell'hub. Alla fine ho tracciato i fili ma l'ho fatto per ultimo perché ero convinto che USB fosse come Ethernet e che potesse scambiare automaticamente i pin. Mi sbagliavo. :-)
akohlsmith il

1

Ho visto i dispositivi negoziare a bassa velocità solo quando d + e d- vengono scambiati. Questo era con un dispositivo a piena velocità (12 Mbps) e una porta basata su chipset VIA.


2
Ciò conferma ciò che ha detto @ trav1s su USB 1.x.
Vaibhav Garg,
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.