Escuché que D+ y D- son señales diferenciales, ¿importa si las cambio al conectar un dispositivo USB a la computadora?
Al entrar y salir del estado inactivo, la polaridad es importante y el intercambio de las líneas D+ y D- causará problemas.
Los datos USB están codificados con NRZ de modo que "Uno" se representa sin cambios en el nivel físico y "Cero" se representa con un cambio en el nivel físico (consulte la figura a continuación). Por lo tanto, invertir la señal (por ejemplo, intercambiando D+ y D-) no produce ningún cambio funcional durante la transmisión de datos. Pero puede haber problemas antes y después de la transmisión de datos que pueden interrumpir la comunicación con el dispositivo.
El host incluye resistencias desplegables de 15 kΩ en cada línea de datos. Cuando no hay ningún dispositivo conectado, ambas líneas de datos bajan al estado denominado "cero de un solo extremo" (SE0 en la documentación de USB) e indica un restablecimiento o una conexión desconectada. Un dispositivo USB eleva una de las líneas de datos con una resistencia de 1,5 kΩ. Esto domina una de las resistencias desplegables en el host y deja las líneas de datos en un estado inactivo llamado "J". Para USB 1.x, la elección de la línea de datos indica de qué tasas de señal es capaz el dispositivo; los dispositivos de ancho de banda completo elevan D+, mientras que los dispositivos de bajo ancho de banda elevan D−.
Si bien los datos están codificados con NRZI, la secuencia de sincronización y EoP se definen en términos de estados fijos (J/K/SE0). Cuando se cambian D+ y D-, el estado J se cambia con K y SE0 sigue siendo SE0 (ambas líneas bajas). Entonces, la secuencia de sincronización y el EoP se volverán incorrectos en la inversión. En USB 1.x, si se intercambian D+ y D-, los dispositivos de ancho de banda completo se reconocen como de ancho de banda bajo y viceversa. Entonces, el dispositivo ni siquiera se comunicará a la misma velocidad que el host.
El final de un paquete USB, denominado EOP (fin de paquete), se indica mediante el transmisor que activa 2 tiempos de bit de SE0 (D+ y D−, ambos por debajo del máximo) y 1 tiempo de bit del estado J. Después de esto, el transmisor deja de controlar las líneas D+/D− y las resistencias pull up antes mencionadas lo mantienen en el estado J (inactivo).
Con un controlador intercambiado D+/D-, el host verá la secuencia (SE0, SE0, K) en lugar de la correcta (SE0, SE0, J). Es posible que el host no reconozca el final del paquete, lo que causaría problemas.
Si el dispositivo y el host se adhieren estrictamente a las especificaciones USB, el intercambio de los pines D+ y D- resultará en una falla. Es concebible que el diseñador del host haya previsto tal modo de falla y haya incorporado compatibilidad para él. Pero ya sea que un cable intercambiado sea o no funcional en la práctica, ciertamente no cumpliría con las especificaciones.
Otro miembro, Andrew Kohlsmith, experimentó esto cuando los pines de un concentrador USB se intercambiaron accidentalmente. El problema se manifestó como dispositivos conectados que no aparecían. El dispositivo USB mostraría que estaba encendido, pero la computadora en el lado ascendente del concentrador (que estaba conectado correctamente al host) no lo reconoció en absoluto.
Edit: gracias a los que comentaron. Agregué énfasis y detalles de sus útiles notas.
He visto dispositivos negociar a baja velocidad solo cuando se intercambian d+ y d-. Esto fue con un dispositivo de velocidad completa (12mbps) y un puerto basado en chipset VIA.
Cisne y