¿Problema eléctrico con USB? Dispositivo de alta velocidad que no funciona en diseño propio.

3

Descargo de responsabilidad, soy un chico de SW, así que, por favor, no des por sentado nada, y agradecería las explicaciones en términos sencillos :)

Tenemos un diseño personalizado basado en Freescale's i.mx233 , y como referencia, utilizamos un tablero de Olimex llamado Olinuxino. En el Olinuxino, tienen un chip LAN-USB de doble funcionamiento que no es necesario para nuestro diseño (solo necesitamos 1 puerto USB para un dongle WiFi), así que pensamos que podemos eliminarlo y conectar un dispositivo USB directamente a los procesadores. D + y D- líneas.

Debido a un error de diseño independiente, el conector USB que seleccionamos no se puede usar en esta revisión de HW. Pensé que podía verificar el diseño simplemente cortando un cable de extensión USB y soldándolo en el lugar de los conectores, por lo que actualmente se ve así:

foto http://oi57.tinypic.com/wtu7w1.jpg

Ahora, cuando conecto el módulo WiFi al conector, parece que comienza a enumerar correctamente y, al observar la señalización, también parece decente (lo comparé con el panel de referencia y veo mucho lo mismo):

foto 2 http://oi58.tinypic.com/2yvryxl.jpg

Sin embargo, en el lado del software, el controlador para WiFi se queja de que está leyendo mal la identificación del chipset y se niega a cargar:

[    2.390000] ieee80211 phy0: rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1000 with error -       
[    2.400000] ieee80211 phy0: rt2800_probe_rt: Error - Invalid RT chipset 0xc37b, rev 5108 detected
[    2.410000] ieee80211 phy0: rt2x00lib_probe_dev: Error - Failed to allocate device

La parte del esquema para el puerto USB (original):

Yeldiseñorealparaesapartetambiénessimple(enlaimagensolocapasuperior,heocultadotodaslasdemáscapasparamayorclaridad.DibujélatrazadelaseñalDdelacapainferioramano,tengaencuentaqueenlaimagenrealporencimadelarotaciónde180grados):

El exacto mismo paquete de software y la misma mochila en nuestra placa de referencia funcionan, y el controlador se carga ... Comencé a leer la Especificación USB2.0 , y en el capítulo 7, hable sobre la señalización eléctrica, y esta parte me llamó la atención:

  

El funcionamiento a alta velocidad admite la señalización a 480 Mb / s. Para lograr una señalización confiable a este ritmo, el cable es   Terminado en cada extremo con una resistencia de cada cable a tierra. El valor de esta resistencia (en cada cable) es   nominalmente establecido en 1/2 la impedancia diferencial especificada del cable, o 45. Esto presenta un diferencial.   terminación de 90 Ω.

¿He arruinado la señalización ahora con mi puerto USB? Qué significa este código ? Además, ¿habría tenido exactamente el mismo problema con el puerto original ya que solo planeamos conectar las líneas differential impedance , 5V , GND y D+ al conector? ¿O se supone que esta resistencia está dentro de cada extremo de la conexión dentro del silicio? ¿Qué podría estar mal aquí?

Gracias por cualquier consejo!

Editar: Se ha agregado el diseño y la imagen esquemática para mayor claridad

Edición 2 : tiré mi cable de extensión recortado, doblé el conector USB original y pude colocarlo en la pizarra en un ángulo un tanto extraño.

También agregué los controladores necesarios al kernel para las memorias USB, y ahora he verificado que mi memoria USB HighSpeed de 16GB funciona. Durante el arranque se detecta:

[    2.240000] usb 1-1: new high-speed USB device number 2 using ci_hdrc
[    2.430000] usb-storage 1-1:1.0: USB Mass Storage device detected
[    2.440000] scsi0 : usb-storage 1-1:1.0
[    3.460000] scsi 0:0:0:0: Direct-Access     UFD 2.0  Silicon-Power16G PMAP PQ: 0 ANSI: 4
[    3.500000] sd 0:0:0:0: [sda] 30283008 512-byte logical blocks: (15.5 GB/14.4 GiB)
[    3.520000] sd 0:0:0:0: [sda] Write Protect is off
<snip>

El flash en la placa es muy pequeño, pero en la unidad USB puedo copiar un archivo 1GB a otro directorio, y la velocidad es de alrededor de 360KB / seg. La suma MD5 coincide, y no veo ningún problema al utilizar la tarjeta de memoria.

Entonces, supongo que esto significa que ahora algo va mal solo con el dongle WiFi ... es extraño ... Si hubiera corrupción en las líneas D- y DP , ¿no vería también la corrupción durante las transferencias de datos?

Edición final Si bien no hemos podido identificar el problema con un 100% de certeza, al forzar al controlador a que entre en el registro solo funcione en modo 1.1, todos los dispositivos USB funcionan sin problemas, incluido El módulo WLAN. En nuestro siguiente diseño, hemos seguido estrictas reglas de enrutamiento diferencial, y esperamos que este sea el final de nuestros problemas :)

    
pregunta julumme

