Сбои изохронных USB-передач: отладка щелчков в аудио, зависаний веб-камеры и потерянных видеокадров
Как отлаживать сбои изохронных USB-передач, щелчки в аудио, зависания веб-камеры, потери кадров UVC, ограничения полосы, alternate settings и чувствительные ко времени потоки USB.
USB-устройства аудио и видео часто ломаются так, что это не похоже на обычную ошибку запроса. Микрофон щёлкает. Аудиоинтерфейс «стреляет». Веб-камера на мгновение замирает. Устройство захвата теряет кадры. UVC-камера работает на 720p, но падает на 1080p. Пользователи ищут «USB isochronous transfer dropout», «USB audio clicks packet loss», «webcam freezes USB bandwidth», «UVC frame drop», «USB isochronous error», потому что приложение обычно сообщает только о сбое, а не о причине на уровне шины.
Изохронные передачи созданы для чувствительных ко времени данных. Они ставят регулярность доставки выше ретраев. Для аудио и видео это идеально, но меняет отладку. Потерянный изохронный пакет не пересылается повторно, как в bulk-передаче. Если временной слот пропущен, сэмпл или кадр могут быть потеряны.
Bus Scope полезен, потому что проблемы изохронных передач — это тайминги, конечные точки, alternate settings, статусы пакетов и резервирование полосы. Нужно изучать сам поток USB.
Где используются изохронные передачи
Изохронные передачи встречаются в:
- USB-микрофонах
- USB-колонках
- аудиоинтерфейсах
- USB-вебкамерах
- UVC-камерах
- HDMI-устройствах захвата
- медицинских и промышленных потоковых устройствах
- чувствительных ко времени потоках датчиков
Хост планирует для них полосу. Устройство отправляет или принимает данные через регулярные интервалы. Система ожидает, что редкие ошибки обрабатывает медиаконвейер, а не повторная передача.
Почему случаются сбои
Частые причины:
- На шине недостаточно полосы USB.
- Выбран неправильный alternate setting.
- Концентратор используется совместно с другими высокополосными устройствами.
- Устройство USB 2.0 идёт через ограниченный участок пути.
- Давление планировщика хост-контроллера.
- Underrun или overrun в прошивке устройства.
- Приложение не успевает потреблять кадры.
- Управление питанием рвёт тайминги потока.
- Плохой кабель или целостность сигнала.
- Драйвер выбрал режим агрессивнее, чем позволяет реальная шина.
Видимый симптом зависит от типа медиа. Сбои аудио превращаются в щелчки, попытки, тишину или рассинхрон. Сбои видео превращаются в замершие кадры, corruption, повторяющиеся кадры или падение частоты кадров.
Важность alternate settings
USB-устройства аудио и видео часто предоставляют несколько alternate settings. Alternate setting интерфейса может задавать разные размеры пакетов или режимы потока. Хост выбирает alternate setting до запуска потока.
В трассе может быть видно:
SET_INTERFACE interface=1 alternate=3
Начало изохронных IN-передач
Если драйвер выбирает alternate setting, требующий больше полосы, чем шина может надёжно дать, поток может падать под нагрузкой. Если менее прожорливый alternate setting работает — виноваты, скорее всего, полоса или давление планировщика.
Потеря кадров UVC-камерой
Устройства класса USB Video часто отправляют кадры через изохронные конечные точки. Один видеокадр может разбиваться на множество USB-пакетов. Если часть пакетов потеряна или помечена ошибками, кадр может оказаться неполным.
Симптомы:
- Зависание превью веб-камеры.
- Падение частоты кадров.
- Некоторые разрешения не работают.
- MJPEG работает, а YUY2 без сжатия — нет.
- 1080p падает, а 720p — работает.
- Камера работает одна, но не через концентратор.
В пакетных данных должны быть видны трафик по конечной точке, статусы пакетов, границы кадров (если доступны) и то, не скапливаются ли ошибки в периоды высокой нагрузки.
Щелчки и попытки в USB-аудио
Аудио чувствительно ко времени. Даже маленькие паузы дают слышимые артефакты. В отличие от файловой передачи, система не может ждать и ретраить без роста задержки.
Ищите:
- Изохронные пакеты со статусом ошибки.
- Периодические паузы.
- Команды запуска/остановки потока перед глитчами.
- Смену sample rate.
- Переходы состояний питания.
- Загрузку хост-контроллера.
- Запуск высокополосного трафика другим устройством на той же шине.
Если глитчи появляются только когда на том же концентраторе активна камера или накопитель — сильный подозреваемый именно конкуренция за шину.
Пути Full-speed, High-speed и SuperSpeed
Скорость USB имеет значение. Устройство, подключённое через концентратор или адаптер, может работать на меньшей скорости, чем ожидается. USB 2.0-камера не превысит практическую полосу своего пути. Устройство захвата USB 3.x через плохой кабель может откатиться или стать нестабильным.
Трасса и дескрипторы устройства покажут согласованную скорость и размеры пакетов конечной точки. Это надёжнее, чем гадать по форме разъёма.
Управление питанием и переходы простоя
Потоковые устройства могут ломаться после простоя, блокировки экрана, сна/resume или selective suspend. Первый поток после resume может иметь потерянные пакеты или требовать ре-инициализации.
Если устройство работает сразу после включения, но сбоит после простоя — захватите переход в простой и первую последовательность запуска потока после простоя. Сбой может быть вовсе не в полосе, а в состоянии resume.
Стратегия захвата
Для отладки сбоев изохронных передач:
- Захватите с момента до запуска потока.
- Зафиксируйте выбранную конфигурацию и alternate setting.
- Держите дескрипторы конечной точки на виду.
- Захватите первый слышимый или видимый сбой.
- Отметьте примерное время пользовательского глитча.
- Изучите статусы пакетов вокруг этого времени.
- Сравните работающие и сбойные разрешения или sample rate.
- Сравните прямой порт и подключение через концентратор.
Не отбрасывайте рано пакеты настройки. Выбранный alternate setting часто критически важен.
Чек-лист по изохронным сбоям USB
Действуйте так:
- Определите скорость устройства и путь по шине.
- Изучите дескрипторы и изохронные конечные точки.
- Определите выбранный alternate setting.
- Сравните требуемую полосу с условиями шины.
- Ищите ошибки статуса пакетов вокруг сбоя.
- Проверьте, не запускает ли другое устройство высокополосный трафик.
- Проверьте на меньшем разрешении, частоте кадров или sample rate.
- Проверьте прямой порт, другой контроллер и концентратор с питанием.
- Проверьте тайминги suspend/resume.
- Сохраните тайминги пакетов при передаче трассы.
Итоговый диагноз
Сбои изохронных USB-передач — это проблемы таймингов и планирования не меньше, чем проблемы устройства. Щелчки в аудио и зависания веб-камеры могут возникать из-за ограничений полосы, alternate settings, давления хост-контроллера, топологии концентратора, управления питанием, таймингов прошивки или задержек потребления в приложении.
Bus Scope помогает показать реальные данные USB-потока, чтобы медиа-глитч диагностировался как проблема таймингов на шине, а не просто как размытый сбой приложения.