Depuración de USB selective suspend: desconexiones aleatorias, fallos de sleep/resume y transferencias perdidas
Cómo USB selective suspend puede causar desconexiones aleatorias del dispositivo, transferencias perdidas, fallos de resume y bugs en idle, y cómo diagnosticarlo con evidencia USB.
USB selective suspend debería ahorrar energía. Cuando va, los dispositivos inactivos entran en bajo consumo y se despiertan al hacer falta. Cuando falla, los usuarios ven desconexiones aleatorias, datos perdidos, cámaras congeladas, puertos serie que dejan de responder, dispositivos HID que pierden input o dispositivos que desaparecen tras el sleep. Búsquedas como "USB selective suspend random disconnect", "USB device stops working after idle", "USB resume failure" y "disable USB selective suspend" suelen venir de gente que ya probó cables y drivers.
Deshabilitar selective suspend puede ser un workaround, pero no es un diagnóstico. La pregunta real es si falla el dispositivo, el driver, el hub, el host controller o la aplicación durante suspend/resume o la recuperación tras idle.
Bus Scope ayuda porque el fallo tiene una línea de tiempo. Necesitas saber qué tráfico hubo antes del idle, si el host suspendió el camino, qué petición reanudó el dispositivo y qué transferencia falló tras el resume.
Qué hace selective suspend
Selective suspend permite al sistema operativo suspender un dispositivo o interfaz USB individual mientras el resto del sistema sigue activo. Eso es distinto del sleep completo del sistema. Un dispositivo USB se puede suspender porque parece idle aunque el equipo esté despierto en general.
Importa para:
- Adaptadores serie USB.
- Dispositivos HID.
- Cámaras USB.
- Interfaces de audio.
- Sondas de debug.
- Tokens de seguridad.
- Dispositivos vendor a medida.
- Sensores bus-powered.
Si el firmware del dispositivo no maneja bien suspend/resume, la primera transferencia tras el idle puede fallar.
Síntomas típicos
Los problemas de selective suspend suelen parecerse a:
- El dispositivo va tras enchufarlo pero falla a los pocos minutos.
- El primer comando tras idle hace timeout.
- El read serie se queda bloqueado para siempre tras inactividad.
- La preview de la cámara se congela tras el bloqueo de pantalla.
- Los HID reports se paran hasta desenchufar y volver a enchufar.
- El dispositivo se reconecta con una dirección nueva.
- La aplicación dice que el dispositivo se desconectó aunque sigue físicamente conectado.
- Windows o Linux registran mensajes relacionados con reset o resume.
El patrón clave es el tiempo. Si el fallo sigue a periodos de idle, sleep/resume, apagado del display o cambios de estado de power del portátil, el power management entra en la investigación.
Fallo de suspend frente a fallo de resume
Hay dos problemas distintos:
- Fallo de suspend: el dispositivo o el driver no entran bien en bajo consumo.
- Fallo de resume: el dispositivo entra en bajo consumo pero no vuelve correctamente.
Para el usuario, ambos se parecen a "dispositivo desconectado". La traza USB puede separarlos enseñando si el tráfico se paró limpio y si la siguiente petición tras idle falló.
Si el dispositivo desaparece solo tras una orden de la aplicación tras idle, sospecha resume o restauración de estado del firmware. Si el dispositivo se resetea en idle sin petición de la aplicación, sospecha power management del host, comportamiento del hub o watchdog del firmware del dispositivo.
La primera transferencia tras idle
La primera transferencia tras idle suele ser la evidencia más importante. Puede ser:
- Una petición de control.
- Un read o write bulk.
- Un poll de interrupt IN.
- Una class-specific request.
- Un comando vendor.
- Una petición de restart de stream.
Si la primera transferencia hace timeout, STALL o dispara un reset, lo más probable es que el dispositivo no haya vuelto al estado esperado. El arreglo puede ir por el manejo de resume del firmware, la política de power del driver, el comportamiento de reintento de la aplicación, o deshabilitar selective suspend para ese dispositivo.
Runtime power management en Linux
Linux también tiene runtime power management para USB. Los dispositivos pueden autosuspenderse tras un delay de idle. Un dispositivo puede comportarse distinto según el driver, la versión de kernel, los ajustes de autosuspend y si una aplicación mantiene el dispositivo abierto.
Para investigar en Linux, captura el tráfico y correlaciona con logs del sistema. Si el dispositivo reanuda y se resetea inmediatamente, la traza del bus es más útil que un genérico "I/O error" de la aplicación.
Selective suspend en Windows
En Windows, el comportamiento de selective suspend depende del plan de energía, el soporte del driver, los ajustes del hub USB y la clase del dispositivo. Los usuarios suelen desactivar "USB selective suspend setting" en las opciones de energía. Puede ser un workaround práctico, pero un diagnóstico profesional debería explicar si el dispositivo falló durante la recuperación tras idle.
Los problemas USB en Windows también pueden depender de Modern Standby, comportamiento del dock del portátil, hubs y drivers del host controller. Un dispositivo puede ir en un escritorio y fallar en el dock de un portátil porque el comportamiento de suspend y resume cambia.
Estrategia de captura
Para capturar un bug de selective suspend:
- Arranca la captura mientras el dispositivo va.
- Realiza una operación correcta conocida.
- Deja el dispositivo idle lo bastante como para disparar el problema.
- Realiza la operación que suele fallar.
- Sigue capturando hasta el timeout, reset o reconexión.
- Guarda la ventana completa de timing.
No arranques la captura cuando el dispositivo ya falló. Necesitas la transición de activo a idle y a fallo.
Qué buscar en la traza
Inspecciona:
- Última transferencia antes del idle.
- Hueco de tiempo antes del fallo.
- Primera transferencia tras idle.
- Timeout, stall, reset o desconexión.
- Re-enumeración tras el fallo.
- Cambio en la dirección del dispositivo.
- Class-specific request tras resume.
- Recuperación de halt en endpoint.
- Cambios de alternate setting para dispositivos de streaming.
El timing no es ruido aquí. El timing es la evidencia.
Checklist de depuración
Usa este orden:
- Confirma si los fallos correlacionan con el tiempo de idle.
- Prueba con alimentación AC y con batería.
- Prueba puerto directo frente a hub o dock.
- Captura antes del idle y durante el fallo.
- Identifica la primera transferencia fallida tras idle.
- Mira si el dispositivo se resetea o solo falla una transferencia.
- Compara con selective suspend deshabilitado.
- Compara con otro SO u otro host controller.
- Revisa el manejo de resume del firmware.
- Revisa la política de power del driver y el comportamiento de reintento de la aplicación.
Diagnóstico final
Los problemas de USB selective suspend no se resuelven bien adivinando. Deshabilitar el power management puede aliviar los síntomas, pero la respuesta de ingeniería de verdad viene de la línea de tiempo USB: tráfico activo, hueco de idle, intento de resume, transferencia fallida, reset o recuperación.
Bus Scope ayuda a conservar e inspeccionar esa evidencia para que una "desconexión aleatoria de USB" se pueda diagnosticar como un fallo concreto de suspend/resume, driver, firmware, hub o power management.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Prueba del contrato USB para «Depuración de USB selective suspend: desconexiones aleatorias, fallos de sleep/resume y transferencias perdidas»
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 selective suspend: desconexiones aleatorias, fallos de sleep/resume y transferencias perdidas», 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 selective suspend: desconexiones aleatorias, fallos de sleep/resume y transferencias perdidas» es: Cómo USB selective suspend puede causar desconexiones aleatorias del dispositivo, transferencias perdidas, fallos de resume y bugs en idle, y cómo diagnosticarlo con evidencia 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 selective suspend: desconexiones aleatorias, fallos de sleep/resume y tr
Si «Depuración de USB selective suspend: desconexiones aleatorias, fallos de sleep/resume y transferencias perdidas» es ambiguo, compare un caso bueno y otro fallido bajo condiciones equivalentes. Marque la primera diferencia significativa en vez de enumerar todos los síntomas posteriores. Ese límite suele producir una consulta más clara y un experimento más seguro.
Punto de control 2: Cómo USB selective suspend puede causar desconexiones aleatorias del dispositivo, transfer
Compruebe «Cómo USB selective suspend puede causar desconexiones aleatorias del dispositivo, transferencias perdidas, fallos de resume y bugs en idle, y cómo dia» con la entrada representativa más pequeña. Mantenga iguales los ajustes no relacionados, repita la misma acción y revise el resultado después de reabrir o reconectar. Una captura aislada es más débil que un registro con entrada, ajuste, acción, salida y hora.
Punto de control 3: Qué hace selective suspend
Si «Qué hace selective suspend» es ambiguo, compare un caso bueno y otro fallido bajo condiciones equivalentes. Marque la primera diferencia significativa en vez de enumerar todos los síntomas posteriores. Ese límite suele producir una consulta más clara y un experimento más seguro.
Punto de control 4: Síntomas típicos
Compruebe «Síntomas típicos» con la entrada representativa más pequeña. Mantenga iguales los ajustes no relacionados, repita la misma acción y revise el resultado después de reabrir o reconectar. Una captura aislada es más débil que un registro con entrada, ajuste, acción, salida y hora.
Punto de control 5: Fallo de suspend frente a fallo de resume
Si «Fallo de suspend frente a fallo de resume» es ambiguo, compare un caso bueno y otro fallido bajo condiciones equivalentes. Marque la primera diferencia significativa en vez de enumerar todos los síntomas posteriores. Ese límite suele producir una consulta más clara y un experimento más seguro.
Punto de control 6: La primera transferencia tras idle
Compruebe «La primera transferencia tras idle» con la entrada representativa más pequeña. Mantenga iguales los ajustes no relacionados, repita la misma acción y revise el resultado después de reabrir o reconectar. Una captura aislada es más débil que un registro con entrada, ajuste, acción, salida y hora.
Punto de control 7: Runtime power management en Linux
Si «Runtime power management en Linux» es ambiguo, compare un caso bueno y otro fallido bajo condiciones equivalentes. Marque la primera diferencia significativa en vez de enumerar todos los síntomas posteriores. Ese límite suele producir una consulta más clara y un experimento más seguro.
Punto de control 8: Selective suspend en Windows
Compruebe «Selective suspend en Windows» con la entrada representativa más pequeña. Mantenga iguales los ajustes no relacionados, repita la misma acción y revise el resultado después de reabrir o reconectar. Una captura aislada es más débil que un registro con entrada, ajuste, acción, salida y hora.
Punto de control 9: Estrategia de captura
Si «Estrategia de captura» es ambiguo, compare un caso bueno y otro fallido bajo condiciones equivalentes. Marque la primera diferencia significativa en vez de enumerar todos los síntomas posteriores. Ese límite suele producir una consulta más clara y un experimento más seguro.
Punto de control 10: Qué buscar en la traza
Compruebe «Qué buscar en la traza» con la entrada representativa más pequeña. Mantenga iguales los ajustes no relacionados, repita la misma acción y revise el resultado después de reabrir o reconectar. Una captura aislada es más débil que un registro con entrada, ajuste, acción, salida y hora.
Matriz de aceptación
| Punto | Evidencia que conservar | Condición de aprobado |
|---|---|---|
| Depuración de USB selective suspend: desconexiones aleatorias, fallos de sleep/resume y transferencias perdidas | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Cómo USB selective suspend puede causar desconexiones aleatorias del dispositivo, transferencias perdidas, fallos de res | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Qué hace selective suspend | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Síntomas típicos | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Fallo de suspend frente a fallo de resume | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| La primera transferencia tras idle | 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:
<!-- multilingual-blog-closeout:end -->