3 respuestas

2

Es una pregunta difícil para responder ya que esto es más una cuestión de depuración. Pero puedo aportar algunas ideas sobre lo que podrías intentar.

Lo primero que pensé fue que sus conexiones de cable flexible (los cables sueltos de 1-2 cm que salen del cable y se conectan a su placa) pueden ser demasiado largos para una operación de 480 MBps. Ideas para probar:

  • Obliga a tu host a ejecutarse como USB 1.1 (1.5 o 12 MBps). Tal vez pueda ejecutarlo a través de un concentrador alimentado por USB o algo para forzarlo a una velocidad más baja.
  • Use un conector USB real, péguelo al revés o algo así, y haga conexiones realmente cortas y cortas desde las clavijas del conector a la PCB.
  • Tal vez pueda encontrar una forma de cortar la longitud de los cables en espiral a 1/5 o algo en ese orden.
  • Asegúrese de que no está realizando pruebas con la sonda de osciloscopio conectada.
  • Tal vez intente un cable USB realmente corto y realmente largo.
  • Tal vez intente cambiar la temperatura (más cálido hace que los bordes sean más lentos y más fríos los hace más rápidos).

Una nota a algunos comentarios aquí: No se preocupe por la cantidad de vías y la coincidencia de longitud de esas trazas de PCB. Bien hecho, las vías y un poco de desajuste de longitud nunca han sido un problema para USB 2.0. Y esto es insignificante en comparación con lo que haces con los cables flexibles.

Algunos errores generales típicos para verificar incluyen:

  • Sincronización. Verifique que la frecuencia del reloj y la fluctuación estén dentro de las especificaciones, incluidos los PLL.
  • Poder. Verifique (con un osciloscopio BW de 1-2 GHz) que su ondulación Vcc está dentro de las especificaciones, etc.

Tampoco descartaría el software todavía. Busque diferencias, como en los datos de configuración, etc.

Y no te sientas orgulloso de pedir ayuda a un experto en hardware :-)

Actualización: nota sobre la medición de la ondulación de Vcc:

Tomado de mi respuesta a esta pregunta: ¿Cómo verifico que mi riel de alimentación de 3.3v cumpla con los requisitos para un Ember EM357 SoC?

El mejor artículo que conozco que describe cómo realizar esta medición es el siguiente: enlace

En resumen: use un cable coaxial soldado directamente a su placa. Ejecute el cable coaxial 50R en su osciloscopio configurado a una impedancia de entrada de 50R. Seleccione el acoplamiento de CA Un ancho de banda que sea adecuado (mínimo 500 MHz). Y la persistencia infinita.

Si realiza la medición utilizando una sonda de alta impedancia con una larga "cola de cerdo" para la conexión a tierra, es posible que se detecte un ruido adicional no relacionado con el ruido de Vcc. En caso de duda, realice siempre la experiencia nula: toque la punta de la sonda en el punto de tierra, de modo que tanto la punta como la tierra de la sonda toquen el mismo punto en el tablero. Si no obtiene una línea plana, se está recogiendo algo mediante un acoplamiento inductivo en el bucle formado por la sonda y el cable de tierra.

Entonces, ¿tienes demasiado ruido? Supongamos que la hoja de datos de este dispositivo requiere 3.3V +/- 5% para el suministro de Vcc. Eso significa que tienes +/- 165mV como límite. Supongamos que tiene una precisión del 2% de su regulador de 3.3V DC. Y supongamos que tiene una caída de la distribución del 0-1% en las conexiones entre el regulador y el dispositivo (cables, conectores, trazas, filtros, etc.). Eso deja un 2% para el ruido de CA / ondulación o +/- 66mV (132mVpp).

    
respondido por el Rolf Ostergaard
1

Puedes intentar pegar el blindaje del cable USB a la conexión a tierra del USB y ver si eso mejora la situación. El USB de alta velocidad es sensible a cosas como la impedancia del cable.

    
respondido por el Daniel
1

Hola, con respecto a tu pregunta "¿Qué significa esta impedancia diferencial?" La impedancia diferencial de la línea es en realidad la resistencia de la traza de PCB hasta el conector, ya que el USB es diferencial, será una impedancia diferencial. Por lo tanto, una impedancia de pista única de, por ejemplo, D + será de 45 ohmios y la impedancia combinada de D + y amp; D- será 90Ohm, ahora simplemente no puede medir esto con un voltímetro digital simple (DMV), por lo que probablemente no podrá verificar esto a menos que tenga un TDR cerca de usted. Con respecto a su problema, no es probable que sea causado por una falta de coincidencia de impedancia al verlo por primera vez, lo que indica que no parece ser muy malo.

Si tiene preguntas sobre pruebas eléctricas y problemas, siempre puede consultar enlace . Este es un sitio web para mí y algunos de mis colegas escribieron.

¿Podrías compartir una captura de pantalla de tu esquema? Así que podemos echar un vistazo más profundo aquí.

    
respondido por el Jan Claes

Lea otras preguntas en las etiquetas