Forzar el dispositivo USB para que se ejecute en modo Full Speed

4

Tengo que probar cómo se comporta un dispositivo USB de alta velocidad cuando se ejecuta a velocidad máxima.

Como la velocidad alta funciona a 480 MHz y la velocidad máxima a 12 MHz, pensé que esto sería fácil con un "filtro de paso bajo" que no permite que las altas frecuencias pasen, por lo que el host negociaría automáticamente una velocidad más lenta con el dispositivo.

Abrí un cable USB y soldé un condensador entre Data + y Data, así:

Pero aunque probé varios valores para el condensador, no funcionó.

Cuando conecto 3.3pF, 6.8pF o 12pF, el dispositivo funcionará con Alta velocidad. ¿Cómo probé eso? Conecto una memoria USB y transfiero un archivo grande. La velocidad de transferencia es de 20 Megabyte / s, que es demasiado rápida para la velocidad máxima.

Cuando aumente el condensador a 15pF o más, de repente veo que el dispositivo funciona con Baja velocidad (1.5MHz) o incluso falla completamente (falla la enumeración del dispositivo)

Intenté esto en dos computadoras diferentes. La placa base tiene concentradores USB 2.0 y concentradores USB 3.0. No hay diferencia en bahaviour. Lo intenté en Windows XP y Windows 7.

No hay manera de conseguir la velocidad máxima. Ya sea Alta velocidad o Baja velocidad o nada.

¿Alguien me puede explicar eso? ¿Cómo fuerzo a que el dispositivo funcione a velocidad máxima?

ACTUALIZACIÓN: 9 meses después de hacer esta pregunta (y de ser más experto en dispositivos USB), hoy sé que el USB no tiene un mecanismo de retroceso. Si un dispositivo de alta velocidad no responde como se esperaba, la enumeración del dispositivo simplemente fallará. La computadora no intenta comunicarse con un dispositivo de alta velocidad a toda velocidad después de que haya fallado una negociación de alta velocidad y tampoco el dispositivo vuelve al modo de velocidad máxima. La única forma de forzar la velocidad máxima es usar un concentrador de velocidad completa (USB 1.1), que es muy difícil de encontrar hoy en día.

    
pregunta Elmue

4 respuestas

8

El problema es que el modo FS se negocia durante el evento de restablecimiento de puerto / conexión. Cualquier dispositivo HS señala el evento de conexión tirando de la línea de datos D + tal como lo haría un dispositivo FS. El host, al ver la conexión, inicia el estado "USB_RESET", arrastrando tanto D + como D- a tierra con el controlador de 45 ohmios. Luego, si un dispositivo es HS, emite la señal de "Chirp-K" en el cable D. Un dispositivo HS siempre debe hacer esto, no puede evitar esta fase de señal.

El host reconoce el Chirp-K, y después de una secuencia de chirrido especial, ambos Host y Device reconocen el modo HS. Puede encontrar más detalles AQUÍ .

El problema en su caso es que la supresión de la calidad de la señal en el modo HS no elimina la secuencia de chirridos. Dado que el chirrido se produce a una velocidad de conmutación mucho más baja (~ 10MHz), no se puede suprimir sin dañar el modo de señalización de datos del FS. Es por eso que un simple impedimento de la velocidad de datos HS no funciona.

Hay tres opciones para validar la capacidad de un dispositivo HS para ejecutarse en modo FS:

  1. Tenga un concentrador USB 1.1, como lo sugiere duskwuff;
  2. Obtenga un host USB que solo admita USB 1.1 (sabores de Arduino, Cypress, lo que sea)
  3. Obtenga una PC normal (más antigua) que esté construida alrededor del controlador Intel EHCI y deshabilite la parte EHCI en el Administrador de dispositivos. El controlador UHCI restante (u OHCI en la línea AMD) proporcionará la funcionalidad FS.

CORRECCIÓN: se especifica que la secuencia de chirrido J-K-J-K -... tiene pulsos entre 40us y 60us, consulte la Sección 7.1.7.5. de especificaciones USB 2.0. Todos los diseños lo tenemos en el centro, 50 nosotros. Lo que hace que la frecuencia de viruta a 10 kHz, no a 10 MHz, sea mala. Esta disparidad de frecuencia hace que sea imposible suprimir los chirridos mediante el filtrado dado que la velocidad de señalización del FS es de 6 MHz.

    
respondido por el Ale..chenski
3

Conecte el dispositivo a un concentrador USB 1.1. Todavía están disponibles comercialmente.

    
respondido por el duskwuff
1

@duskwuff tiene una buena solución. La razón por la que su enfoque no funcionó es que la autonegociación USB se basa en las capacidades anunciadas del host, el dispositivo y cualquier concentrador; no se intenta caracterizar la pérdida del cable.

    
respondido por el pericynthion
0

También hay aisladores USB que bloquearán la sacudida inicial de la mano.  Puede encontrarlos aquí .

También adafruit vende paneles de ruptura aquí

    
respondido por el Stevo

Lea otras preguntas en las etiquetas