Perdas em transferências isochronous USB: cliques em áudio, freezes de webcam e frames faltando
Como depurar perdas em transferências isochronous USB, cliques em áudio, congelamento de webcam, perda de frames UVC, limites de bandwidth, alternate settings e streams sensíveis a tempo.
Dispositivos de áudio e vídeo USB frequentemente falham de um jeito que não parece um erro normal de requisição. Um microfone clica. Uma interface de áudio estoura. Uma webcam congela por um momento. Um dispositivo de captura perde frames. Uma câmera UVC funciona em 720p, mas falha em 1080p. Buscas como "USB isochronous transfer dropout", "USB audio clicks packet loss", "webcam freezes USB bandwidth", "UVC frame drop" e "USB isochronous error" acontecem porque a aplicação geralmente só reporta uma falha de mídia, não a causa no nível do barramento.
Transferências isochronous são projetadas para dados sensíveis a tempo. Elas priorizam entrega regular em vez de retry. É perfeito para áudio e vídeo, mas muda a depuração. Um pacote isochronous que falhou não é retransmitido como em uma transferência bulk. Se a janela de tempo passou, a amostra de mídia ou o dado de frame pode estar perdido.
O Bus Scope ajuda porque problemas isochronous são sobre timing, endpoints, alternate settings, status de pacote e reserva de bandwidth. Você precisa inspecionar o próprio stream USB.
Onde transferências isochronous aparecem
Transferências isochronous são comuns em:
- microfones USB
- caixas de som USB
- interfaces de áudio
- webcams USB
- câmeras UVC
- dispositivos de captura HDMI
- dispositivos médicos ou industriais de streaming
- streams de sensores sensíveis a tempo
O host agenda bandwidth para essas transferências. O dispositivo envia ou recebe dados em intervalos regulares. O sistema espera que erros eventuais sejam tratados pelo pipeline de mídia, não por retransmissão.
Por que dropouts acontecem
Causas comuns:
- bandwidth USB insuficiente no barramento
- alternate setting errado selecionado
- hub compartilhado com outros dispositivos de alta banda
- dispositivo USB 2.0 em caminho limitado
- pressão de agendamento do host controller
- underrun ou overrun de firmware no dispositivo
- aplicação não consumindo frames rápido o suficiente
- gerenciamento de energia interrompendo o timing do stream
- problemas de cabo ou integridade de sinal
- driver escolhendo um modo agressivo demais para o barramento real
O sintoma visível depende do tipo de mídia. Dropouts de áudio viram cliques, pops, silêncio ou drift. Dropouts de vídeo viram frames congelados, corrupção, frames repetidos ou colapso de frame rate.
Alternate settings importam
Dispositivos de áudio e vídeo USB frequentemente expõem múltiplos alternate settings. Um alternate setting de interface pode definir diferentes packet sizes ou modos de streaming. O host escolhe um alternate setting antes de começar o stream.
Um trace pode mostrar:
SET_INTERFACE interface=1 alternate=3
Isochronous IN transfers begin
Se o driver seleciona um alternate setting que exige mais bandwidth do que o barramento entrega de forma confiável, o stream pode falhar sob carga. Se um alternate setting de bandwidth menor funciona, pressão de bandwidth ou agendamento entra na lista.
Perda de frames em câmera UVC
Dispositivos USB Video Class geralmente enviam frames por endpoints isochronous. Um único frame de vídeo pode se espalhar por muitos pacotes USB. Se alguns pacotes se perdem ou vêm com erro, o frame pode ficar incompleto.
Sintomas:
- Preview da webcam congela.
- Frame rate cai.
- Algumas resoluções falham.
- MJPEG funciona, mas YUY2 descompactado falha.
- 1080p falha, mas 720p funciona.
- Câmera funciona sozinha, mas falha via hub.
A evidência de pacote deve mostrar o tráfego do endpoint, status dos pacotes, limites de frame quando disponíveis, e se os erros se concentram em períodos de alta bandwidth.
Cliques e pops em áudio USB
Áudio é sensível a timing. Até pequenos buracos produzem artefatos audíveis. Diferente de uma transferência de arquivo, o sistema não pode esperar e retentar sem causar latência.
Procure por:
- Pacotes isochronous com status de erro.
- Buracos periódicos.
- Comandos de start ou stop de stream antes das falhas.
- Mudanças de sample rate.
- Transições de estado de energia.
- Carga do host controller.
- Outro dispositivo começando tráfego de alta banda no mesmo barramento.
Se os defeitos aparecem só quando uma câmera ou dispositivo de armazenamento está ativo no mesmo hub, contenção de barramento é um suspeito forte.
Caminhos full-speed, high-speed e SuperSpeed
A velocidade do USB importa. Um dispositivo conectado via hub ou adaptador pode operar em velocidade menor do que a esperada. Uma câmera USB 2.0 não consegue ultrapassar a bandwidth prática do caminho. Um dispositivo de captura USB 3.x conectado por um cabo ruim pode cair para velocidade menor ou ficar instável.
O trace e os descritores do dispositivo mostram a velocidade negociada e os packet sizes dos endpoints. Isso é mais confiável do que assumir pelo formato do conector.
Gerenciamento de energia e transições de idle
Dispositivos de streaming podem falhar depois de idle, screen lock, sleep/resume ou selective suspend. O primeiro stream depois do resume pode vir com pacotes faltando ou exigir reinicialização.
Se um dispositivo funciona logo depois de conectar, mas derruba o stream depois de idle, capture a transição de idle e a primeira sequência de início de stream depois do idle. A falha pode não ser de bandwidth; pode ser estado de resume.
Estratégia de captura
Para depurar dropout isochronous:
- Capture desde antes do início do stream.
- Registre a configuração e o alternate setting selecionados.
- Mantenha os descritores de endpoint visíveis.
- Capture através do primeiro dropout audível ou visível.
- Marque o horário aproximado do glitch visível para o usuário.
- Inspecione o status dos pacotes perto desse momento.
- Compare resoluções ou sample rates que funcionam e que falham.
- Compare porta direta versus hub.
Não corte os pacotes de setup cedo demais. O alternate setting selecionado costuma ser essencial.
Checklist para dropouts isochronous USB
Use este processo:
- Identifique a velocidade do dispositivo e o caminho do barramento.
- Inspecione descritores e endpoints isochronous.
- Identifique o alternate setting selecionado.
- Compare a bandwidth exigida com as condições do barramento.
- Procure erros de status de pacote perto do dropout.
- Confira se outro dispositivo de alta banda começa a trafegar.
- Teste resolução, frame rate ou sample rate mais baixos.
- Teste porta direta, outro controller e hub com fonte.
- Confira o timing de suspend/resume.
- Preserve o timing dos pacotes ao compartilhar o trace.
Diagnóstico final
Dropouts isochronous em USB são problemas de timing e agendamento tanto quanto de dispositivo. Cliques em áudio e congelamento de webcam podem vir de limites de bandwidth, alternate settings, pressão no host controller, topologia de hub, gerenciamento de energia, timing de firmware ou delays de consumo pela aplicação.
O Bus Scope ajuda mostrando a evidência real de streaming USB, para que uma falha de mídia seja diagnosticada como um problema de timing no nível do barramento, não apenas como uma falha vaga da aplicação.