Dispositivo USB STM32L4 con detección VBUS

Estoy tratando de hacer que la aplicación CDC de muestra generada por CubeMX funcione en la placa IoT STM32l475VG .

Siguiendo un documento de ST Community, pude configurar correctamente el reloj y la aplicación CDC sin VBus Sensing funciona perfectamente bien. Usé MSE recortado por LSE como se sugiere en el documento.

Sin embargo, me gustaría obtener la misma aplicación con la misma configuración de reloj en la misma placa de desarrollo que se ejecuta con VBus Sensing ON y no funciona en absoluto. Esta vez, el PC ni siquiera ve el dispositivo.

Cuando VBus Sensing está activado, incluso HAL_PCD_IRQHandler no se activa al conectarse.

Necesito VBus Sensing ya que en mi aplicación real estamos usando el uC en un dispositivo autoalimentado.

Estoy probando todos estos experimentos bajo el supuesto de que HW en la placa de desarrollo es compatible con VBus Sensing, ya que con las hojas de datos no puedo leer que se requieren cambios de HW.

¿Es realmente seguro asumir que la aplicación USB CDC de muestra debería funcionar con la detección VBus ENCENDIDA sin modificar el HW de la placa de desarrollo?

Con la descripción mencionada en el documento, tengo la sensación de que VBus Sensing está deshabilitado intencionalmente por una razón muy específica. ¿Es que las configuraciones del reloj se tienen que hacer de forma diferente cuando está encendido?

¿Alguien puede arrojar algo de luz sobre esto?

Aquí falta información: ¿cuáles son las diferencias exactas entre el diseño de detección VBUS (que no funciona) y el diseño de detección sin vbus (que funciona, como usted describe)? ¿Está en tu código? ¿Está en la configuración de los puentes de la placa? ¿Está en la forma en que enciende su tablero? Por cierto, ¿cómo se alimenta la placa y cuáles son las configuraciones de los puentes?
En realidad, estoy alimentando la placa a través de ST-Link en ambos casos en los que VBus está habilitado y deshabilitado, pero intentaré lo que sugiere Ali Chen.
Como comenté para la respuesta de Ali Chen, es básicamente un problema con BCDy no con VBus Sensing. El problema es que cada vez que VBus Sensingse habilita en CubeMX, BCDtambién se habilita automáticamente. Sin embargo, pude ejecutar una aplicación de trabajo solo con VBus Sensinghabilitado.

Respuestas (1)

La detección de VBUS es una característica imprescindible para la interfaz USB esclava autoalimentada, para evitar el voltaje de retorno en el cable D+ hasta que el cable uB esté enchufado y el VBUS esté presente. Esto no tiene nada que ver con los relojes, los relojes no deberían tener diferencia en ambos casos.

El kit de descubrimiento STM32L4 es un dispositivo IoT/SoC bastante sofisticado. Tiene muchas opciones, función USB OTG compleja, alimentado por batería, autoalimentado, alimentado por ST-LINK, etc. Para que funcione el sentido VBUS, al menos no debe haber puentes en el encabezado JP4 2X5, y la señal de sentido USB_OTG_FS_VBUS ya está cableada in. Lo único que parece extraño: VBUS tiene + 5 V y va directamente a GPIO de MCU de bajo voltaje sin ninguna traducción de nivel. Podría ser tolerante a 5V, pero extraño.

Por lo tanto, es probable que el problema esté en la configuración del software que maneja el pin USB_OTG_FS_VBUS y habilita la pila USB.

En realidad profundicé más en este tema. Parece que cuando habilito VBus Sensing en CubeMX, también habilita BCD (Detección de cargador de batería). Desactivé manualmente BCD después y el código generado (donde solo VBus está habilitado y BCD está deshabilitado) parece funcionar bien. Podría confirmar eso USBD_LL_DevConnectedy USBD_LL_DevDisconnectedlas devoluciones de llamadas se solicitan correctamente en la conexión/desconexión del dispositivo. Con estos resultados, parece que realmente es un problema con BCD.
Traté de quitar el puente J4 como mencionaste, pero no hace ninguna diferencia.