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.
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:
- Capture a enumeração desde a conexão.
- Confirme a capacidade de remote wakeup nos descritores.
- Confira se o host habilitou o remote wakeup.
- Registre o período de idle antes do suspend.
- Identifique o momento do suspend.
- Procure sinalização de resume ou tráfego de resume do host.
- Separe resume de reenumeração completa.
- Confira o comportamento dos endpoints depois do resume.
- Compare o mesmo dispositivo em porta direta e através de um hub.
- 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:
- Depuração de USB Selective Suspend: desconexões aleatórias, falhas de sleep/resume e transferências faltando
- Depuração de dispositivo composto USB: números de interface, IAD, endpoints e vínculo de driver
- Falha em DFU no USB: depuração de bootloader, transferências de controle, timeouts e reconexões