Что означает код возврата ядра macOS 0xE0004007 (kIOUSBWrongPIDErr)?

 
Предыдущий Следующий
kIOUSBPIDCheckErr kIOUSBReserved1Err

kIOUSBWrongPIDErr

В допустимом по форме пакете идентификатор появился не на том этапе транзакции

kIOUSBWrongPIDErr отличается от ошибки проверки PID. Здесь идентификатор пакета распознаётся, но является неправильным или неожиданным для состояния транзакции, которое обрабатывал контроллер. Поэтому сбой относится к последовательности транзакции или наблюдаемому на шине событию, а не просто к неверному буферу прикладной команды.

Не объединяйте этот результат с kIOUSBPIDCheckErr. Ошибка проверки PID означает, что не сошлись собственные контрольные биты идентификатора. Wrong PID означает, что распознаваемый идентификатор не подходит ожидаемой фазе token, data или handshake. Оба состояния могут потребовать восстановления endpoint, но при анализе трассы задают разные вопросы.

Что проверить до повтора

  • Сохраните транзакцию вокруг сбоя целиком: адрес endpoint, направление, тип передачи, setup или class request при наличии и последнюю успешную последовательность пакетов.
  • Проверьте, соответствуют ли выбранные приложением тип и направление endpoint активной конфигурации и alternate setting. Устройство может иметь несколько интерфейсов с похожими номерами конечных точек, но разным назначением.
  • Сопоставьте код со сбросами, событиями resume, заменой кабеля или концентратора и параллельным доступом к тому же endpoint. Нарушение последовательности может следовать за переходом жизненного цикла, даже если прикладной запрос не изменился.
  • Выбирайте восстановление согласно протоколу класса устройства. Очистка endpoint или повторное перечисление способны восстановить транспорт, но не делают автоматический повтор частично выполненной неидемпотентной операции безопасным.

Код не заменяет полную трассу пакетов

Apple указывает, что некоторые пути контроллера сообщают более грубые ошибки, чем исходное событие. Код полезен для определения слоя сбоя, однако до обвинения прошивки устройства или хост-приложения его нужно дополнить диагностикой контроллера и контекстом конечной точки.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.