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


Устранение распространенных ошибок

В этой статье рассматриваются распространенные проблемы, с которыми могут столкнуться поставщики оборудования и разработчики драйверов при отладке встроенного ПО I2C или программного обеспечения драйвера.

Драйвер HIDI2C не загружается

Сценарий, когда драйвер контроллера I2C загружен, но устройство не отображается в Windows диспетчер устройств обычно возникает, если имеется недопустимый код языка источника ACPI (ASL) для узла или устройства. Чтобы определить, возникла ли проблема из-за сбоя сопоставления INF, обратитесь к файлу setupapi.dev.log. Другим индикатором того, что проблема связана с несоответствием, является код ошибки 10 в Windows диспетчер устройств.

Чтобы устранить проблему, убедитесь, что:

  • Значение _CID должно быть PNP0C50.
  • Характеристики контроллера и устройства I2C в BIOS должны быть точными.
  • Адрес дескриптора HID (для устройства) в BIOS должен быть точным.
  • Прерывание GPIO должно быть правильно идентифицировано и помечено как исключительное, уровень, Активный Низкий.

Дополнительные сведения см. в разделе 13 спецификации протокола HID I2C.

Недопустимый дескриптор отчета

Если хост не смог получить правильный дескриптор отчета от устройства, убедитесь, что:

  • Последовательность перечисления должна завершиться перед получением дескриптора отчета.
  • Байты смещения 4 и 6 в дескрипторе HID должны быть допустимыми. (Обратите особое внимание на длину.)

Если подтверждено, что правильный дескриптор отчета был получен с устройства, но проблема все еще существует, убедитесь, что:

  • Поле wReportDescLength является точным.
  • Отчет HID правильно отформатирован. (Чтобы проверить результаты, проверьте альтернативную шину, например USB.)

Вопросы и ответы

В этом разделе рассматриваются вопросы, часто задаваемые поставщиками оборудования и разработчиками драйверов.

  • Будет ли входящий драйвер HIDI2C Windows 8 работать для устройств HID, подключенных через I2C?

    • Да, он работает, если встроенное ПО соответствует этой спецификации протокола HID I2C
  • Что такое структура данных, взаимодействуемая между устройствами (такими как клавиатуры) и драйверами ОС?

    • Структура данных будет находиться в виде входного отчета, определенного дескриптором отчета, в соответствии со стандартом HID. Само устройство, а не HIDI2C определяет структуру входного отчета. Вы сообщаете о использовании клавиатуры так же, как и в случае USB-клавиатуры, а затем предоставьте дескриптор и соответствующие входные отчеты в соответствии со спецификацией HID I2C.
  • Если одновременно буферизаются несколько отчетов, что следует делать устройству?

    • Если буферизируются несколько отчетов, устройство должно сохранять прерывание, пока последний отчет не будет прочитан (подтвержден). До тех пор, пока после данной операции чтения остаются данные для передачи, устройство должно удерживать линию активированной, используя настройку GPIO с уровневым триггером.
  • Правильно ли сказать, что мы должны получить одинаковый DevicePath для подключения USB и I2C?

    • Нет, путь устройства не идентичен между USB и I2C. Различия являются незначительными, но примечательными. Дополнительные сведения см. в разделе "Идентификатор оборудования" в комплекте драйверов Windows (WDK).
  • Что такое обязательный предел передачи I2C, чтобы устройства HIDI2C использовали драйвер Windows inbox HIDI2C?

    • Для поддержки передачи до 4 КБ требуются все контроллеры I2C. Максимальная длина дескриптора отчета HID составляет 4 КБ.