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.

<!-- bus-scope-localized-transaction-foundation-v1:start -->

Teste do contrato USB para “Depuração de USB Remote Wakeup e Suspend/Resume: selective suspend, sinalização e eventos de wake perdidos”

A resposta direta é que STALL, timeout ou reset não explica sozinho a causa. Primeiro prove que o provider vê o device correto; depois leia o contrato do transfer: tipo, direção, recipient, wValue, wIndex, comprimento declarado e real, status e estado anterior e posterior. Ligue a conclusão à primeira transação diferente do caso bom.

Limite Comparação Decisão
Plataforma provider, permissão, Root Hub ou usbmon/XHC20 Os records são da conexão correta?
Setup bmRequestType, bRequest, wValue, wIndex, wLength O host enviou o pedido esperado?
Data direção, comprimento e bytes retidos O payload cumpre o contrato?
Status ACK, STALL, timeout ou cancellation Onde a transação termina?
Estado configuration, interface, alternate setting, halt O device estava pronto?

Comece antes de reset e enumeration e preserve descriptors, SET_CONFIGURATION, SET_INTERFACE e o command anterior à falha. Filtro estreito pode esconder o control transfer decisivo. Execute uma ação USB por teste e altere apenas firmware, driver, porta, cabo, comando ou timing.

Como escrever resposta citável?

Informe request, campos setup, resposta e contexto anterior; depois proponha teste com uma variável. Bytes não retidos não provam packet loss. Proximidade entre command e reset mostra correlação, não causa sem repetição ou mudança de estado.

Mantenha VID/PID, firmware, speed, topologia, provider, filtro e trigger. Compare fases USB semânticas, não frame numbers entre usbmon e USBPcap. Registre início, fim, versão, OS, conexão e checksum. Consulte o troubleshooting Bus Scope.

Os owners Semrush continuam separados: free USB analyzer na página do produto, best USB protocol analyzer na comparação e USB descriptor viewer no guia descriptor. Não invente volume ou KD.

<!-- bus-scope-localized-transaction-foundation-v1:end --><!-- multilingual-blog-closeout:start -->

Resposta direta e limite de aceitação

A resposta curta para “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. Trate essa frase como um resultado a verificar, não como promessa para qualquer entrada, dispositivo, projeto ou ambiente. Um resultado completo registra estado inicial, ação exata, saída visível e condição que comprova a conclusão da tarefa no Bus Scope.

Procedimento orientado por evidências

Comece com um caso pequeno e repetível antes de alterar um projeto completo. Registre versão do aplicativo, sistema operacional, identidade da entrada ou dispositivo, configurações relevantes e resultado esperado. Execute uma ação deliberada, preserve a primeira transição inesperada e compare com um caso conhecido quando possível. Alterar vários controles ao mesmo tempo esconde qual condição criou ou corrigiu o problema.

Ponto de controle 1: Depuração de USB Remote Wakeup e Suspend/Resume: selective suspend, sinalização e eventos

Encerre “Depuração de USB Remote Wakeup e Suspend/Resume: selective suspend, sinalização e eventos de wake perdidos” somente quando o resultado salvo, exportado ou reaberto continuar igual ao estado observado. O retorno temporário da interface ajuda, mas evidência durável é mais forte. Registre qualquer limite restante para a próxima pessoa.

Ponto de controle 2: Como depurar USB remote wakeup, falhas de suspend/resume, desconexões por selective suspen

Para “Como depurar USB remote wakeup, falhas de suspend/resume, desconexões por selective suspend, eventos de wake perdidos, bugs de gerenciamento de energi”, separe uma decisão do produto de um limite do sistema, hardware, arquivo, permissão ou processo. Confirme qual camada produziu a evidência antes de atribuir causa. Isso evita transformar um sintoma próximo em causa raiz supostamente provada.

Ponto de controle 3: O que significa remote wakeup

Encerre “O que significa remote wakeup” somente quando o resultado salvo, exportado ou reaberto continuar igual ao estado observado. O retorno temporário da interface ajuda, mas evidência durável é mais forte. Registre qualquer limite restante para a próxima pessoa.

Ponto de controle 4: Sintomas comuns

Para “Sintomas comuns”, separe uma decisão do produto de um limite do sistema, hardware, arquivo, permissão ou processo. Confirme qual camada produziu a evidência antes de atribuir causa. Isso evita transformar um sintoma próximo em causa raiz supostamente provada.

