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

 
Предыдущий Следующий
kIOReturnNotFound kIOUSBBitstufErr

kIOUSBCRCErr

Нарушение целостности на транспортном уровне USB

kIOUSBCRCErr указывает на неудачную проверку циклического избыточного кода при обработке транзакции стеком USB. CRC защищает передаваемые поля токена и данных и находится ниже прикладного кадрирования, форматов файлов и команд классов. Поэтому корректный на вид буфер запроса в приложении не исключает это состояние: ошибка относится к данным, которые USB-приёмник смог проверить на шине.

Этот код следует отличать от kIOUSBPIDCheckErr. USB защищает идентификатор пакета отдельной проверкой дополнения, а CRC5 и CRC16 — поля токена и данных. Он также отличается от kIOUSBBitstufErr, относящегося к последовательному кодированию, а не к контрольной сумме декодированного поля.

Данные, делающие результат пригодным для диагностики

  • Запишите адрес конечной точки, направление, тип передачи, запрошенную и завершённую длину, согласованную скорость и путь родительского концентратора. Одно имя устройства теряет часть топологии, необходимую для сравнения.
  • Сохраните соседние события USB и диагностику контроллера. Apple отмечает, что некоторые пути контроллеров хоста сообщают более грубые ошибки, чем исходный ответ устройства, поэтому код не доказывает, что единственная причина — конкретный запрос приложения или процедура прошивки периферийного устройства.
  • Повторите ту же операцию через прямой порт, другой заведомо исправный кабель и другой путь концентратора. Изменения в этой матрице помогают отделить периферийное устройство от кабеля, концентратора, док-станции или контроллера.
  • Не повторяйте вслепую неидемпотентную команду устройства. Сначала выясните, может ли протокол определить, была ли команда принята до сбоя передачи.

Тип передачи имеет значение

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

Ссылки


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