Как увеличить полосу пропускания USB video?

Программирую устройство - кастомную видеокамеру USB 2.0.
Поток - некомпрессированный
разрешение 1280*480
цветовое пространство YUYV ( 16 бит на пиксель)
Написал тест, который работает с максимальной частотой
отвечаю на каждый изохронный маркер

Получается максимальная частота кадров - 6.5 кадров в секунду
на 1 кадр приходится 1228800 байт ~ 1.17 мегабайтт
соответственно, достигаемая полоса 8 мегабайт в секунду (64 мегабита).
При этом, полоса пропускания USB HS - 480 мегабит в секунду.
Есть запас.

Видео передаётся по изохронному протоколу.
Тактирование один пакет каждые 125 микросекунд
получается 8 тыс килобайтных пакетов в секунду, что соответствует измерениям

Однако. В документации нарыл, что есть поле в дескрипторе,
которое говорит хосту отправлять дополнительные изохронные маркеры.

wMaxPacketSize биты 11..12

То есть, в один кадр USB протокола можно передать до 3-х изохронных пакетов
Флаг выставил.
lsusb -v показывает размер кадра 3x 1024

А фактически скорость передачи не изменилась.
Кто сталкивался с таким эффектом?
Может есть ещё какие-то биты, которые я не учитываю?
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
https://github.com/libusb/libusb/search?q=Isochronous
посмотрите что ожидает получить компьютер от вашего устройства
https://github.com/libusb/libusb/blob/9d23ed25b44a...
вот здесь идет чтение
как я понимаю нужно просто три раза сделать тоже самое - передать пакет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы