Depuração de bInterval em endpoint de interrupção USB: polling rate, latência HID e entrada perdida

Como depurar o bInterval em endpoint de interrupção USB, polling rate, latência HID, relatórios de entrada faltando, regras de intervalo em full-speed versus high-speed e erros em descritor de endpoint.

bInterval USB, endpoint de interrupção, latência HID, polling rate, relatório de entrada, descritor de endpoint, depuração USB

Endpoints de interrupção USB são usados por teclados, mouses, controles, sensores, painéis touch, scanners de código de barras, nobreaks e muitas ferramentas HID customizadas. Quem busca por "USB bInterval", "HID polling rate", "USB interrupt endpoint latency", "missed input reports", "USB device 125Hz 250Hz 1000Hz" e "bInterval full speed high speed" geralmente sente a entrada atrasada ou recebendo relatórios na frequência errada.

O Bus Scope ajuda porque o comportamento de polling é definido pelos descritores de endpoint e pelo timing real do barramento. A interface do sistema operacional pode mostrar apenas "dispositivo conectado"; a captura mostra qual intervalo o host realmente usa.

O que significa bInterval

Um descritor de endpoint de interrupção inclui bInterval. Esse valor descreve o polling interval, mas a interpretação depende da velocidade e do tipo de endpoint.

Distinções importantes:

  • Endpoints de interrupção low-speed e full-speed usam intervalos baseados em frames em milissegundos.
  • Endpoints de interrupção high-speed usam uma codificação diferente baseada em microframes.
  • O agendamento do host controller e a topologia de hub podem afetar o timing observado.
  • O timing de leitura da aplicação não é a mesma coisa que o polling do barramento USB.

Se o engenheiro só olha os callbacks da aplicação, pode perder o schedule real do endpoint.

Sintomas comuns

Problemas de polling interval aparecem como:

  • Mouse ou controle parecem lentos.
  • Relatórios de entrada HID chegam a cada 8 ms em vez de 1 ms.
  • Dispositivo anuncia 1000 Hz, mas se comporta como 125 Hz.
  • Dados de sensor vêm em rajadas.
  • Scanner de código de barras perde leituras rápidas.
  • Painel touch fica lento depois do resume.
  • Firmware envia relatórios mais rápido do que o host faz polling.
  • Modo high-speed muda o timing do relatório sem aviso.

Esses problemas costumam parecer latência ou responsividade, mas a evidência raiz está no descritor USB e no timing dos pacotes.

Interpretação em full-speed versus high-speed

O mesmo valor numérico de bInterval pode significar timings efetivos diferentes dependendo da velocidade. Um endpoint HID full-speed com bInterval=8 não é o mesmo modelo de agendamento que um endpoint high-speed com o mesmo byte.

A depuração deve capturar:

  • Velocidade negociada real.
  • Descritor de endpoint.
  • Endereço do endpoint.
  • Tipo de transferência.
  • bInterval.
  • Cadência observada do IN token ou da transferência.
  • Timing do payload do relatório.

O Bus Scope deve mostrar valores do descritor e timing observado lado a lado.

Sobreprodução no firmware

Alguns firmwares geram relatórios de entrada mais rápido do que o host faz polling. Esses relatórios podem ser sobrescritos, coalescidos ou descartados antes mesmo de o host ver.

Sintomas:

  • Logs internos do dispositivo mostram eventos.
  • O host recebe menos relatórios.
  • Toques rápidos em botão são perdidos.
  • Movimento parece suavizado ou atrasado.
  • Relatórios depois de uma rajada trazem apenas o estado mais recente.

Isso não é perda de pacote USB. É problema de contrato entre firmware e polling.

Polling do host não é taxa de leitura da aplicação

Uma aplicação pode ler a cada 1 ms, mas o host USB pode estar fazendo polling a cada 8 ms. Ou o host faz polling no tempo certo, mas o loop de eventos da aplicação processa os dados depois.

A captura de pacotes separa:

  • Intervalo de polling do barramento.
  • Timing de resposta do dispositivo.
  • Buffer do driver de host.
  • Latência do callback da aplicação.

Essa separação é crítica para casos de suporte de latência HID.

Erros comuns no descritor bInterval

Bugs frequentes de descritor incluem:

  • Anunciar bInterval=10 em vez de 1 por engano.
  • Copiar intervalo de full-speed para descritor high-speed sem ajustar.
  • Usar um intervalo no descritor e outro na expectativa do HID.
  • Comentário no firmware diz 1000 Hz, mas o descritor diz menos.
  • Mudança de alternate setting altera o intervalo, mas o firmware não trata.

O byte no descritor é o contrato que o host usa para agendar.

Checklist de depuração

Use este fluxo:

  1. Capture a enumeração.
  2. Identifique os descritores de endpoint de interrupção.
  3. Registre a velocidade real do dispositivo.
  4. Decodifique o bInterval.
  5. Meça a cadência observada de interrupt IN.
  6. Compare com a polling rate esperada.
  7. Dispare eventos rápidos de entrada.
  8. Confira se relatórios são perdidos ou coalescidos.
  9. Compare porta direta versus hub.
  10. Preserve descritor e evidência de timing juntos.

