¿Cuál es la forma correcta de implementar hardware USB?

1

Tengo algunos problemas con mi hardware USB que se comunica desde mi microcontrolador STM32F4 a una computadora. Tengo problemas con ciertas configuraciones de computadora, con algunos tipos de placa base que el USB se desconecta con frecuencia, con otros tipos de placa base la conexión es estable. Leyendo en algunos lugares, me di cuenta de que esto podría ser causado por la impedancia de la línea.

Actualmente utilizo resistencias 22R en las líneas USB_DM y USB_DP. Decidí quitar estas resistencias y dejar la línea con aproximadamente 0R y también colocar una resistencia de pull-up en la línea USB_DP. Esto solucionó mi problema en algunas configuraciones de computadora desconectadas. Pero me gustaría saber cuál es el hardware correcto para no tener problemas de desconexión entre el microcontrolador y la computadora.

Abajo en la primera imagen está el primer hardware que utilicé. La segunda imagen luego muestra los cambios que hice para poder operar USB.

Edición 1: el conector USB sigue siendo el mismo.

    
pregunta Eduardo Cardoso

3 respuestas

3

La forma correcta de implementar hardware USB es seguir TODAS las recomendaciones del fabricante. Si un desarrollador de hardware no tiene experiencia con implementaciones de USB, la mejor manera es observar los esquemas y el diseño de las placas / kits de desarrollo.

En este caso particular, la implementación tiene varias deficiencias. En primer lugar, se debe tener en cuenta que se trata de un dispositivo de velocidad completa, y los efectos de la línea de transmisión (y, por lo tanto, la terminación de la fuente) desempeñan un papel secundario. Sin embargo, para "jugar bien", el fabricante usa resistores de la serie 22R, aparentemente para compensar la deficiencia del controlador eléctrico común a la IP de implementación de FS PHY barata. Este esquema es de la placa de desarrollo Olimex: TodoslosesquemasdeaplicaciónquehevistoparaSTM32Fxxusan22R.

Unacosaesclara:22RpullupenD+enelsegundoesquemaesABSOLUTAMENTEinapropiado.

Ensegundolugar,siesteesundiseñosoloparadispositivos,debehaberdoscosas:

  1. VBUSdelconectorTipoBdebeiraalgúnpindeE/Scomo"OTG_FS_VBUS" para que el sistema pueda detectar la presencia de VBUS en el cable conectado, y

  2. El condensador VBUS debe ser más de 1 uF pero menos de 10 uF.

Otro detalle es que el circuito de protección contra ESD debe tener una polarización de 3.3V, no de + 5V.

Sin embargo, estos son detalles menores que no son críticos para el funcionamiento del dispositivo y la estabilidad de la interfaz.

Dada la vaga descripción de los problemas de "desconexión frecuente" con "ciertos hosts" pero no con otros, me atrevería a suponer que el problema es que el reloj de la interfaz USB está fuera del alcance. Diferentes hosts USB pueden tener diferentes tolerancias a la desviación de frecuencia de USB, y esta es la causa más común que se pasa por alto la inestabilidad de la interfaz.

Para asegurarse, debe ejecutar la prueba de diagrama de ojo en su puerto USB de la placa STM32F. Hay documentos sobre cómo realizar esta prueba, dependiendo del equipo que tenga. Google para {medida de diagrama de ojo usb}.

Las especificaciones USB exigen una desviación máxima de la velocidad de datos de 12 Mbps en + -2000 ppm. Algunos hosts pueden tolerar + -5000 ppm, unos 2200ppm. Es muy probable que el oscilador de cristal del sistema no esté sintonizado correctamente y que el reloj de la interfaz esté bastante apagado. El comportamiento típico es que todo puede estar bien en el proceso de enumeración donde los paquetes USB son cortos, pero los paquetes de datos más largos perderán la sincronización y la corrupción de los datos seguirá.

En general, cuando alguna interfaz se comporta de manera inestable, lo primero es asegurarse de que las amplitudes y frecuencias de la señal estén dentro de las especificaciones de la interfaz. La "ingeniería aleatoria", como la sustitución de resistencias o el empuje de pull-ups locos, generalmente no sirve de nada.

    
respondido por el Ale..chenski
0

Una cosa que no está clara en su esquema es si está usando los 5V de la computadora para alimentar su circuito MCU. Si es así, puede estar sobrecargando el puerto dibujando más actual de lo permitido. Algunas computadoras tendrán un sensor de corriente en su conexión de suministro de 5 V, lo que causará una desconexión si la corriente supera la permitida. La carga permitida típica desde el puerto host de una computadora es de 500 mA.

Por extraño que parezca, hay muchas computadoras que no ponen limitadores de corriente en la alimentación de 5 V a sus conexiones de tipo A. Si tiene un concentrador USB entre la computadora y el dispositivo MCU, existe la posibilidad de que el concentrador tenga estos detectores de límite de corriente en sus conectores USB. Pero una vez más, no todos los centros están equipados con estos, especialmente aquellos que son muy baratos. Así que ten cuidado.

Otra cosa que no está clara es el tipo de conector que está utilizando para el USB. Una conexión de computadora típica sería un conector de tipo A y luego un cable de tipo A a SomeType-B se usaría para conectarse al dispositivo de destino (que en este caso sería su subsistema MCU). En su circuito modificado, muestra un conector USB A que no sería correcto. En su lugar, elija un conector Tipo B, Mini B o Micro B. Lo extraño es que su esquema original parecía mostrar un conector SomeType-B.

    
respondido por el Michael Karas
0

No deben ser necesarias ni series, ni pull-up.

Si eliminó las resistencias en serie y colocó derivaciones de 0 ohmios, esto podría crear un problema. Tener buenos rastros rectos es bueno para el USB, a pesar de que no es un diseño de RF.

¿Por qué tienes dos pares de condensadores? Si las huellas son cortas (¡lo que debería ser el caso!), 20uF es demasiado.

Si las huellas son largas, debes asegurarte de que tienen una impedancia coincidente, y esto se aplica a todo el recorrido desde el socket hasta la MCU.

    
respondido por el Maple

Lea otras preguntas en las etiquetas