Depuración de USB remote wakeup y suspend/resume
Cómo depurar USB remote wakeup, fallos de suspend/resume, desconexiones por selective suspend, wake events perdidos, bugs de power management y señalización de resume con capturas USB.
Los bugs de USB power management son difíciles de diagnosticar porque el dispositivo puede funcionar perfectamente mientras el sistema está activo y fallar solo tras idle, sleep, selective suspend, dock sleep, cierre de la tapa del portátil o apagado del monitor. Los usuarios buscan "USB remote wakeup not working", "USB selective suspend disconnect", "USB device does not wake computer", "USB resume failure", "USB suspend resume bug" y "HID keyboard wake from sleep not working".
Bus Scope ayuda porque suspend y resume son eventos a nivel de bus, no solo errores de aplicación. Necesitas ver si el host suspendió el dispositivo, si se habilitó remote wakeup, si el dispositivo señaló el resume, si el host reanudó el tráfico y si el dispositivo reenumera en lugar de hacer resume.
Qué significa remote wakeup
Remote wakeup permite a un dispositivo USB suspendido pedir al host que reanude la comunicación. Ejemplos habituales:
- El teclado despierta un escritorio en sleep.
- El ratón despierta un portátil del idle.
- El botón del dock despierta una workstation.
- El escáner de códigos despierta un kiosko.
- Un controlador industrial despierta un panel PC.
- Un sensor HID despierta un host tras un evento externo.
Remote wakeup no es simplemente "el dispositivo tiene power". El host tiene que permitirlo, el dispositivo tiene que anunciar el soporte, la feature tiene que estar habilitada y la señalización de resume tiene que ocurrir en el momento correcto.
Síntomas habituales
Los problemas de remote wakeup y suspend aparecen como:
- El dispositivo va hasta que el PC se duerme.
- El dispositivo no despierta al ordenador.
- El dispositivo despierta el sistema justo después del suspend.
- El dispositivo desaparece tras el resume.
- El dispositivo reenumera con una dirección nueva.
- Se pierde input HID tras el idle.
- El dispositivo serie deja de mandar tras selective suspend.
- El dispositivo de audio o cámara vuelve del sleep sin datos.
- El firmware solo se recupera tras desenchufar y volver a enchufar.
Esos síntomas suelen echarse a los drivers, pero la captura puede enseñar un problema de estado de power del firmware.
Evidencia de descriptor y de feature
El configuration descriptor puede anunciar la capacidad de remote wakeup. El host puede entonces habilitar o deshabilitar la feature de remote wakeup. Una traza útil de diagnóstico USB debería responder:
- ¿El dispositivo anuncia remote wakeup?
- ¿El host mandó
SET_FEATURE(DEVICE_REMOTE_WAKEUP)? - ¿El host limpió después la feature?
- ¿Pasó el suspend tras el idle?
- ¿El dispositivo intentó señalizar el resume?
- ¿El host reanudó las transferencias normales?
Sin esos hechos, el diagnóstico es pura suposición.
Selective suspend
Selective suspend permite al sistema operativo suspender un dispositivo USB inactivo sin dormir el sistema entero. Ahorra energía, pero expone bugs del firmware.
Patrones de fallo:
- El dispositivo entra en bajo consumo pero no restaura el estado del endpoint.
- El firmware pierde el estado pendiente del interrupt IN.
- El dispositivo hace NAK para siempre tras el resume.
- El host resetea el dispositivo tras el timeout.
- La aplicación ve timeout o eliminación del dispositivo.
- El dispositivo compuesto reanuda una interfaz pero no otra.
Quien busca suele escribir "USB selective suspend random disconnect" porque el dispositivo parece desconectarse aunque el evento real sea un fallo de suspend/resume.
Resume frente a re-enumeración
Tras un sleep hay dos desenlaces muy distintos:
- Resume: el mismo dispositivo continúa con la configuración existente.
- Re-enumeración: el host resetea y enumera el dispositivo de nuevo.
La re-enumeración puede ser aceptable tras una desconexión física, pero es sospechosa tras un suspend normal. Puede romper aplicaciones que mantienen handles abiertos, nombres de puerto serie, paths HID o sesiones de captura de cámara.
Bus Scope debería ayudar a identificar si la traza contiene tráfico de resume normal o una nueva secuencia de enumeración con GET_DESCRIPTOR, SET_ADDRESS y SET_CONFIGURATION.
Wake events perdidos
A veces el dispositivo ve el evento externo pero el host no despierta. Las causas incluyen:
- Remote wakeup no anunciado.
- Remote wakeup no habilitado por el host.
- El dispositivo manda resume demasiado pronto.
- El dispositivo manda resume demasiado tarde.
- El hub bloquea o maneja mal la señalización de wake.
- La BIOS o la política de wake del SO deshabilita el puerto.
- El firmware del dispositivo entra en un sleep más profundo de lo esperado.
- El evento ocurre antes de que el suspend termine.
La evidencia a nivel de paquete no sustituye a la política de power del SO, pero acota la pregunta. ¿Tenía permiso el dispositivo para despertar al host, e intentó hacerlo?
Wake inmediato tras suspend
El problema opuesto también es habitual: el sistema suspende y se despierta al instante. Los dispositivos USB pueden causarlo cuando señalan wake por input obsoleto, estado de interrupt ruidoso, bugs de debounce o firmware que trata el suspend como evento nuevo.
Evidencia a recoger:
- Último interrupt report antes del suspend.
- Si el host habilitó wake.
- Timing entre suspend y resume.
- Clase e interfaz del dispositivo.
- Si el mismo endpoint tenía datos pendientes.
- Si el evento se repite en cada intento de suspend.
Es especialmente común con teclados, ratones, paneles táctiles, game controllers y dispositivos HID a medida.
Checklist de depuración
Usa este proceso:
- Captura la enumeración desde el plug-in.
- Confirma la capacidad de remote wakeup en los descriptores.
- Comprueba si el host habilita remote wakeup.
- Apunta el periodo de idle antes del suspend.
- Identifica el timing del suspend.
- Busca señalización de resume o tráfico de resume del host.
- Separa resume de una re-enumeración completa.
- Revisa el comportamiento del endpoint tras el resume.
- Compara el mismo dispositivo en puerto directo y a través de un hub.
- Conserva los paquetes pre-suspend y post-resume.
Diagnóstico final
Los bugs de remote wakeup y suspend/resume USB son problemas de protocolo de estado de power. La evidencia útil es la capacidad del descriptor, la selección de feature del host, el timing del suspend, la señalización del resume, la recuperación del endpoint y si el host reanudó o reenumera el dispositivo.
Bus Scope ayuda a hacer visible esa evidencia para que "USB wake no va" se vuelva un diagnóstico concreto en lugar de un bucle de echar la culpa al driver.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Prueba del contrato USB para «Depuración de USB remote wakeup y suspend/resume»
La respuesta directa es que STALL, timeout o reset no explica por sí solo la causa. Primero demuestra que el proveedor observa el dispositivo correcto; después lee el contrato de transferencia: tipo, dirección, recipient, wValue, wIndex, longitud declarada y real, status y estado anterior y posterior. En «Depuración de USB remote wakeup y suspend/resume», relaciona la conclusión con la primera transacción que difiere de un caso bueno.
| Límite | Qué comparar | Decisión útil |
|---|---|---|
| Plataforma | proveedor, permiso, Root Hub o usbmon/XHC20 | ¿Llegan records de la conexión correcta? |
| Setup | bmRequestType, bRequest, wValue, wIndex, wLength | ¿El host envía la petición prevista? |
| Data | dirección, longitud y bytes retenidos | ¿El payload cumple el contrato? |
| Status | ACK, STALL, timeout o cancellation | ¿Dónde termina la transacción? |
| Estado | configuration, interface, alternate setting, endpoint halt | ¿El dispositivo estaba preparado? |
Empieza antes de reset y enumeración y conserva descriptors, SET_CONFIGURATION, SET_INTERFACE y el comando previo al fallo. Un filtro estrecho de endpoint puede ocultar el control transfer decisivo. Ejecuta una sola acción USB documentada por prueba y cambia solo firmware, driver, puerto, cable, comando o timing.
¿Cómo se escribe una respuesta citable?
Indica la petición observada, sus campos setup, la respuesta y el contexto anterior; propone después una prueba con un solo cambio. Bytes no retenidos por el límite de captura no prueban packet loss. La proximidad entre command y reset demuestra correlación, no causa sin repetición o transición de estado.
¿Cuándo vale una comparación?
Mantén VID/PID, firmware, speed, topología, proveedor, filtro y trigger. Compara fases USB semánticas y no frame numbers entre usbmon y USBPcap. Anota inicio, final, versión, OS, conexión y checksum. Revisa la solución de problemas de Bus Scope.
Los propietarios Semrush siguen separados: free USB analyzer en la página de producto, best USB protocol analyzer en la comparación y USB descriptor viewer en la guía de descriptors. Esta página de soporte no recibe volumen o KD inventado.
<!-- bus-scope-localized-transaction-foundation-v1:end --><!-- multilingual-blog-closeout:start -->Respuesta directa y límite de aceptación
La respuesta breve a «Depuración de USB remote wakeup y suspend/resume» es: Cómo depurar USB remote wakeup, fallos de suspend/resume, desconexiones por selective suspend, wake events perdidos, bugs de power management y señalización de resume con capturas USB. Trate esa frase como un resultado que debe comprobarse, no como una promesa para cualquier entrada, dispositivo, proyecto o entorno. Un resultado completo registra estado inicial, acción exacta, salida visible y condición que demuestra que la tarea terminó en Bus Scope.
Procedimiento basado en evidencia
Empiece con un caso pequeño y repetible antes de cambiar un proyecto completo. Anote versión de la aplicación, sistema operativo, identidad de entrada o dispositivo, ajustes relevantes y resultado esperado. Ejecute una acción deliberada, conserve la primera transición inesperada y compárela con un caso conocido cuando exista. Cambiar varios controles a la vez oculta qué condición creó o corrigió el problema.
Punto de control 1: Depuración de USB remote wakeup y suspend/resume
Cierre «Depuración de USB remote wakeup y suspend/resume» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 2: Cómo depurar USB remote wakeup, fallos de suspend/resume, desconexiones por selective susp
Para «Cómo depurar USB remote wakeup, fallos de suspend/resume, desconexiones por selective suspend, wake events perdidos, bugs de power management y señali», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Punto de control 3: Qué significa remote wakeup
Cierre «Qué significa remote wakeup» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 4: Síntomas habituales
Para «Síntomas habituales», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Punto de control 5: Evidencia de descriptor y de feature
Cierre «Evidencia de descriptor y de feature» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 6: Selective suspend
Para «Selective suspend», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Punto de control 7: Resume frente a re-enumeración
Cierre «Resume frente a re-enumeración» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 8: Wake events perdidos
Para «Wake events perdidos», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Punto de control 9: Wake inmediato tras suspend
Cierre «Wake inmediato tras suspend» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 10: Checklist de depuración
Para «Checklist de depuración», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Matriz de aceptación
| Punto | Evidencia que conservar | Condición de aprobado |
|---|---|---|
| Depuración de USB remote wakeup y suspend/resume | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Cómo depurar USB remote wakeup, fallos de suspend/resume, desconexiones por selective suspend, wake events perdidos, bug | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Qué significa remote wakeup | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Síntomas habituales | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Evidencia de descriptor y de feature | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Selective suspend | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
Aislamiento, recuperación y entrega
Deténgase en el primer límite que falla. Conserve fuente, proyecto, sesión o captura, duplíquelo antes de una edición destructiva y cambie una variable por experimento. Repetir un flujo amplio después de varios cambios puede dar otro resultado sin explicar la causa.
Separe ausencia de evidencia de evidencia de ausencia. Una vista vacía puede indicar entrada, alcance, filtro, permiso, dispositivo, intervalo o estado equivocado. Verifique adquisición o importación antes de interpretar el decoder, editor, informe o exportación.
Antes de entregar, reabra el artefacto y revise inicio, punto de decisión y final. Registre versión, plataforma, configuración, expectativa, observación y reproducción mínima. Elimine o redacte datos sensibles y confirme que el destinatario está autorizado.
Preguntas y respuestas
¿Cuál es la forma fiable más rápida de empezar?
Use el caso representativo más pequeño, escriba el resultado esperado y cambie una variable. Confirme el recorrido básico antes de añadir filtros, efectos, ediciones, automatización o una fuente mayor.
¿Qué evidencia debe guardarse?
Conserve identidad de entrada, versión, plataforma, ajustes, acción exacta, primera transición inesperada y salida final. Cierre y reabra cualquier proyecto, sesión, informe o exportación antes de considerarlo duradero.
¿Cuándo debe repetirse el procedimiento?
Repítalo después de cambios relevantes en aplicación, sistema, driver, firmware, modelo, fuente o flujo. Preserve el caso aceptado anterior como referencia sin modificar.
¿Cuándo está listo para entregar?
Cuando otra persona autorizada identifica la entrada, repite la acción, obtiene el mismo resultado, entiende los límites restantes y abre el artefacto sin depender de estado local no documentado.
Guías relacionadas
Estas páginas en el mismo idioma cubren etapas contiguas sin cambiar el propietario canónico del tema:
- Depuración de USB selective suspend: desconexiones aleatorias, fallos de sleep/resume y transferencias perdidas
- Depuración de dispositivos compuestos USB: números de interfaz, IAD, endpoints y binding de driver
- Fallos en actualización de firmware vía USB DFU: modo bootloader, transferencias de control, timeouts y reconexiones