Ho sentito che D + e D- sono segnali differenziali, importa se li scambio quando si collega un dispositivo USB al computer?
Ho sentito che D + e D- sono segnali differenziali, importa se li scambio quando si collega un dispositivo USB al computer?
Risposte:
Quando si entra e si esce dallo stato inattivo, la polarità è importante e lo scambio delle linee D + e D causerà problemi.
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.
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.
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.
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).
Modifica: grazie a coloro che hanno commentato. Ho aggiunto enfasi e dettagli dai tuoi utili appunti.
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.