| Предыдущий | Следующий |
| kIOUSBCRCErr | kIOUSBDataToggleErr |
kIOUSBBitstufErr
Это ошибка последовательного кодирования, а не полезной нагрузки приложения
kIOUSBBitstufErr сообщает, что USB-приёмник не смог принять схему вставки битов в транзакции. Аппаратный блок последовательного интерфейса USB выполняет декодирование NRZI и вставку или удаление битов до того, как верхние уровни увидят поля пакета. Поэтому результат относится к уровню ниже протокола класса устройства: изменение JSON, байтов отчёта HID, команды накопителя или другой прикладной нагрузки напрямую не исправляет некорректную последовательность на линии.
Отделяйте этот результат от kIOUSBCRCErr, при котором декодированное поле не проходит проверку целостности, и от kIOUSBDataToggleErr, при котором хост и конечная точка рассинхронизированы по последовательности данных неизохронной передачи. Это разные стадии сбоя, которые нельзя объединять в одну общую категорию ошибок USB.
Что следует сравнить
- Сохраните адрес конечной точки, направление и тип передачи, скорость USB, кабель, ориентацию разъёма, если она имеет значение, и все концентраторы или док-станции между устройством и контроллером хоста.
- Выполните ту же воспроизводимую передачу через прямой порт хоста и другой путь концентратора. Результат, перемещающийся вместе с путём, информативнее результата, привязанного только к названию продукта.
- Проверьте, появляется ли сбой только при длительном трафике, после сна или пробуждения либо только на определённой согласованной скорости. Эти наблюдения сужают границу между поведением устройства, питанием или качеством сигнала и обработкой конкретного контроллера.
- При разработке устройства исследуйте блок последовательного интерфейса USB и трассу анализатора протокола, а не только статус обратного вызова драйвера. Вставка битов обрабатывается на стадии линейного кодирования.
Не делайте чрезмерных выводов только по названию
Apple указывает, что некоторые пути контроллера хоста могут сообщать менее конкретные ошибки, чем событие на стороне устройства. Рассматривайте kIOUSBBitstufErr как конкретный симптом нарушения целостности транспорта, но до назначения единственной причины подтвердите его физическим путём, диагностикой контроллера и трассировкой.
Ссылки
- Apple: аппаратные коды ошибок IOUSBFamily
- Apple: классы USB-передач и сообщения об ошибках
- USB-IF: последовательный интерфейс USB, NRZI и вставка битов
Нужно найти другой код? Найти другой код состояния или ошибки.