¿Cuál es la fuente de esta forma en mi diagrama de ojo USB?

3

He diseñado un dispositivo USB alrededor de un STM32F105 . Es un dispositivo CDC de velocidad completa USB 2.0 configurado como un puerto COM virtual que utiliza ST Biblioteca USB . Utiliza el PHY incorporado del STM32 y funciona a 12 Mbps.

Estoy enviando datos en paquetes de 254 bytes. Ocasionalmente (con un promedio de 1 en 17000 paquetes), la computadora host recibe datos erróneos. Generalmente está restringido a un solo byte en el paquete.

Así que estoy viendo las señales usando un Tektronix TDS2025 O-scope (200 Mhz).

La mayoría de las transiciones se ven muy bien:

Peromidiagramadeojodebajatecnologíamuestraalgoinesperado:

Melasarregléparaatraparunadelasformasdeondamalas,quesepareceaesto:

¿Quépodríaestarcausandoesto?Noestoysegurodepordóndeempezarabuscar.

Cuandoconectoeldispositivoporprimeravez,laenumeraciónserealizacorrectamenteyeldiagramadelojosevelimpio.PerounavezqueabroelpuertoCOM(usandoPuTTY,Herculesomisoftwarejavapersonalizado),aparecenlosfallos.EstoyusandounThinkpaddeLenovoconWindows7.

Aquíhayunafotodeldiseño:

ElICdeTVSesun NXP PRTR5V0U2F , y el Detector de cargador es un TI BQ24392 .

Los rastros USB viajan aproximadamente una pulgada en la parte posterior de la placa, luego vuelven a subir y se conectan directamente a las clavijas USB del microcontrolador. Se controlan por impedancia y se ajustan adecuadamente entre sí.

Estoy sondeando desde las almohadillas de soldadura del conector USB hasta el punto de tierra que he marcado en la imagen. La sonda tenía un resorte de tierra corto, no una pinza de cocodrilo larga.

Si más datos ayudarían, hágamelo saber. Además, este es mi primer dispositivo USB y mi primera prueba de diagrama de ojo. Si ve algo incorrecto en mi configuración o suposiciones, hágamelo saber.

    
pregunta bitsmack

3 respuestas

4

No parece que esto sea un problema de hardware. La forma de onda escalonada parece que se está produciendo una reflexión o esto ocurre en la transición cuando el host y el dispositivo cambian los roles de emisor y receptor. En cualquier caso, la señal parece lo suficientemente buena como para ser decodificada correctamente.

Ayudaría si pones el disparador de tu alcance en algún lugar de la pantalla. Con el disparador fuera de la pantalla, es posible que tengas más fluctuaciones aparentes de lo que realmente está en un bit.

Necesitas mirar tu software cuidadosamente. Lo más probable es que tenga un error en algún lugar que corrompa o falla o agrega un byte cuando ocurre un caso particular en una esquina. Esto podría ser, por ejemplo, durante la disputa por el FIFO cuando está un byte por debajo de lleno o algo así. Si se accede a la FIFO mediante código de interrupción y primer plano, entonces este es exactamente el tipo de problema difícil de encontrar que se espera cuando la lógica de bloqueo no es del todo correcta.

    
respondido por el Olin Lathrop
5

Esta es la señal de FS absolutamente perfecta. Al parecer, el OP sondea las señales en el extremo del dispositivo del cable. Las señales del servicio fijo no están terminadas por el estándar USB. Todas las señales entrantes (controladas por el host) están bien, ya que se miden en el punto de destino. Sin embargo, cuando el dispositivo retrocede un paquete de intercambio de manos ocasional (ACK corto o NAK), el controlador llega a la línea de transmisión. La señal de medio ampiltude (shouder) se desarrolla hasta que vuelve la reflexión desde el extremo del host. Este es un comportamiento absolutamente normal de las señales en la línea de transmisión no terminada. Como veo, el retraso de ida y vuelta es de aproximadamente 20 ns, o 10 ns de una vía. Esto indica que el cable en uso tiene una longitud de aproximadamente 2 m, o un cable estándar de 6 pies. Si el OP probara el bus en el extremo del host, vería una imagen opuesta. Sólo mi 2c.

    
respondido por el Ale..chenski
2
  

Estoy enviando datos en paquetes de 254 bytes. Ocasionalmente (con un promedio de 1 en 17000 paquetes), la computadora host recibe datos erróneos. Generalmente está restringido a un solo byte en el paquete.

¿Usas un FIFO? Si es así, verifique su código fuente: hay ejemplos FIFO incorrecto por ahí que realmente permiten leer un byte "malo" .

La "forma de onda incorrecta" todavía está dentro de las especificaciones. Probablemente veas un reflejo cuando el PC envía datos. Esto será mejor cuando use un concentrador o use los puertos de la parte posterior de la PC de escritorio, y peor en los puertos del lado frontal que están conectados por cables más largos dentro de una PC.

    
respondido por el Turbo J

Lea otras preguntas en las etiquetas