即插即用 I2C 支持

本文介绍对通过 I2C 传输支持 HID 的设备的即插即用支持。

驱动程序加载

Windows 基于硬件标识符与 INF 之间的兼容标识符匹配加载 HID I2C 类驱动程序。 高级配置和电源接口(ACPI)生成标识符。 为 ACPI 中的 I2C 设备节点生成硬件标识符。 除唯一硬件标识符外,所有 HID I2C 兼容设备都必须公开兼容性标识符。

ACPI 5.0 规范包括对 HID 类设备的支持。 HID I2C 的 ACPI 定义如下所示。

字段 ACPI 对象 Format 注释
兼容 ID PNP0C50 _CID ACPI0C50或PNP0C50格式的字符串 CompatibleID
硬件 ID 供应商特定 _HID 采用 VVVVdddd 格式的字符串(例如NVDA0001) VendorID + DeviceID
子系统 供应商特定 _子 采用 VVVVSss 格式的字符串(例如INTL1234) SubVendorID + SubSystemID
硬件修订版本 供应商特定 _HRV 0xRRRR (双字节修订) RevisionID
当前资源设置 供应商特定 _CRS 字节流 必须包括 I2CSerialBus 和 i2C 控制器和 GPIO 中断中断的GPIO_INT。
设备特定方法 GUID {3CDFF6F7-4267-4555-AD05-B30A3D8938DE} _DSM 程序包 定义包含 HID 描述符地址的结构。

每个 HID I2C 设备都必须提供以下必填字段:

  • 兼容 ID
  • 硬件 ID
  • 硬件修订版本
  • 当前资源设置
  • 设备特定方法

有关详细信息,请参阅 高级配置和 Power Interface 规范版本 5.0

以下硬件 ID 和兼容的 ID 为随机 HID I2C 设备提供了一个示例。 这些详细信息基于一个示例设备,该设备将自身报告为 HID,该 HID 具有一个顶级类“特定于供应商”的集合。

高级配置和电源接口(ACPI)生成以下硬件 ID 和兼容的 ID 以加载 HID I2C 传输驱动程序:

硬件标识符:兼容的标识符

ACPI\Vid_xxxx&Pid_yyyy&Rev_zzzz;:ACPI\PNP0C50

ACPI\Vid_xxxxPid_yyyy;

ACPI\xxxxyyyy;

在前面的示例中,硬件 ID 是使用从示例设备的 _HID ACPI 方法中提取的值生成的。 使用从示例设备的 _CID ACPI 方法中提取的值生成兼容 ID。 对于版本 1.0,HID over I2C 的兼容 ID 必须始终PNP0C50。

请注意 ,如果提供 INF,则只应使用上表左列中的硬件标识符。 (不要在右侧列中使用兼容的标识符。

HIDClass.sys组件生成的 HID 客户端设备节点的硬件 ID 如下所示:

硬件标识符:兼容的标识符

HID\VEN_MSFT&DEV_0010&REV_0002&Col01;:N/A

-HID\VEN_MSFT&DEV_0010&Col01 HID\MSFT0010&Col01;:N/A

-HID\*MSFT0010Col01: N/A

-HID_DEVICE_UP:FF00_U:0001;:N/A

-HID_DEVICE:N/A

HIDClass.sys生成硬件 ID,并且对于所有传输都是相同的。 此标识符基于从 HIDI2C.sys(从 ACPI 提取)传递到HIDClass.sys的值。

设备枚举序列

加载 HID I2C 设备驱动程序(HIDI2C.sys)后,它会开始通过 I2C 总线与设备通信。 驱动程序执行的第一个操作是设备枚举序列。

以下列表提供枚举序列。 此列表的顺序可能会在将来的 Windows 版本中更改。

  1. 从系统 BIOS 检索 HID I2C 设备的 ACPI 源语言 (ASL) 代码。

  2. 从设备检索 HID 描述符。

    • 写入 HID 描述符地址
    • 读取 HID 描述符
  3. 向设备发出SET_POWER。

    • 写入SET_POWER命令
  4. 向设备发出 RESET(主机启动重置)。

    • 写入 RESET 命令
    • 设备断言 GPIO 中断
    • 从输入寄存器读取值(0x00 0x00)
  5. 从设备检索报表描述符。

    • 编写报告描述符地址
    • 读取报表描述符

如果主机未能使用 DEVICE 成功完成任何步骤 1-5,HIDI2C 驱动程序可能会加载错误代码为 10 的错误值。 这些命令中没有内置任何重试逻辑。

注意: 可以并行执行步骤 4 和 5,以优化 I2C 上的时间。 由于报表描述符(a)静态和(b)长,因此 Windows 8 可能会在 4 上等待设备响应时发出 5 的请求。

支持的 HID I2C 命令

HIDI2C.SYS驱动程序支持以下命令:

命令 用途 使用时
重置 Windows 支持主机启动的重置。 Windows 在以下方案中发出此命令 - 设备初始化 - 禁用/启用 - 卸载/重新安装
获取/Set_Report Windows 支持 Get/Set_Report 命令。 Windows 在以下情况下发出此命令 - 当 HID 客户端驱动程序发出获取/设置功能报告请求 - 当 HID 客户端驱动程序发出同步输入/输出报告时
Set_Power Windows 支持 Set_Power 命令 Windows 在以下情况下(当系统转换为低功率 S3/连接待机状态时)关闭系统时发出此命令。