En un cable USB, ¿está bien intercambiar los cables D+ y D-?

Escuché que D+ y D- son señales diferenciales, ¿importa si las cambio al conectar un dispositivo USB a la computadora?

Pregunta interesante... Válido para todos los protocolos diferenciales válidos... ¡como CAN!

Respuestas (2)

Resumen

Al entrar y salir del estado inactivo, la polaridad es importante y el intercambio de las líneas D+ y D- causará problemas.

Transmisión de datos

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.

Salir del estado inactivo

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.

Entrar en estado inactivo

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.

ingrese la descripción de la imagen aquí

Conclusión

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.

fuente: wikipedia

Edit: gracias a los que comentaron. Agregué énfasis y detalles de sus útiles notas.

Cabe señalar que el host diferencia la velocidad baja/máxima por la línea que se detuvo. Si intercambia las líneas D+/D-, el dispositivo ni siquiera se comunicará a la misma velocidad que el host. Además, aunque los datos están codificados con NRZI, la secuencia de sincronización y el EoP se definen en términos de J/K/SE0 y se volverán incorrectos en la inversión.
Puedo decir por experiencia que el intercambio de D+/D- da como resultado una interfaz USB que no funciona. Tuve que volver a trabajar en algunos prototipos que tenían un concentrador USB incorporado. No es tan divertido.
@avakar Gracias por los detalles. Creo que la respuesta cubrió la mayor parte de eso brevemente, pero intentaré agregar más detalles para que quede más claro.
@Andrew Kohlsmith Es información útil. Si recuerdas, tengo algunas preguntas para ti. ¿El dispositivo o concentrador tenía el intercambio de pines? ¿Cómo se manifestó el error? Cuando conectó el dispositivo, ¿no se reconoció o no se detectó que funcionaba mal? ¿Cómo diagnosticaste el problema? Cualquier detalle ayudaría, intentaré agregar su información a la respuesta.
@trav1s Había cambiado el D+/D- en el lado del concentrador. El problema se manifestó cuando el dispositivo no apareció. La llave USB mostraría que estaba encendida, pero la computadora en el lado ascendente del concentrador (que estaba conectado correctamente al host) no la reconoció en absoluto. Diagnóstico sobre el que me avergüenza escribir, pasé mucho tiempo pensando que era un problema de configuración/software del concentrador. Al final, rastreé los cables, pero lo hice en último lugar porque estaba convencido de que USB era como Ethernet y podía cambiar automáticamente los pines. Estaba equivocado. :-)

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.

Eso corrobora lo que dijo @trav1s sobre USB 1.x.