Descargo de responsabilidad, soy un tipo SW, así que no des nada por sentado, y agradecería explicaciones en términos sencillos :)
Tenemos un diseño personalizado basado en Freescale's i.mx233
, y como referencia usamos una placa de Olimex llamada Olinuxino. En el Olinuxino, tienen un chip LAN-USB de funcionamiento dual que no es necesario para nuestro diseño (solo necesitamos 1 puerto USB para un dongle WiFi), por lo que pensamos que podemos quitarlo y conectar un dispositivo USB directamente a los procesadores Líneas D+ y D-.
Debido a un error de diseño por separado, el conector USB que seleccionamos no se puede usar en esta revisión de HW. Pensé que podrí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í:
Ahora, cuando conecto el módulo WiFi al conector, parece comenzar a enumerar correctamente y, al observar la señalización, también se ve decente (lo comparé con la placa de referencia y se ve muy parecido):
Sin embargo, en el lado del software, el controlador de WiFi se queja de que está leyendo mal la ID del conjunto de chips 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 esquemática del puerto USB (original):
Y el diseño real para esa parte también es simple (en la imagen solo la capa superior, he ocultado todas las demás capas para mayor claridad. Dibujé a mano el rastro de la señal D de la capa inferior, tenga en cuenta que en la imagen real de arriba se gira 180 grados):
Funciona exactamente el mismo paquete de software y el mismo dongle en nuestra placa de referencia, y el controlador se carga. Empecé a leer la Especificación USB2.0 , y en el capítulo 7, hablan sobre la señalización eléctrica, y esta parte me llamó la atención:
La operación de alta velocidad admite señalización a 480 Mb/s. Para lograr una señalización confiable a esta velocidad, el cable se termina en cada extremo con una resistencia de cada cable a tierra. El valor de esta resistencia (en cada cable) se establece nominalmente en la mitad de la impedancia diferencial especificada del cable, o 45 Ω. Este presenta una terminación diferencial de 90 Ω.
¿He estropeado la señalización ahora con mi puerto USB? ¿Qué differential impedance
significa esto? Además, ¿ habría tenido exactamente el mismo problema también con el puerto original ya que estábamos planeando solo conectar las líneas 5V
, GND
y 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í?D+
D-
¡Gracias por cualquier consejo!
Editar: diseño agregado e 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 el tablero en un ángulo un poco extraño.
También agregué los drivers necesarios al kernel para las memorias USB, y ya verifiqué 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 de 1 GB a otro directorio y la velocidad es de alrededor de 360 KB/seg. La suma MD5 coincide y no veo ningún problema al usar 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 DP
y DM
, ¿no vería también corrupción durante las transferencias de datos?
Edición final Si bien no hemos podido identificar el problema con 100% de certeza, al forzar el controlador a través del registro para que solo funcione en modo 1.1, todos los dispositivos USB funcionan sin problemas, incluido el módulo WLAN. En nuestro próximo diseño, hemos seguido estrictas reglas de enrutamiento diferencial y, con suerte, este será el final de nuestros problemas :)
Es una pregunta difícil de responder , ya que se trata más de una cuestión de depuración. Pero puedo aportar algunas ideas sobre lo que podría intentar.
Lo primero que pensé fue que sus conexiones flexibles (los cables sueltos de 1-2 cm que salen del cable y se conectan a su placa) podrían ser demasiado largas para una operación de 480 MBps. Ideas para probar:
Una nota para algunos comentarios aquí: no se preocupe por la cantidad de vías y la coincidencia de longitud de esos rastros 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 comparado con lo que haces con las coletas de cable.
Algunos errores generales típicos para verificar incluyen:
Además, no descartaría el software todavía. Busque diferencias, como en los datos de configuración, etc.
Y no se enorgullezca 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 SoC Ember EM357?
El mejor documento que conozco que describe cómo realizar esta medición es este: http://www.electrical-integrity.com/Quietpower_files/Quietpower-21.pdf
En resumen: use un cable coaxial soldado directamente a su placa. Ejecute el cable coaxial 50R en su osciloscopio configurado con una impedancia de entrada de 50R. Seleccione acoplamiento AC. Un ancho de banda que sea adecuado (mínimo 500 MHz). Y persistencia infinita.
Si realiza la medición con una sonda de alta impedancia con una "cola de cerdo" larga para tierra, es posible que tenga un ruido adicional no relacionado con el ruido Vcc recogido. En caso de duda, siempre realice el experimento nulo: toque la punta de la sonda con 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, el acoplamiento inductivo capta algo en el bucle formado por la sonda y el cable de tierra.
Entonces, ¿tienes demasiado ruido? Suponga que la hoja de datos de este dispositivo requiere 3.3V +/-5% para el suministro de Vcc. Eso significa que tiene +/- 165 mV como límite. Supongamos que tiene una precisión del 2 % de su regulador de CC de 3,3 V. Y supongamos que tiene una caída de 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/ondulación de CA o +/-66 mV (132 mVpp).
Puede intentar conectar 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 delicado con cosas como la impedancia del cable.
Hola. Con respecto a tu pregunta "¿Qué significa esta impedancia diferencial?" La impedancia diferencial de la línea es en realidad la resistencia del circuito impreso hasta el conector, dado que el USB es diferencial, será una impedancia diferencial. Entonces, una impedancia de una sola pista de, por ejemplo, D + será de 45 ohmios y la impedancia combinada de D + y D- será de 90 ohmios, ahora muy rápido, no puede medir esto con un simple voltímetro digital (DMV) por lo que probablemente no lo hará podrá verificar esto a menos que tenga un TDR en algún lugar cerca de usted. Con respecto a su problema, no es probable que sea causado por un desajuste de impedancia, una primera mirada le indica que no parece ser muy malo.
Si tiene preguntas sobre pruebas y problemas eléctricos, siempre puede consultar http://www.testusb.com/, este es un sitio web que escribimos algunos de mis colegas y yo.
¿Podría compartir una captura de pantalla de su esquema? Así que podemos echar un vistazo más profundo aquí.
MarkU
MarkU
julumme
julumme
MarkU
julumme
MarkU
julumme
MarkU