| Предыдущий | Следующий |
| kIOReturnNotFound | kIOUSBBitstufErr |
kIOUSBCRCErr
Нарушение целостности на транспортном уровне USB
kIOUSBCRCErr указывает на неудачную проверку циклического избыточного кода при обработке транзакции стеком USB. CRC защищает передаваемые поля токена и данных и находится ниже прикладного кадрирования, форматов файлов и команд классов. Поэтому корректный на вид буфер запроса в приложении не исключает это состояние: ошибка относится к данным, которые USB-приёмник смог проверить на шине.
Этот код следует отличать от kIOUSBPIDCheckErr. USB защищает идентификатор пакета отдельной проверкой дополнения, а CRC5 и CRC16 — поля токена и данных. Он также отличается от kIOUSBBitstufErr, относящегося к последовательному кодированию, а не к контрольной сумме декодированного поля.
Данные, делающие результат пригодным для диагностики
- Запишите адрес конечной точки, направление, тип передачи, запрошенную и завершённую длину, согласованную скорость и путь родительского концентратора. Одно имя устройства теряет часть топологии, необходимую для сравнения.
- Сохраните соседние события USB и диагностику контроллера. Apple отмечает, что некоторые пути контроллеров хоста сообщают более грубые ошибки, чем исходный ответ устройства, поэтому код не доказывает, что единственная причина — конкретный запрос приложения или процедура прошивки периферийного устройства.
- Повторите ту же операцию через прямой порт, другой заведомо исправный кабель и другой путь концентратора. Изменения в этой матрице помогают отделить периферийное устройство от кабеля, концентратора, док-станции или контроллера.
- Не повторяйте вслепую неидемпотентную команду устройства. Сначала выясните, может ли протокол определить, была ли команда принята до сбоя передачи.
Тип передачи имеет значение
Документация macOS описывает обнаружение ошибок и повтор для управляющих, прерывающих и массовых передач, тогда как изохронные передачи не используют такую модель восстановления. Сохраните класс передачи, прежде чем считать наличие или отсутствие повтора доказательством поведения устройства.
Ссылки
- Apple: kIOUSBCRCErr
- Apple: типы USB-передач, остановки и детализация ошибок контроллера
- USB-IF: циклические избыточные коды в USB
Нужно найти другой код? Найти другой код состояния или ошибки.
