stm32 CDC USB - Dispositivo desconocido (código de error 43) [cerrado]

Enfrento un problema al hacer una PCB personalizada con STM32F103C8T6 FS CDC , pero toda la historia se veía así.

  1. Hice una pequeña aplicación de prueba usando CubeMX e IAR en una PC barata de China con la misma MCU: en la terminal de Windows pude recibir datos. Por cierto, usé 8MHz XTAL, 1k5 pull up hasta 3.3 en la línea DP sin resistencias en serie.
  2. En la placa personalizada, el mismo código (que puedo descargar a MCU sin ningún problema) y obtengo un dispositivo desconocido en HW Manager en win7.

La misma MCU, la misma aplicación y relojes y dos comportamientos diferentes: ¿qué estoy haciendo mal?


Muéstrenos su esquema y diseño de PCB.
Apuesto a que probablemente el tablero barato fuerza la enumeración que usted no hace y no está listo para enviar los descriptores. Es un problema muy común.
¿Cómo se alimentan ambos dispositivos? Por USB, o si no?
Hola, gracias por la atención. Intentaré publicar esquemas y diseño de PCB por la noche. La única diferencia que puedo encontrar hasta ahora es que en la placa de China hay un conector Micro USB con pin ID soldado a GND y en mi placa uso USB_B sin ese pin y estoy alimentando la placa desde USB. ¿Puede ese cambio causar este efecto?
Fuentes comunes de este error: líneas USB D+ y D- intercambiadas, reloj MCU o configuración de pin incorrecta. El código de error 43básicamente indica que no hay comunicación USB además del pullup en una línea de datos.
¿Cuánto tarda en arrancar tu placa? (después de conectarlo)

Respuestas (1)

Uno de los errores típicos en los dispositivos USB alimentados por bus es la mala gestión de la resistencia pull-up. Su descripción dice: "1.5k pullup to 3.3" , lo que significa que el evento de conexión USB (DP pullup) se verá inmediatamente después de conectarse. Por lo tanto, el host comenzará el proceso de enumeración en 100 ms. Sin embargo, su MCU tardará un tiempo en arrancar, por lo que no estará listo con las respuestas adecuadas y las consultas del host fallarán. Para cuando su MCU esté lista para comunicarse, el host declarará el puerto como inactivo y mostrará un error. Cuando una placa de demostración recibe alimentación externa antes de conectarse al host USB y ya está en funcionamiento, la conexión está bien.

Para evitar este percance, todas las placas de demostración STM acreditadas tienen la resistencia pull-up controlada desde el pin GPIO, generalmente PB2 o PD2. Luego, el pull-up se establece por código solo cuando la pila USB está lista para responder.

La conexión del pin de identificación en el receptáculo Micro-B en el lado del dispositivo USB es intrascendente, está diseñada para un host USB OTG, no para un dispositivo simple.

Gracias por la respuesta, realmente lo aprecio. Ahora tendré algunas pistas para finalmente hacer que esto funcione. Un comentario más de mi parte: en una placa en la que está funcionando USB CDC (mismo MCU), el usb se realiza de la misma manera, solo PU, no HW, el control de PU se ejecuta sin problemas (mismo reloj). De todos modos, probaré algunas opciones e informaré sobre el resultado.
@kaziel ¿Hizo funcionar su STM32 USB?