Поделиться через


Обработка ошибок для HID через SPI

В этой статье рассматриваются процедуры обнаружения и обработки ошибок для HID через SPI. Ошибки в шине SPI делятся на следующие категории:

  • Ошибки протокола
  • Ошибки, связанные с истечением времени ожидания

Ошибки протокола

Ошибки протокола далее характеризуются следующими классификациями:

  • Ошибки коротких пакетов
  • Ошибки битового уровня

Ошибки коротких пакетов

Ошибки коротких пакетов возникают, когда узел или устройство не возвращают количество битов, определенное в поле запроса и длины протокола HID SPI. Ожидается, что узел будет часы в указанном количестве битов. Узел не может узнать, перестало ли устройство отправлять данные, так как узел будет считывать все, что происходит в шине. Ожидается, что узел проверка поля синхронизации и другие поля, чтобы узнать, являются ли данные разумными. Поведение узла для непредвиденных или недопустимых данных заключается в инициировании сброса устройства.

Ошибки битового уровня

Ошибки битового уровня могут возникать в шине SPI. Эти ошибки, как правило, являются результатом шума в автобусе или помехи от других автобусов в системе. Эта спецификация не поддерживает CRC или другой механизм обнаружения ошибок битового уровня в строке данных SPI.

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

Ошибки, связанные с истечением времени ожидания

Протокол HID по протоколу SPI является последовательным и ожидает, что устройство должно своевременно отвечать на запросы узла. В большинстве случаев ответы от устройства к узлу выполняются в миллисекундах. Если устройство зависло и не может отменить изменения себя, возникает принудительная задержка времени ожидания, по истечении которой узел может сбросить устройство и перезапустить операции.

TIMEOUT_HostInitiatedReset = 1 second

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

Сброс, инициированный узлом

Узел может сбросить устройство, чтобы восстановить связь с устройством при обнаружении ошибки. Этот механизм предназначен для восстановления ошибок и должен быть в ответ на исключительное событие, например на восстановление связи с устройством, которое было подвержено разрядке ESD.