Depuração de USB Remote Wakeup e Suspend/Resume: selective suspend, sinalização e eventos de wake perdidos

Como depurar USB remote wakeup, falhas de suspend/resume, desconexões por selective suspend, eventos de wake perdidos, bugs de gerenciamento de energia e sinalização de resume a partir de capturas USB.

USB remote wakeup, USB suspend resume, selective suspend, gerenciamento de energia, wake perdido, depuração USB, analisador de barramento

Bugs de gerenciamento de energia em USB são difíceis de diagnosticar porque o dispositivo pode funcionar perfeitamente enquanto o sistema está ativo e falhar só depois de idle, sleep, selective suspend, sleep de dock, fechar a tampa do notebook ou desligar o monitor. Buscas como "USB remote wakeup not working", "USB selective suspend disconnect", "USB device does not wake computer", "USB resume failure", "USB suspend resume bug" e "HID keyboard wake from sleep not working" traduzem exatamente esse cenário.

O Bus Scope ajuda porque suspend e resume são eventos de barramento, não apenas erros de aplicação. Você precisa ver se o host suspendeu o dispositivo, se o remote wakeup estava habilitado, se o dispositivo sinalizou resume, se o host voltou com tráfego normal e se o dispositivo reenumerou em vez de fazer resume.

O que significa remote wakeup

O remote wakeup permite que um dispositivo USB suspenso peça que o host retome a comunicação. Exemplos comuns:

  • Teclado acorda um desktop em sleep.
  • Mouse acorda um notebook em idle.
  • Botão em dock acorda uma workstation.
  • Scanner de código de barras acorda um kiosk.
  • Controlador industrial acorda um painel PC.
  • Sensor HID acorda o host depois de um evento externo.

Remote wakeup não é só "o dispositivo tem energia". O host precisa permitir, o dispositivo precisa anunciar suporte, a feature precisa estar habilitada e a sinalização de resume precisa acontecer no momento certo.

Sintomas comuns

Problemas de remote wakeup e suspend aparecem como:

  • Dispositivo funciona até o PC dormir.
  • Dispositivo não acorda o computador.
  • Dispositivo acorda o sistema imediatamente depois do suspend.
  • Dispositivo some depois do resume.
  • Dispositivo reenumera com novo endereço.
  • Entrada HID é perdida depois do idle.
  • Dispositivo serial para de transmitir depois do selective suspend.
  • Dispositivo de áudio ou câmera volta do sleep sem dados.
  • Firmware só recupera depois de tirar e recolocar o cabo.

Esses sintomas são frequentemente colocados na conta do driver, mas a captura pode mostrar um problema de estado de energia do firmware.

Evidência em descritor e feature

O descritor de configuração pode anunciar a capacidade de remote wakeup. O host pode então habilitar ou desabilitar a feature. Um trace útil de diagnóstico USB deve responder:

  • O dispositivo anuncia remote wakeup?
  • O host enviou SET_FEATURE(DEVICE_REMOTE_WAKEUP)?
  • O host limpou a feature depois?
  • O suspend aconteceu após o idle?
  • O dispositivo tentou sinalizar resume?
  • O host voltou com transferências normais?

Sem esses fatos, o diagnóstico é achismo.

Selective suspend

O selective suspend permite que o sistema operacional suspenda um dispositivo USB em idle sem colocar o sistema inteiro em sleep. Isso economiza energia, mas expõe bugs de firmware.

Padrões de falha:

  • Dispositivo entra em baixo consumo, mas não restaura o estado dos endpoints.
  • Firmware perde estado pendente de interrupt IN.
  • Dispositivo NAKa para sempre depois do resume.
  • Host reseta o dispositivo depois de timeout.
  • Aplicação vê timeout ou remoção do dispositivo.
  • Dispositivo composto resume em uma interface, mas não em outra.

Quem busca geralmente digita "USB selective suspend random disconnect" porque o dispositivo parece desconectar, mas o evento real é falha de suspend/resume.

Resume versus reenumeração

Depois do sleep, há dois desfechos bem diferentes:

  • Resume: o mesmo dispositivo continua com a configuração existente.
  • Reenumeração: o host reseta e enumera o dispositivo de novo.

Reenumeração pode ser aceitável depois de uma desconexão física, mas é suspeita depois de um suspend normal. Ela pode quebrar aplicações que mantêm handles abertos, nomes de porta serial, caminhos HID ou sessões de captura de câmera.

O Bus Scope deve ajudar a identificar se o trace contém tráfego de resume normal ou uma nova sequência de enumeração com GET_DESCRIPTOR, SET_ADDRESS e SET_CONFIGURATION.

Eventos de wake perdidos

Às vezes o dispositivo vê o evento externo, mas o host não acorda. Causas comuns:

  • Remote wakeup não foi anunciado.
  • Remote wakeup não foi habilitado pelo host.
  • Dispositivo envia resume cedo demais.
  • Dispositivo envia resume tarde demais.
  • Hub bloqueia ou trata errado a sinalização de wake.
  • BIOS ou política de wake do SO desabilita a porta.
  • Firmware do dispositivo entra em um sleep mais profundo que o esperado.
  • O evento ocorre antes do suspend terminar.

Evidência em nível de pacote não substitui a política de energia do SO, mas estreita a pergunta. O dispositivo tinha permissão para acordar o host, e ele tentou?

Wake imediato depois do suspend

O oposto também é comum: o sistema suspende e acorda imediatamente. Dispositivos USB podem causar isso quando sinalizam wake por entrada velha, estado de interrupção ruidoso, bugs de debounce ou firmware que trata suspend como novo evento.

Evidência a coletar:

  • Último relatório de interrupção antes do suspend.
  • Se o host habilitou wake.
  • Intervalo de tempo entre suspend e resume.
  • Classe e interface do dispositivo.
  • Se o mesmo endpoint tinha dados pendentes.
  • Se o evento se repete em toda tentativa de suspend.

Isso é especialmente comum em teclados, mouses, painéis touch, controles e dispositivos HID custom.

Checklist de depuração

Use este processo:

  1. Capture a enumeração desde a conexão.
  2. Confirme a capacidade de remote wakeup nos descritores.
  3. Confira se o host habilitou o remote wakeup.
  4. Registre o período de idle antes do suspend.
  5. Identifique o momento do suspend.
  6. Procure sinalização de resume ou tráfego de resume do host.
  7. Separe resume de reenumeração completa.
  8. Confira o comportamento dos endpoints depois do resume.
  9. Compare o mesmo dispositivo em porta direta e através de um hub.
  10. Preserve os pacotes de antes do suspend e depois do resume.

Diagnóstico final

Bugs de USB remote wakeup e suspend/resume são problemas de protocolo de estado de energia. A evidência útil é a capacidade no descritor, a seleção de feature pelo host, a temporização do suspend, a sinalização de resume, a recuperação dos endpoints e se o host fez resume ou reenumeração do dispositivo.

O Bus Scope ajuda a tornar essa evidência visível, para que "USB wake não funciona" vire um diagnóstico concreto em vez de um ciclo de culpa no driver.