Recuperação de halt em endpoint USB: CLEAR_FEATURE, loops de STALL e reset do driver
Como diagnosticar recuperação de halt em endpoint USB, CLEAR_FEATURE ENDPOINT_HALT, loops de STALL repetidos, falhas em bulk, resets do driver e bugs de estado no firmware. Veja também o caso clássico do libusb clear halt.
Halts em endpoint USB são uma causa comum do tipo de bug "funciona uma vez, depois falha". Uma transferência bulk trava, o driver limpa o halt, o dispositivo trava de novo e, no fim, a aplicação reporta timeout, erro de I/O, reset do dispositivo ou desconexão. Quem passa por isso costuma pesquisar por "USB endpoint halt", "CLEAR_FEATURE ENDPOINT_HALT", "USB STALL loop", "bulk endpoint stalled" e "libusb clear halt" quando o dispositivo não desaparece, mas simplesmente para de aceitar tráfego em um endpoint específico.
O Bus Scope é útil porque a recuperação de halt em endpoint é uma sequência, não um evento isolado. Você precisa ver o primeiro STALL, a requisição de recuperação do host, o que o dispositivo fez depois e se o mesmo comando provocou o halt de novo.
O que significa halt em endpoint
Um halt em endpoint significa que o endpoint está travado e não pode continuar as transferências normais até a condição de halt ser limpa. O host pode emitir:
CLEAR_FEATURE(ENDPOINT_HALT)
para o endpoint afetado. Depois disso, o data toggle do endpoint e o estado interno do dispositivo precisam estar coerentes para a transferência voltar ao normal.
Se o firmware limpa só o flag de hardware do USB, mas não o estado interno do protocolo, a próxima transferência pode falhar de novo.
STALL versus timeout
STALL é explícito. Timeout significa que não houve conclusão dentro do tempo esperado. Um timeout pode acontecer porque o endpoint nunca respondeu, o dispositivo ficou mandando NAK ou porque o dispositivo se desconectou.
A recuperação de halt em endpoint começa com um STALL. Se o host nunca vê um STALL e só vê timeout, o caminho de recuperação é outro.
Halt em endpoint bulk
Endpoints bulk geralmente travam quando um comando é inválido, uma fase do protocolo está errada ou o firmware detecta um erro.
Exemplo:
Host -> Device bulk OUT command
Device -> Host STALL on bulk IN
Host -> Device CLEAR_FEATURE(ENDPOINT_HALT)
Host retries bulk IN
Device stalls again
Esse padrão sugere que o halt do endpoint é sintoma de estado do protocolo do dispositivo, não apenas um erro transitório de barramento.
A recuperação precisa casar com a direção do endpoint
Os endereços de endpoint incluem direção. O endpoint 0x81 e o endpoint 0x01 são direções diferentes. Limpar o endpoint errado não recupera o pipe travado.
Confira:
- Qual endpoint travou?
- Direção IN ou OUT?
- O host limpou o mesmo endpoint?
- As transferências voltaram ao normal depois do clear?
- O data toggle e o estado foram recuperados de forma coerente?
Essa é uma fonte comum de relatórios enganosos do tipo "o clear halt não funcionou".
Loops de STALL repetido
STALL repetido depois do clear normalmente significa que a causa de fundo continua:
- O host envia de novo um comando não suportado
- A máquina de estado do firmware continua em erro
- O dispositivo espera um reset antes de tentar de novo
- O host lê do endpoint errado
- O tamanho do comando ou o checksum está errado
- O data toggle ou o estado do endpoint está incoerente
- O firmware exige uma requisição de classe/vendor antes de continuar
O trace precisa incluir o comando antes do primeiro STALL, não só as tentativas de recuperação.
Comportamento de reset do driver
Se a recuperação por clear halt falha, o driver pode resetar o dispositivo. Isso pode esconder o erro original do endpoint. O usuário vê uma reconexão ou o dispositivo sumir, mas a evidência do barramento mostra que a primeira falha real foi um loop de STALL.
Preserve a linha do tempo:
- Último comando bem-sucedido.
- Primeiro STALL.
- Tentativa de clear halt.
- Retry.
- STALL ou timeout repetido.
- Reset ou desconexão do dispositivo.
Checklist de depuração
Use este fluxo:
- Identifique o endpoint que travou.
- Registre a direção e o tipo de transferência do endpoint.
- Inspecione o comando ou a transferência imediatamente antes do STALL.
- Confira se o host envia
CLEAR_FEATURE(ENDPOINT_HALT). - Confirme que ele mira o endpoint correto.
- Veja se a transferência voltou ao normal.
- Se o STALL se repete, inspecione o estado do protocolo no firmware.
- Procure por reset do dispositivo depois de uma recuperação malsucedida.
- Compare com uma sequência de comandos sabidamente boa.
- Preserve contexto suficiente antes do STALL.
Diagnóstico final
A recuperação de halt em endpoint USB é um problema de máquina de estado. CLEAR_FEATURE(ENDPOINT_HALT) pode limpar a condição do endpoint USB, mas não corrige sozinho o estado do protocolo no firmware, comandos inválidos, endpoints errados ou a lógica de retry do driver.
O Bus Scope ajuda a expor a sequência completa de halt e recuperação para que as falhas de endpoint possam ser diagnosticadas a partir do comportamento real do barramento.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Teste do contrato USB para “Recuperação de halt em endpoint USB: CLEAR_FEATURE, loops de STALL e reset do driver”
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 “Recuperação de halt em endpoint USB: CLEAR_FEATURE, loops de STALL e reset do driver” é: Como diagnosticar recuperação de halt em endpoint USB, CLEAR_FEATURE ENDPOINT_HALT, loops de STALL repetidos, falhas em bulk, resets do driver e bugs de estado no firmware. Veja também o caso clássico do libusb clear halt. 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: Recuperação de halt em endpoint USB: CLEARFEATURE, loops de STALL e reset do driver
Encerre “Recuperação de halt em endpoint USB: CLEAR_FEATURE, loops de STALL e reset do driver” 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 diagnosticar recuperação de halt em endpoint USB, CLEARFEATURE ENDPOINTHALT, loops de
Para “Como diagnosticar recuperação de halt em endpoint USB, CLEAR_FEATURE ENDPOINT_HALT, loops de STALL repetidos, falhas em bulk, resets do driver e bugs ”, 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 halt em endpoint
Encerre “O que significa halt em endpoint” 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: STALL versus timeout
Para “STALL versus timeout”, 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: Halt em endpoint bulk
Encerre “Halt em endpoint bulk” 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: A recuperação precisa casar com a direção do endpoint
Para “A recuperação precisa casar com a direção do endpoint”, 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: Loops de STALL repetido
Encerre “Loops de STALL repetido” 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: Comportamento de reset do driver
Para “Comportamento de reset do driver”, 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: Checklist de depuração
Encerre “Checklist de depuraçã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 10: Diagnóstico final
Para “Diagnóstico final”, 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 |
|---|---|---|
| Recuperação de halt em endpoint USB: CLEARFEATURE, loops de STALL e reset do driver | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| Como diagnosticar recuperação de halt em endpoint USB, CLEARFEATURE ENDPOINTHALT, loops de STALL repetidos, falhas em bu | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| O que significa halt em endpoint | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| STALL versus timeout | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| Halt em endpoint bulk | Estado inicial, uma ação e estado resultante | Outra pessoa reproduz o resultado declarado |
| A recuperação precisa casar com a direção do endpoint | 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 -->