Ponto de controle 5: Evidência em descritor e feature

Encerre “Evidência em descritor e feature” somente quando o resultado salvo, exportado ou reaberto continuar igual ao estado observado. O retorno temporário da interface ajuda, mas evidência durável é mais forte. Registre qualquer limite restante para a próxima pessoa.

Ponto de controle 6: Selective suspend

Para “Selective suspend”, separe uma decisão do produto de um limite do sistema, hardware, arquivo, permissão ou processo. Confirme qual camada produziu a evidência antes de atribuir causa. Isso evita transformar um sintoma próximo em causa raiz supostamente provada.

Ponto de controle 7: Resume versus reenumeração

Encerre “Resume versus reenumeração” somente quando o resultado salvo, exportado ou reaberto continuar igual ao estado observado. O retorno temporário da interface ajuda, mas evidência durável é mais forte. Registre qualquer limite restante para a próxima pessoa.

Ponto de controle 8: Eventos de wake perdidos

Para “Eventos de wake perdidos”, separe uma decisão do produto de um limite do sistema, hardware, arquivo, permissão ou processo. Confirme qual camada produziu a evidência antes de atribuir causa. Isso evita transformar um sintoma próximo em causa raiz supostamente provada.

Ponto de controle 9: Wake imediato depois do suspend

Encerre “Wake imediato depois do suspend” somente quando o resultado salvo, exportado ou reaberto continuar igual ao estado observado. O retorno temporário da interface ajuda, mas evidência durável é mais forte. Registre qualquer limite restante para a próxima pessoa.

Ponto de controle 10: Checklist de depuração

Para “Checklist de depuração”, separe uma decisão do produto de um limite do sistema, hardware, arquivo, permissão ou processo. Confirme qual camada produziu a evidência antes de atribuir causa. Isso evita transformar um sintoma próximo em causa raiz supostamente provada.

Matriz de aceitação

Ponto Evidência a manter Condição de aprovação
Depuração de USB Remote Wakeup e Suspend/Resume: selective suspend, sinalização e eventos de wake perdidos Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Como depurar USB remote wakeup, falhas de suspend/resume, desconexões por selective suspend, eventos de wake perdidos, b Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
O que significa remote wakeup Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Sintomas comuns Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Evidência em descritor e feature Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Selective suspend Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado

Isolamento, recuperação e entrega

Pare no primeiro limite que falhar. Preserve fonte, projeto, sessão ou captura, duplique antes de edição destrutiva e altere uma variável por experimento. Repetir um fluxo amplo depois de várias mudanças pode gerar outro resultado sem explicar o motivo.

Separe ausência de evidência de evidência de ausência. Uma tela vazia pode indicar entrada, escopo, filtro, permissão, dispositivo, intervalo ou estado incorreto. Verifique aquisição ou importação antes de interpretar decoder, editor, relatório ou exportação.

Antes da entrega, reabra o artefato e examine início, ponto de decisão e final. Registre versão, plataforma, configuração, expectativa, observação e reprodução mínima. Remova ou oculte dados sensíveis e confirme a autorização do destinatário.

Perguntas e respostas

Qual é a maneira confiável mais rápida de começar?

Use o menor caso representativo, escreva o resultado esperado e altere uma variável. Confirme o caminho básico antes de adicionar filtros, efeitos, edições, automação ou uma fonte maior.

Quais evidências devem ser salvas?

Mantenha identidade da entrada, versão, plataforma, configurações, ação exata, primeira transição inesperada e saída final. Feche e reabra projeto, sessão, relatório ou exportação antes de tratá-lo como durável.

Quando o procedimento deve ser repetido?

Repita após mudanças relevantes no aplicativo, sistema, driver, firmware, modelo, fonte ou fluxo. Preserve o caso aceito anterior como referência sem alterações.

Quando a tarefa está pronta para entrega?

Quando outra pessoa autorizada identifica a entrada, repete a ação, vê o mesmo resultado, entende os limites restantes e abre o artefato sem depender de estado local não documentado.

Guias relacionados

Estas páginas no mesmo idioma cobrem etapas próximas sem alterar o proprietário canônico deste assunto:

<!-- multilingual-blog-closeout:end -->