Отладка alternate setting и полосы пропускания USB: почему аудио, UVC и потоковые интерфейсы ломаются на высоком качестве
Как отлаживать alternate settings USB, резервирование полосы, режимы UVC-камеры, sample rate аудио, изохронные конечные точки, переключение интерфейсов и сбои высококачественных потоков.
Многие USB-потоковые устройства работают на низком качестве, но ломаются на высоком. Веб-камера работает на 720p, но зависает на 1080p. USB-аудиоинтерфейс работает на 48 кГц, но щёлкает на 192 кГц. Устройство захвата стартует в одном режиме, но падает, когда приложение выбирает другой. Пользователи ищут «USB alternate setting bandwidth», «UVC camera alternate setting», «USB audio isochronous bandwidth», «SET_INTERFACE streaming failed», «USB device works low resolution not high resolution», потому что устройство не полностью сломано — один из режимов интерфейса сбоит.
Bus Scope полезен, потому что alternate settings видны в дескрипторах и SET_INTERFACE-запросах. Главное доказательство — какой alternate setting был выбран перед сбоем.
Что такое alternate settings
USB-интерфейс может определять несколько alternate settings. Alternate setting 0 часто не имеет потоковых конечных точек. Более высокие alternate settings могут включать конечные точки с разными размерами пакетов и требованиями к полосе.
Пример:
Interface 1 alternate 0: no streaming
Interface 1 alternate 1: low bandwidth endpoint
Interface 1 alternate 2: medium bandwidth endpoint
Interface 1 alternate 3: high bandwidth endpoint
Хост выбирает один через:
SET_INTERFACE interface=1 alternate=3
Если alternate 3 требует больше полосы, чем шина может дать, поток может упасть.
Режимы UVC-камер
Камеры класса USB Video часто выставляют много режимов:
- MJPEG против несжатого YUY2
- 720p против 1080p против 4K
- 15 fps против 30 fps против 60 fps
- Разные размеры пакетов конечных точек
- Разные alternate settings
Несжатое видео может требовать значительно больше полосы, чем MJPEG. Камера может перечислиться корректно, но падать, когда приложение выбирает агрессивный режим.
Sample rate USB-аудио
Аудиоинтерфейсы могут переключать alternate settings для sample rate, числа каналов, битовой глубины и размера пакета. Режим, который работает на одном хост-контроллере, может падать через концентратор или док.
Симптомы:
- Щелчки и попытки на высоком sample rate.
- Поток падает только с большим числом каналов.
- Устройство работает после переподключения, но падает после смены режима.
- Аудио останавливается, когда другое USB-устройство начинает трафик.
Трасса шины должна показать выбранный alternate setting и статус изохронных пакетов.
Резервирование полосы
Изохронные и interrupt-передачи резервируют периодическую полосу. Если шина не может выполнить запрос, хост может отклонить выбор интерфейса или поток пойдёт плохо.
Давление на полосу идёт от:
- Нескольких камер на одном концентраторе.
- USB-аудио плюс устройство захвата.
- Full-speed-устройства за transaction translator.
- Топологии дока.
- Лимитов планирования хост-контроллера.
- Отката скорости из-за кабеля.
Чек-лист отладки
Используйте такой сценарий:
- Захватите дескрипторы с момента подключения.
- Перечислите alternate settings потокового интерфейса.
- Захватите
SET_INTERFACE-запрос. - Зафиксируйте выбранный alternate setting.
- Сравните работающие и сбойные режимы качества.
- Изучите max packet size и interval конечной точки.
- Проверьте согласованную скорость устройства.
- Проверьте прямой порт против концентратора/дока.
- Уменьшите разрешение, частоту кадров, sample rate или число каналов.
- Сохраните setup- и потоковые пакеты вместе.
Итоговый диагноз
Сбои alternate setting USB — это проблемы выбора режима и полосы. Устройство может перечислиться и работать в одном режиме, но падать, когда хост выбирает более прожорливый alternate setting.
Bus Scope помогает показать выбранный режим интерфейса и данные по конечным точкам, чтобы сбои высококачественного потока диагностировались как поведение USB-полосы и дескрипторов, а не как размытая нестабильность приложения.