Diagnóstico final

Latência em interrupção USB não é só um problema de performance da aplicação. Ela depende do bInterval do endpoint, do modo de velocidade, do agendamento do host, da geração de relatórios e do buffering do firmware.

O Bus Scope ajuda a provar se um dispositivo HID ou de interrupção está realmente sendo polled na taxa pretendida, e se a entrada perdida vem do descritor, do buffering do firmware ou do timing de host e aplicação.

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

Teste do contrato USB para “Depuração de bInterval em endpoint de interrupção USB: polling rate, latência HID e entrada perdida”

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 bInterval em endpoint de interrupção USB: polling rate, latência HID e entrada perdida” é: Como depurar o bInterval em endpoint de interrupção USB, polling rate, latência HID, relatórios de entrada faltando, regras de intervalo em full-speed versus high-speed e erros em descritor de endpoint. 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 bInterval em endpoint de interrupção USB: polling rate, latência HID e entrad

Converta “Depuração de bInterval em endpoint de interrupção USB: polling rate, latência HID e entrada perdida” em uma declaração reproduzível de aprovação ou falha. Inclua o que deve aparecer, o que deve estar ausente e qual recuperação é segura. Preserve o projeto ou captura original até a cópia corrigida passar pelo mesmo teste.

Ponto de controle 2: Como depurar o bInterval em endpoint de interrupção USB, polling rate, latência HID, relat

Trate “Como depurar o bInterval em endpoint de interrupção USB, polling rate, latência HID, relatórios de entrada faltando, regras de intervalo em full-speed” como uma etapa de aceitação separada para “Depuração de bInterval em endpoint de interrupção USB: polling rate, latência HID e entrada perdida”. Registre o estado antes da ação, a primeira mudança visível e o estado final. Se o resultado divergir do objetivo descrito, volte ao último ponto confirmado em vez de continuar com suposições.

Ponto de controle 3: O que significa bInterval

Converta “O que significa bInterval” em uma declaração reproduzível de aprovação ou falha. Inclua o que deve aparecer, o que deve estar ausente e qual recuperação é segura. Preserve o projeto ou captura original até a cópia corrigida passar pelo mesmo teste.

Ponto de controle 4: Sintomas comuns

Trate “Sintomas comuns” como uma etapa de aceitação separada para “Depuração de bInterval em endpoint de interrupção USB: polling rate, latência HID e entrada perdida”. Registre o estado antes da ação, a primeira mudança visível e o estado final. Se o resultado divergir do objetivo descrito, volte ao último ponto confirmado em vez de continuar com suposições.

Ponto de controle 5: Interpretação em full-speed versus high-speed

Converta “Interpretação em full-speed versus high-speed” em uma declaração reproduzível de aprovação ou falha. Inclua o que deve aparecer, o que deve estar ausente e qual recuperação é segura. Preserve o projeto ou captura original até a cópia corrigida passar pelo mesmo teste.

Ponto de controle 6: Sobreprodução no firmware

Trate “Sobreprodução no firmware” como uma etapa de aceitação separada para “Depuração de bInterval em endpoint de interrupção USB: polling rate, latência HID e entrada perdida”. Registre o estado antes da ação, a primeira mudança visível e o estado final. Se o resultado divergir do objetivo descrito, volte ao último ponto confirmado em vez de continuar com suposições.

Ponto de controle 7: Polling do host não é taxa de leitura da aplicação

Converta “Polling do host não é taxa de leitura da aplicação” em uma declaração reproduzível de aprovação ou falha. Inclua o que deve aparecer, o que deve estar ausente e qual recuperação é segura. Preserve o projeto ou captura original até a cópia corrigida passar pelo mesmo teste.

Ponto de controle 8: Erros comuns no descritor bInterval

Trate “Erros comuns no descritor bInterval” como uma etapa de aceitação separada para “Depuração de bInterval em endpoint de interrupção USB: polling rate, latência HID e entrada perdida”. Registre o estado antes da ação, a primeira mudança visível e o estado final. Se o resultado divergir do objetivo descrito, volte ao último ponto confirmado em vez de continuar com suposições.

Ponto de controle 9: Checklist de depuração

Converta “Checklist de depuração” em uma declaração reproduzível de aprovação ou falha. Inclua o que deve aparecer, o que deve estar ausente e qual recuperação é segura. Preserve o projeto ou captura original até a cópia corrigida passar pelo mesmo teste.

Ponto de controle 10: Diagnóstico final

Trate “Diagnóstico final” como uma etapa de aceitação separada para “Depuração de bInterval em endpoint de interrupção USB: polling rate, latência HID e entrada perdida”. Registre o estado antes da ação, a primeira mudança visível e o estado final. Se o resultado divergir do objetivo descrito, volte ao último ponto confirmado em vez de continuar com suposições.

Matriz de aceitação

Ponto Evidência a manter Condição de aprovação
Depuração de bInterval em endpoint de interrupção USB: polling rate, latência HID e entrada perdida Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Como depurar o bInterval em endpoint de interrupção USB, polling rate, latência HID, relatórios de entrada faltando, reg Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
O que significa bInterval 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
Interpretação em full-speed versus high-speed Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Sobreprodução no firmware 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 -->