Отладка bInterval interrupt-конечной точки USB: поллинг, latency HID, Full-Speed vs High-Speed и пропущенный ввод
Как отлаживать bInterval interrupt-конечной точки USB, частоту поллинга, latency HID, пропущенные input-репорты, правила интервалов Full-Speed vs High-Speed и ошибки endpoint descriptor.
USB interrupt-конечные точки используются клавиатурами, мышами, игровыми контроллерами, датчиками, тач-панелями, сканерами штрихкодов, UPS и многими кастомными HID-инструментами. Пользователи ищут «USB bInterval», «HID polling rate», «USB interrupt endpoint latency», «missed input reports», «USB device 125Hz 250Hz 1000Hz», «bInterval full speed high speed», когда ввод ощущается задержанным или репорты приходят с неправильной частотой.
Bus Scope полезен тем, что поведение поллинга задаётся endpoint descriptors и реальным таймингом шины. UI ОС может показать только «device connected»; захват покажет, какой интервал хост реально использует.
Что значит bInterval
Дескриптор interrupt-конечной точки содержит bInterval. Это значение описывает интервал поллинга, но интерпретация зависит от скорости и типа конечной точки.
Важные отличия:
- Low-speed и full-speed interrupt-конечные точки используют миллисекундные фреймовые интервалы.
- High-speed interrupt-конечные точки используют другую кодировку на основе микрофреймов.
- Расписание хост-контроллера и топология концентратора могут влиять на наблюдаемый тайминг.
- Read-тайминг приложения — это не то же, что USB-поллинг.
Если инженер смотрит только на колбэки приложения, он может пропустить реальное расписание конечной точки.
Типичные симптомы
Проблемы с интервалом поллинга проявляются как:
- Мышь или контроллер кажется лаговой.
- HID input-репорты приходят каждые 8 мс вместо 1 мс.
- Устройство заявляет 1000 Гц, но ведёт себя как 125 Гц.
- Данные датчика рваные.
- Сканер штрихкодов теряет быстрые сканирования.
- Тач-панель задерживается после resume.
- Прошивка шлёт репорты чаще, чем хост поллит.
- High-speed-режим неожиданно меняет тайминги репорта.
Эти проблемы часто выглядят как latency или отзывчивость, но корневые доказательства в USB-дескрипторе и таймингах пакетов.
Интерпретация Full-Speed vs High-Speed
Одно и то же числовое значение bInterval может означать разное эффективное время в зависимости от скорости. Full-speed HID-конечная точка с bInterval=8 — это не та же модель расписания, что high-speed-конечная точка с тем же байтом.
Отладка должна захватить:
- Реальная согласованная скорость.
- Endpoint descriptor.
- Адрес конечной точки.
- Transfer type.
bInterval.- Наблюдаемая каденция IN-токенов или передач.
- Тайминг payload репорта.
Bus Scope должен показать значения дескрипторов и наблюдаемые тайминги вместе.
Перепроизводство прошивки
Некоторые прошивки генерируют input-репорты чаще, чем хост поллит. Эти репорты могут быть перезаписаны, слиты или отброшены до того, как хост их увидит.
Симптомы:
- Внутренние логи устройства показывают события.
- Хост получает меньше репортов.
- Быстрые нажатия кнопок пропускаются.
- Движение выглядит сглаженным или задержанным.
- После бёрста в репортах только последнее состояние.
Это не потеря пакетов на USB. Это баг контракта буферизации прошивки и поллинга.
Поллинг хоста ≠ частота чтения приложения
Приложение может читать каждую 1 мс, но хост USB может поллить только каждые 8 мс. Или хост поллит вовремя, а event loop приложения обрабатывает данные позже.
Пакетный захват разделяет:
- Интервал поллинга шины.
- Тайминг ответа устройства.
- Буферизацию хост-драйвера.
- Задержку колбэка приложения.
Это разделение критично для кейсов поддержки по latency HID.
Ошибки bInterval в дескрипторе
Типичные ошибки дескриптора:
- Случайно заявлен
bInterval=10вместо1. - Неверное копирование full-speed-интервала в high-speed-дескриптор.
- Использование одного интервала в ожиданиях HID-дескриптора и другого в endpoint descriptor.
- Комментарии в прошивке утверждают 1000 Гц, а дескриптор — медленнее.
- Alternate setting меняет интервал, а прошивка этого не обрабатывает.
Байт в дескрипторе — это контракт, относительно которого хост строит расписание.
Чек-лист отладки
Используйте такой воркфлоу:
- Захватите перечисление.
- Определите endpoint descriptors interrupt-конечных точек.
- Зафиксируйте реальную скорость устройства.
- Декодируйте
bInterval. - Измерьте наблюдаемую каденцию interrupt IN.
- Сравните с ожидаемой частотой поллинга.
- Триггерьте быстрые события ввода.
- Проверьте, не пропущены ли или не слились репорты.
- Сравните прямой порт и через концентратор.
- Сохраните дескриптор и данные тайминга вместе.
Итоговый диагног
USB interrupt-latency — это не только проблема производительности приложения. Она зависит от endpoint bInterval, режима скорости, расписания хоста, генерации репортов и буферизации прошивки.
Bus Scope помогает доказать, реально ли HID или interrupt-устройство опрашивается с целевой частотой и вызван ли пропущенный ввод дескрипторными настройками, буферизацией прошивки или таймингами хоста/приложения.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Проверка USB-контракта для «Отладка bInterval interrupt-конечной точки USB: поллинг, latency HID, Full-Speed vs High-Speed и пропущенный ввод»
Краткий ответ: STALL, timeout или reset сам по себе не объясняет причину. Сначала докажите, что provider видит нужный device, затем прочитайте контракт transfer: тип, направление, recipient, wValue, wIndex, заявленная и фактическая длина, status и состояние до/после. Свяжите вывод с первой транзакцией, отличающейся от исправного запуска.
| Граница | Сравнение | Решение |
|---|---|---|
| Платформа | provider, права, Root Hub или usbmon/XHC20 | Records относятся к нужному соединению? |
| Setup | bmRequestType, bRequest, wValue, wIndex, wLength | Host отправил ожидаемый запрос? |
| Data | направление, длина и сохранённые bytes | Payload соответствует контракту? |
| Status | ACK, STALL, timeout или cancellation | Где завершилась транзакция? |
| Состояние | configuration, interface, alternate setting, halt | Device был готов к запросу? |
Начинайте до reset и enumeration, сохраняя descriptors, SET_CONFIGURATION, SET_INTERFACE и command перед отказом. Узкий endpoint filter может скрыть решающий control transfer. В одном опыте выполняйте одно USB-действие и меняйте только firmware, driver, port, cable, host command или timing.
Как написать цитируемый ответ?
Укажите request, setup fields, ответ и предыдущее состояние, затем тест с одной переменной. Не сохранённые из-за retention bytes не доказывают packet loss. Близость command и reset показывает корреляцию, но не причину без повторения или перехода состояния.
Сохраняйте VID/PID, firmware, speed, topology, provider, filter и trigger. Сравнивайте смысловые USB-фазы, а не frame numbers usbmon и USBPcap. Запишите начало, конец, версию, OS, подключение и checksum. Используйте устранение неполадок Bus Scope.
Semrush owners разделены: free USB analyzer принадлежит продукту, best USB protocol analyzer — сравнению, USB descriptor viewer — руководству descriptor. Для этой support-страницы не создаётся выдуманный volume или KD.
<!-- bus-scope-localized-transaction-foundation-v1:end --><!-- multilingual-blog-closeout:start -->Прямой ответ и граница приемки
Краткий ответ по теме «Отладка bInterval interrupt-конечной точки USB: поллинг, latency HID, Full-Speed vs High-Speed и пропущенный ввод»: Как отлаживать bInterval interrupt-конечной точки USB, частоту поллинга, latency HID, пропущенные input-репорты, правила интервалов Full-Speed vs High-Speed и ошибки endpoint descriptor. Считайте это проверяемым результатом, а не обещанием для любого входа, устройства, проекта или окружения. Полный результат фиксирует исходное состояние, точное действие, видимый выход и условие, подтверждающее завершение задачи в Bus Scope.
Порядок работы от доказательств
Начните с небольшого повторяемого случая до изменения полного проекта. Запишите версию приложения, систему, идентификатор входа или устройства, важные настройки и ожидаемый результат. Выполните одно осознанное действие, сохраните первый неожиданный переход и сравните с исправным случаем, если он есть. Одновременная смена нескольких параметров скрывает условие, создавшее или устранившее проблему.
Контрольная точка 1: Отладка bInterval interrupt-конечной точки USB: поллинг, latency HID, Full-Speed vs High-S
Сформулируйте для «Отладка bInterval interrupt-конечной точки USB: поллинг, latency HID, Full-Speed vs High-Speed и пропущенный ввод» воспроизводимое условие успеха или отказа. Укажите, что должно присутствовать, отсутствовать и какое восстановление безопасно. Сохраняйте исходный проект или захват до прохождения той же проверки исправленной копией.
Контрольная точка 2: Как отлаживать bInterval interrupt-конечной точки USB, частоту поллинга, latency HID, проп
Рассматривайте «Как отлаживать bInterval interrupt-конечной точки USB, частоту поллинга, latency HID, пропущенные input-репорты, правила интервалов Full-Speed vs High» как отдельную границу приемки для «Отладка bInterval interrupt-конечной точки USB: поллинг, latency HID, Full-Speed vs High-Speed и пропущенный ввод». Зафиксируйте состояние до действия, первое видимое изменение и конечное состояние. Если результат отличается от заявленной цели, вернитесь к последней подтвержденной точке, а не продолжайте на предположениях.
Контрольная точка 3: Что значит bInterval
Сформулируйте для «Что значит bInterval» воспроизводимое условие успеха или отказа. Укажите, что должно присутствовать, отсутствовать и какое восстановление безопасно. Сохраняйте исходный проект или захват до прохождения той же проверки исправленной копией.
Контрольная точка 4: Типичные симптомы
Рассматривайте «Типичные симптомы» как отдельную границу приемки для «Отладка bInterval interrupt-конечной точки USB: поллинг, latency HID, Full-Speed vs High-Speed и пропущенный ввод». Зафиксируйте состояние до действия, первое видимое изменение и конечное состояние. Если результат отличается от заявленной цели, вернитесь к последней подтвержденной точке, а не продолжайте на предположениях.
Контрольная точка 5: Интерпретация Full-Speed vs High-Speed
Сформулируйте для «Интерпретация Full-Speed vs High-Speed» воспроизводимое условие успеха или отказа. Укажите, что должно присутствовать, отсутствовать и какое восстановление безопасно. Сохраняйте исходный проект или захват до прохождения той же проверки исправленной копией.
Контрольная точка 6: Перепроизводство прошивки
Рассматривайте «Перепроизводство прошивки» как отдельную границу приемки для «Отладка bInterval interrupt-конечной точки USB: поллинг, latency HID, Full-Speed vs High-Speed и пропущенный ввод». Зафиксируйте состояние до действия, первое видимое изменение и конечное состояние. Если результат отличается от заявленной цели, вернитесь к последней подтвержденной точке, а не продолжайте на предположениях.
Контрольная точка 7: Поллинг хоста ≠ частота чтения приложения
Сформулируйте для «Поллинг хоста ≠ частота чтения приложения» воспроизводимое условие успеха или отказа. Укажите, что должно присутствовать, отсутствовать и какое восстановление безопасно. Сохраняйте исходный проект или захват до прохождения той же проверки исправленной копией.
Контрольная точка 8: Ошибки bInterval в дескрипторе
Рассматривайте «Ошибки bInterval в дескрипторе» как отдельную границу приемки для «Отладка bInterval interrupt-конечной точки USB: поллинг, latency HID, Full-Speed vs High-Speed и пропущенный ввод». Зафиксируйте состояние до действия, первое видимое изменение и конечное состояние. Если результат отличается от заявленной цели, вернитесь к последней подтвержденной точке, а не продолжайте на предположениях.
Контрольная точка 9: Чек-лист отладки
Сформулируйте для «Чек-лист отладки» воспроизводимое условие успеха или отказа. Укажите, что должно присутствовать, отсутствовать и какое восстановление безопасно. Сохраняйте исходный проект или захват до прохождения той же проверки исправленной копией.
Контрольная точка 10: Итоговый диагног
Рассматривайте «Итоговый диагног» как отдельную границу приемки для «Отладка bInterval interrupt-конечной точки USB: поллинг, latency HID, Full-Speed vs High-Speed и пропущенный ввод». Зафиксируйте состояние до действия, первое видимое изменение и конечное состояние. Если результат отличается от заявленной цели, вернитесь к последней подтвержденной точке, а не продолжайте на предположениях.
Матрица приемки
| Точка | Сохраняемое доказательство | Критерий успеха |
|---|---|---|
| Отладка bInterval interrupt-конечной точки USB: поллинг, latency HID, Full-Speed vs High-Speed и пропущенный ввод | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Как отлаживать bInterval interrupt-конечной точки USB, частоту поллинга, latency HID, пропущенные input-репорты, правила | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Что значит bInterval | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Типичные симптомы | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Интерпретация Full-Speed vs High-Speed | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
| Перепроизводство прошивки | Исходное состояние, одно действие и результат | Второй оператор воспроизводит заявленный результат |
Изоляция, восстановление и передача
Остановитесь на первой неуспешной границе. Сохраните источник, проект, сеанс или захват, сделайте копию перед разрушающим редактированием и меняйте одну переменную за опыт. Повтор широкого процесса после нескольких изменений может дать иной результат без объяснения причины.
Отличайте отсутствие доказательств от доказательства отсутствия. Пустой экран может означать неверный вход, область, фильтр, права, устройство, период или состояние проекта. Подтвердите получение или импорт до толкования decoder, редактора, отчета или экспорта.
Перед передачей повторно откройте артефакт и проверьте начало, точку решения и конец. Запишите версию, платформу, конфигурацию, ожидание, наблюдение и минимальное воспроизведение. Удалите или скройте чувствительные данные и проверьте полномочия получателя.
Вопросы и ответы
Как надежнее всего начать?
Возьмите минимальный репрезентативный случай, запишите ожидаемый результат и меняйте одну переменную. Подтвердите базовый путь до добавления фильтров, эффектов, правок, автоматизации или большого источника.
Какие доказательства сохранять?
Сохраните идентификатор входа, версию, платформу, настройки, точное действие, первый неожиданный переход и конечный выход. Закройте и повторно откройте проект, сеанс, отчет или экспорт.
Когда повторять процедуру?
После значимого изменения приложения, системы, драйвера, прошивки, модели, источника или процесса. Сохраните предыдущий принятый случай как неизменную основу сравнения.
Когда результат готов к передаче?
Когда другой уполномоченный человек определяет вход, повторяет действие, видит тот же результат, понимает ограничения и открывает артефакт без недокументированного локального состояния.
Связанные руководства
Эти страницы на том же языке описывают соседние этапы, не меняя канонического владельца темы:
- Восстановление USB-конечной точки после halt: CLEARFEATURE, циклы STALL, сбои bulk и сброс драйвера
- Несовпадение max packet size конечной точки USB: отладка wMaxPacketSize, коротких пакетов, bulk-передач и багов буфера
- STALL конечной точки USB и тайм-аут bulk-передачи: чтение захвата до правки прошивки