Timeout em bulk transfer USB: high-speed, full-speed, STALL, NAK e delays de firmware

Como diagnosticar timeouts em bulk transfer USB, leituras lentas, escritas travadas, comportamento de NAK, recuperação de endpoint halt, incompatibilidade de velocidade e delays do firmware a partir da evidência USB.

timeout em bulk transfer, bulk endpoint, USB high speed, USB full speed, STALL de endpoint, depuração USB

Bulk transfers em USB são usados quando a correção importa mais que a temporização fixa. Dispositivos de armazenamento, adaptadores seriais, probes de debug, atualizadores de firmware, scanners, dispositivos vendor e muitos produtos de aquisição de dados usam endpoints bulk. Quando falham, a busca é por "USB bulk transfer timeout", "bulk endpoint stalled", "USB read timeout", "USB write timeout", "libusb bulk transfer failed" e "USB device stops responding during bulk transfer".

A aplicação geralmente vê um timeout ou I/O error. O barramento pode contar uma história mais rica: o dispositivo NAKou demais, o endpoint travou, o host retentou, o dispositivo resetou, o tamanho da transferência estava errado, a velocidade do dispositivo ficou abaixo do esperado ou o firmware bloqueou preparando dados.

O Bus Scope ajuda porque falhas em bulk transfer precisam de evidência em nível de endpoint, não só de stack trace da aplicação.

Onde o bulk brilha

Bulk transfers são confiáveis no nível de protocolo USB. Eles usam a banda disponível e podem retentar. São bons para mover grandes volumes de dados onde a latência pode ser menos crítica que a correção.

Dispositivos comuns com bulk:

  • USB mass storage
  • adaptadores seriais CDC
  • ferramentas vendor de firmware
  • probes de debug
  • dispositivos de medição
  • impressoras e scanners
  • alguns dispositivos de captura
  • pipes de dados de FPGA ou microcontrolador

Como bulk usa a banda que sobra, a performance pode variar conforme o tráfego USB e o agendamento do host.

Timeout nem sempre significa perda de pacote

Um timeout em bulk transfer normalmente significa que a requisição no host não terminou dentro do timeout da aplicação. Isso pode acontecer mesmo com o barramento se comportando dentro da lei.

Causas comuns:

  • Dispositivo sem dados prontos, NAKando.
  • Firmware ocupado, atrasando a resposta.
  • Endpoint halted depois de um STALL.
  • Host mandou a requisição para o endpoint errado.
  • Tamanho da transferência não bate com a expectativa do protocolo.
  • Dispositivo resetou ou desconectou.
  • Driver submeteu a transferência errado.
  • Caminho full-speed lento demais para a vazão esperada.
  • Outro dispositivo consumindo banda do barramento.
  • Timeout da aplicação agressivo demais.

O trace deve mostrar qual dessas é plausível.

Comportamento de NAK

Dispositivos USB podem responder com NAK para indicar que ainda não estão prontos. NAK não é necessariamente erro. É um sinal de controle de fluxo.

Para um endpoint bulk IN, NAKs repetidos podem significar que o dispositivo ainda não tem dados. Para um endpoint bulk OUT, NAKs podem significar que o dispositivo ainda não pode aceitar mais dados.

O problema é a duração e o contexto. Alguns NAKs são normais. NAKs contínuos até o timeout da aplicação significam que o dispositivo nunca ficou pronto ou que o host esperou dados na hora errada.

STALL e halt de endpoint

STALL é diferente de NAK. Geralmente significa que o endpoint travou ou que a requisição não é suportada naquele contexto. A recuperação normalmente exige:

CLEAR_FEATURE(ENDPOINT_HALT)

Se o host não limpa o halt, transferências posteriores podem continuar falhando. Se o endpoint trava de novo imediatamente depois de limpo, o firmware do dispositivo pode estar rejeitando a sequência de comandos.

Procure por:

  • Primeiro STALL antes do timeout.
  • CLEAR_FEATURE(ENDPOINT_HALT).
  • Se a transferência voltou depois do clear.
  • Mesmo comando causando STALL toda vez.
  • Reset depois de STALLs repetidos.

Expectativas de high-speed versus full-speed

A velocidade do USB muda a vazão realista. Um dispositivo em full-speed não entrega vazão de high-speed. Um dispositivo capaz de high-speed pode regredir por causa de cabo, hub, porta, integridade de sinal ou negociação do dispositivo.

Se a aplicação assume performance de high-speed, mas o dispositivo enumerou em full-speed, timeouts podem aparecer em transferências grandes.

Confira descritores, velocidade negociada, max packet size do endpoint e o pacing real. Não deduza velocidade pelo formato do conector ou pelo rótulo de marketing.

Protocolos de comando sobre bulk

Muitos dispositivos bulk implementam um protocolo de comando e resposta em cima do USB. O host escreve um comando em bulk OUT e espera dados em bulk IN.

Timeouts acontecem quando:

  • Formato do comando está errado.
  • Dispositivo espera uma control request antes do bulk.
  • Dispositivo manda status em outro endpoint.
  • Host lê rápido demais.
  • Host lê demais.
  • Firmware bloqueia processando o comando.
  • Dispositivo exige boundary de zero-length packet.
  • Estado de erro anterior não foi limpo.

Evidência de pacote pode mostrar se o dispositivo ignorou o comando, travou, aceitou mas nunca respondeu, ou respondeu em outro endpoint.

Tamanho do bulk e short packets

Protocolos USB bulk frequentemente usam short packets para sinalizar fim de transferência. Se o host espera um tamanho fixo, mas o dispositivo manda um short packet, a aplicação pode interpretar errado. Se o host espera mais dados depois do dispositivo já ter encerrado, um timeout pode aparecer na camada de aplicação.

Procure por:

  • Tamanho requisitado da transferência.
  • Tamanho efetivamente devolvido.
  • Short packet.
  • Zero-length packet.
  • Framing de protocolo acima do USB.

Isso é especialmente importante em firmware custom e ferramentas baseadas em libusb.

Checklist de depuração

Use este processo:

  1. Capture a enumeração e os descritores de endpoint.
  2. Confirme a velocidade do dispositivo e o max packet size do endpoint.
  3. Identifique endpoints bulk IN e bulk OUT.
  4. Capture o comando ou a transferência que deu timeout.
  5. Confira se o endpoint devolve NAK, STALL, dados ou desconexão.
  6. Inspecione a recuperação por CLEAR_FEATURE(ENDPOINT_HALT) se ocorrer STALL.
  7. Compare o tamanho requisitado e o tamanho efetivo.
  8. Confira se o dispositivo manda short packet ou zero-length packet.
  9. Compare porta direta versus hub e caminho high-speed versus full-speed.
  10. Correlacione com logs do firmware, se houver.

Diagnóstico final

Timeout em bulk transfer USB não é um único bug. Pode ser NAK normal que estourou o timeout da aplicação, STALL não recuperado, firmware que não respondeu, velocidade abaixo do esperado, framing de protocolo errado ou reset do dispositivo.

O Bus Scope ajuda expondo a sequência em nível de endpoint, para que um timeout vire evidência USB diagnosticável em vez de uma falha genérica de I/O.

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

Teste do contrato USB para “Timeout em bulk transfer USB: high-speed, full-speed, STALL, NAK e delays de firmware”

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 “Timeout em bulk transfer USB: high-speed, full-speed, STALL, NAK e delays de firmware” é: Como diagnosticar timeouts em bulk transfer USB, leituras lentas, escritas travadas, comportamento de NAK, recuperação de endpoint halt, incompatibilidade de velocidade e delays do firmware a partir da evidência 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: Timeout em bulk transfer USB: high-speed, full-speed, STALL, NAK e delays de firmware

Trate “Timeout em bulk transfer USB: high-speed, full-speed, STALL, NAK e delays de firmware” como uma etapa de aceitação separada para “Timeout em bulk transfer USB: high-speed, full-speed, STALL, NAK e delays de firmware”. 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 2: Como diagnosticar timeouts em bulk transfer USB, leituras lentas, escritas travadas, compo

Converta “Como diagnosticar timeouts em bulk transfer USB, leituras lentas, escritas travadas, comportamento de NAK, recuperação de endpoint halt, incompatibili” 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 3: Onde o bulk brilha

Trate “Onde o bulk brilha” como uma etapa de aceitação separada para “Timeout em bulk transfer USB: high-speed, full-speed, STALL, NAK e delays de firmware”. 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 4: Timeout nem sempre significa perda de pacote

Converta “Timeout nem sempre significa perda de pacote” 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 5: Comportamento de NAK

Trate “Comportamento de NAK” como uma etapa de aceitação separada para “Timeout em bulk transfer USB: high-speed, full-speed, STALL, NAK e delays de firmware”. 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 6: STALL e halt de endpoint

Converta “STALL e halt de endpoint” 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 7: Expectativas de high-speed versus full-speed

Trate “Expectativas de high-speed versus full-speed” como uma etapa de aceitação separada para “Timeout em bulk transfer USB: high-speed, full-speed, STALL, NAK e delays de firmware”. 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 8: Protocolos de comando sobre bulk

Converta “Protocolos de comando sobre bulk” 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 9: Tamanho do bulk e short packets

Trate “Tamanho do bulk e short packets” como uma etapa de aceitação separada para “Timeout em bulk transfer USB: high-speed, full-speed, STALL, NAK e delays de firmware”. 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 10: 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.

Matriz de aceitação

Ponto Evidência a manter Condição de aprovação
Timeout em bulk transfer USB: high-speed, full-speed, STALL, NAK e delays de firmware Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Como diagnosticar timeouts em bulk transfer USB, leituras lentas, escritas travadas, comportamento de NAK, recuperação d Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Onde o bulk brilha Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Timeout nem sempre significa perda de pacote Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
Comportamento de NAK Estado inicial, uma ação e estado resultante Outra pessoa reproduz o resultado declarado
STALL e halt de 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 -->