基于 SPI 的 HID 的即插即用支持

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

驱动程序加载

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

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

字段 ACPI 对象 格式 注释
硬件 ID 供应商特定 _藏 采用 VVVVdddd (格式的字符串,例如 MSFT0011) VendorID + DeviceID
兼容 ID PNP0C51 _Cid ACPIxxxx 或 PNPxxxx 格式的字符串 CompatibleID
子系统 供应商特定 _子 采用 VVVVsss (格式的字符串,例如MSFQ1234) SubVendorID + SubSystemID
硬件修订版 供应商特定 _Hrv 0xRRRR (2 字节修订) 硬件修订号
当前资源设置 供应商特定 _Crs 字节流 - 用于访问设备的 SpiSerialBus。
- 用于中断的 GpioInt。
特定于设备的方法 GUID {6e2ac436-0fcf-41af-a265-b32a220dcfab} _Dsm 定义包含设备特定信息的 结构。
设备重置方法   _RST   符合 ACPI 6.0 7.3.25 的设备重置方法,由主机 OS 作为 ACPI FLDR 调用。

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

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

有关其他信息,请参阅 ACPI) 6.0 (高级配置和电源接口规范。

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

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

硬件标识符:兼容标识符

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

ACPI\Vid_xxxxPid_yyyy;

ACPI\xxxxyyyyy;

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

注意

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

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

硬件标识符:兼容标识符

HID\VEN_MSFT&DEV_0010&REV_0002&Col01;:不适用

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

-HID\*MSFT0010Col01:不适用

-HID_DEVICE_UP:FF00_U:0001;: 不适用

-HID_DEVICE:不适用

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

设备枚举序列

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

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

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

  2. 向设备发出主机发起的重置

    • 调用 ACPI _RST 方法
    • 设备断言 GPIO 中断
    • 主机从设备读取重置响应
  3. 从设备检索 HID 描述符

    • 主机写入 HID 描述符请求
    • 设备断言 GPIO 中断
    • 主机读取 HID 描述符响应
  4. 检索报表描述符

    • 主机写入报告描述符请求
    • 设备断言 GPIO 中断
    • 主机读取报告描述符响应

如果主机未能成功完成设备的任何步骤,则 HIDSPI 驱动程序可能会加载错误代码 10。 如果未收到响应,主机可能会重新尝试重置设备,但不能保证重试逻辑。

HID 报表操作

下表概述了 HID SPI 协议支持的 HID 报告操作,以及用于执行该操作的输入和输出报告。

HID 报告类型 操作 输出报告类型 输入报告类型
输入报告 GET 0x06
(请求 - 空内容)
0x0B
(响应)
输入报告 SET
(不支持)
N/A N/A
输入报告 中断 IN 不适用 - 无请求 0x01
功能报告 GET 0x04
(请求 - 空内容)
0x05
(响应)
功能报告 SET 0x03 0x09
(确认 - 空内容)
输出报告 GET
(不支持)
N/A N/A
输出报告 SET 0x05 0x0A
(确认 - 空内容)

协议操作

操作 请求报告类型 响应报告类型
设备描述符请求 0x01 0x7
报告描述符请求 0x02 0x8
命令请求 0x07 0x4
重置响应 N/A 0x3

另请参阅

ACPI 源语言 (ASL)