¿Cómo probar las caídas de USB en STM32F?

Tengo un dispositivo que es realmente extraño, deja caer el USB periódicamente. Por periódicamente me refiero a una base semanal (o quincenal). Al abandonar me refiero a que las ventanas pierden el control del conductor. Los abandonos no son bien tolerados por quienes usan los dispositivos. Lo extraño es que uso un diseño similar en la mayoría de los productos que tenemos (más sobre esto más adelante), por alguna razón este no quiere funcionar bien, algunos de los otros dispositivos funcionan durante meses o años (con el Mismo diseño pero diseño diferente) sin problemas.

Es solo en algunos de los dispositivos , por lo que probablemente descarte el firmware/software.

El USB es 2.0 FS, se ejecuta en un STM32, con un chip de diodo ESD en el medio.

Esquema (D+ y D- y OSC_IN y OSC_OUT (se heredó el diseño del oscilador) van a sus pines correspondientes)

ingrese la descripción de la imagen aquí

Una mejor pregunta sería, ¿cómo pruebo estos abandonos? ¿Existe algún método que pueda monitorear un dispositivo durante largos períodos de tiempo con millones de paquetes pasando y encontrar la fuente del error?

¿Estás seguro de que solo está dejando caer el USB? Considere darle una salida de estado de UART escasa, especialmente en el arranque y registrarlo durante semanas. También alójelo en otro sistema, tanto en hardware diferente como en SO diferente como Linux. Asegúrese de no tener algo en el firmware como un contador de milisegundos de 32 bits que pueda desbordarse, o una pérdida de asignación de memoria, o algo así. Vea si puede determinar si el problema depende del tiempo , del uso o de las condiciones . Además, puede realizar el registro de paquetes USB del lado del host o incluso la detección eléctrica. Pruébelo con un concentrador y sin él.
Solo está en algunos de los dispositivos, así que creo que está relacionado con el hardware.
"con un chip de diodo ESD en el medio" suena muy sospechoso.
¿Captura y registra las excepciones del sistema? (por ejemplo: fallas graves)
ST tiene una nota de aplicación sobre las consideraciones de diseño de USB que encontré útil para STM32F: comm.eefocus.com/media/download/index/id-1010928
¿Qué tipo de dispositivos USB tienes? ¿Tienen un reloj externo basado en cristal para USB PHY, o algún tonto "oscilador interno" estilo FT232?
@AliChen STM32F2 con un oscilador externo, usando el USB 'a bordo'
Como pequeña observación, los límites C13-C14 son demasiado altos (deberían ser 22-33pF) y están en el lado equivocado de R5-R6. Toda la secuencia de componentes es inversa. Las tapas deben estar en el lado IC/PHY (para limitar la velocidad de giro), luego Rs y la protección ESD deben estar primero, cerca del conector USB. Pero estas son cosas pequeñas. ¿Cuánto mide el cable entre el host y los dispositivos?
@AliChen Sí, heredé esa parte del diseño. El cable es un cable de 6 pies con una ferrita. También tenemos un cable pasante en el interior del instrumento a un conector B estándar que se muestra arriba. El escudo no está conectado a tierra, está conectado a la tierra del chasis del dispositivo.
Veo. ¿Tiene algún rastro de alcance de cables D+/D-? ¿El sistema coloca sus dispositivos en modo de suspensión USB alguna vez?
Por cierto, ¿cuál es tu host USB? ¿ORDENADOR PERSONAL? ventanas? Linux? Además, las tapas para proteger son malas, las señales serían susceptibles a la interferencia EM externa, el encendido de la bombilla CFL podría interrumpir la comunicación.

Respuestas (3)

¿Existe algún método que pueda monitorear un dispositivo durante largos períodos de tiempo con millones de paquetes pasando y encontrar la fuente del error?

Sí. El dispositivo se llama "analizador de protocolo USB".

Si supervisa solo el lado del software del host, lo máximo que puede ver es que hubo algún "error de transacción", y el puerto puede o no recuperarse después de la caída. El protocolo USB tiene medios asistidos por hardware para volver a intentar transacciones fallidas, y el software no tiene ninguna visibilidad del "recuento de errores". Por lo tanto, debe identificar la causa raíz del error a nivel físico, en los cables D+/D-.

Hay analizadores USB asequibles, especialmente para la velocidad USB 1.1 (FS 12 Mbps). Se puede configurar un buen analizador para un disparador sofisticado mientras se monitorea el tráfico en un bucle largo, o incluso se registra todo el tráfico hasta la capacidad de su disco duro. Recomendaría un pequeño modelo Mercury T2 de Teledyne/Lecroy , pero otros tipos como Ellisys y Totalphase Beagle están mejorando cada vez más.

Sin embargo, debe tener cuidado, ya que los analizadores son algo invasivos y sus conectores/internos tienen algún efecto sobre la integridad de la señal. En el caso de una conexión inestable y una tasa de error rara, el analizador puede mejorar la señal (y es posible que nunca vea el problema) o puede eliminar la funcionalidad del enlace (lo que será útil para identificar el problema).

En resumen, debe identificar quién tiene la culpa cuando ocurre la caída del dispositivo. Podría ser (a) el dispositivo da respuestas incorrectas a un protocolo USB válido, (b) un problema de integridad de la señal del canal o (c) el hardware host tiene un error en el manejo de algunas peculiaridades del protocolo USB.

Comenzaría con (b) y verificaría si todas las señales en el bus cumplen con las especificaciones básicas de la señal USB: patrón de frecuencia dentro de 2000 ppm, jitter dentro de la norma, los bordes de la señal son monótonos y el ojo de la señal cumple con la máscara del diagrama, en todos sus cables específicos , dispositivos y hosts. Hay procedimientos estándar descritos en el sitio web de USB-IF sobre cómo realizar las pruebas eléctricas dentro del programa de cumplimiento de USB .

Si las señales cumplen con las especificaciones básicas de señales de FS, el analizador de protocolos sería lo siguiente que se implementaría. Si puede ser un desafío configurar el activador adecuado y tener una interpretación correcta de los eventos del bus que conducen a un error. Si no tiene experiencia con analizadores USB, es posible que deba recibir capacitación u obtener un consultor.

Tuve un problema similar con algo en lo que estaba trabajando. Parece que los niveles de señal eran bastante marginales y todo se volvió sensible a la calidad o la longitud del cable USB. Podría comenzar a observar los niveles de señal y tal vez probar con un cable más corto y ver si eso mejora las cosas. No todos los cables USB son iguales: algunos tienen conductores más gruesos para las líneas de datos que otros.

Tuvimos problemas similares en el pasado. El dispositivo serie USB estaría bien en algunas PC durante meses y en algunas perderíamos la comunicación cada semana. Comenzamos con la ejecución de tres dispositivos en dos PC con Windows idénticas (combinación que a veces tendría problemas) y una caja de Ubuntu con un software simple de registro en disco. Después de un tiempo, un cuadro de Windows lo perdió: el puerto simplemente desapareció. La pila de controladores USB de Windows (esto era Win7) es un montón de cosas heredadas que aparentemente no pueden manejar las peculiaridades de los chips FTDI. Entonces, mi sugerencia es ejecutar la prueba en dos configuraciones idénticas + una tercera diferente. Si deja de responder, tiene un problema con la combinación de dispositivo + controlador USB + controlador. De lo contrario, es probable que sea un problema de señal: el monitor USB podría ayudarlo.