简单外设总线 (SPB)

注意

本文包含对术语“从属”的引用,这是 Microsoft 不再使用的术语。 在从软件中删除该术语后,我们会将其从本文中删除。

本主题介绍 Windows 10 中简单外设总线的相关建议。Windows 通过内核模式驱动程序框架 (KMDF) 体系结构的框架扩展来支持低功耗的简单总线,例如内部集成电路 (I²C) 和简单外设接口 (SPI)。 控制器驱动程序不随机提供。 芯片组供应商、OEM 或 IHV 必须开发在 KMDF 中实现的控制器驱动程序。 该体系结构提供灵活的设备配置拓扑,支持对控制和数据事务同时使用总线,以及使用 GPIO 进行信号传输和中断。 完整的设备定义通过高级配置和电源接口 (ACPI) 来定义。

在 Windows 中,通过 KMDF 控制器驱动程序支持总线。 借助 KMDF 平台,控制器驱动程序主要用于定义启用控制器功能所需的硬件特定接口。

Windows 基础结构支持共享总线的设备、在同一线路上多路复用的总线以及通过 ACPI 进行的设备配置。 Windows 使用 ACPI 作为设备识别、配置和控制的主要手段。

下表总结了对简单外设总线的支持。

总线 内置支持 提供框架扩展 允许第三方 其他支持详细信息
I²C 是,使用 SPB 框架扩展

仅限主机

不支持“常规调用”

支持直接内存访问 (DMA)

SPI 是,使用 SPB 框架扩展

仅限主机,不支持“常规调用”

支持全双工

支持 DMA

MIPI-HSI 是,使用 Windows Driver Foundation (WDF)
MIPI-SLIMbus 是,使用 WDF
MIPI-CSI 是,使用 WDF
UART 是,使用串行框架扩展 (SerCx2)

支持 DMA

通过 SerCx2 支持自定义传输模式

关于 SPB 的设计注意事项

下面是关于 SPB 的一些通用注意事项:

  • SPB 不是即插即用总线。 外为设备通常有到 SPB 的固定连接,不能移除。 系统制造商必须确保 ACPI 中的信息准确无误,以便为即插即用管理器枚举通过 SPB 连接的外围设备,并指定专用于每个设备的硬件资源。

  • 对 SPB 没有带内中断支持。 大多数外围设备通过单独的中断(通常基于 GPIO)机制支持设备信号传输,并在 ACPI 中准确映射。

  • Windows 对 Windows 8 及更高版本中的 SPB 类扩展 (spbcx.sys) 提供支持。 SoC 合作伙伴负责开发和重新分发相应的 SPB 控制器驱动程序。

  • SPB 设备的外设驱动程序通常由 SPB 设备合作伙伴提供。 Microsoft 根据基于 I²C 的 HID (hidi2c.sys) 为 SPB 设备提供一个类驱动程序。

  • 设备类可能围绕以下 I²C 相关主题提供 HLK 要求或 WEG 指南:

    • 与其他设备共享 I²C 控制器
    • 首选 I²C 信号传输速度
    • 基于 I²C 和 GPIO 的电源管理和唤醒方案。
  • 内部集成电路 (I²C):I²C 是作为 SPB 一部分进行验证的主要总线,强烈推荐用于 SoC 系统。

    Microsoft 提供了 Windows 硬件兼容性计划的 I²C 要求。 使用 Windows Hardware Lab Kit (HLK) 根据这些要求测试设备。

  • 简单外设接口 (SPI):对 SPI 的支持是可选的,由 SoC 合作伙伴决定。 Windows 硬件兼容性计划不包含任何特定于 SPI 总线的要求。

跨系统支持 SPB

Microsoft 支持 Arm 系统和 x86/x64 平台上的 SPB(在 S3 配置中运行)。 Microsoft 支持以连接待机 (CS) 和 S3 配置运行的平台上的 SPB。

请联系平台提供商以获取驱动程序和支持。

有许多设备方案利用 SPB 进行连接。 I²C 适用于 CS 和 S3 传统电源型号。 具有 on-SoC 传感器低功耗核心的新式 SoC 可以根据需要实现非 I²C 解决方案。

可移动扩展坞/端口上的设备还应遵循 WEG 中也包含的入坞方案指南。 其中一些设备通过总线(如 USB)而不是 I²C 进行连接可能更有意义。

SPB 框架扩展

SPB 框架扩展库扩展了 Windows 驱动程序框架,以支持 SPB 驱动程序。 SPB 框架通过提供处理 I/O 请求的驱动程序“上半部分”(相对于由上半部分驱动并控制硬件的“下半部分”)的通用实现,简化了 SPB 控制器驱动程序的开发,并提高了外设驱动程序和控制器驱动程序之间的兼容性。 SPB 框架扩展是一个 KMDF 扩展库。 它处理 SPB 请求的前期处理以及将其传递给控制器​​驱动程序的顺序。 SPB 框架扩展设计为支持 I²C 和 SPI 总线,并且可能适用于具有类似语义的其他总线。

串行框架扩展

串行框架扩展库扩展了 Windows 驱动程序框架,以支持串行控制器驱动程序。 与 SPB 框架类似,串行框架通过提供处理 I/O 请求的驱动程序“上半部分”的通用实现,简化了串行控制器驱动程序的开发,并提高了外设驱动程序和控制器驱动程序之间的兼容性。 串行框架扩展是一个 KMDF 扩展库。 它处理对串行 API 的调用的前期处理以及将其传递给控制器​​驱动程序的顺序。 串行框架扩展旨在支持新式 UART 控制器并简化控制器驱动程序的实现和可诊断性。

I²C 和 UART HLK 要求

硬件兼容性计划包含 I²C 和 UART 控制器要求。 未来还会考虑增加 SPI 要求。 徽标要求主要面向总线接口硬件和相关控制器驱动程序的 SoC 芯片供应商。 OEM 和 ODM 不需要重新验证硬件或控制器驱动程序,但如果需要,支持其运行测试。 需要执行特殊的设置步骤来验证这些要求。 设置包括以下各项:

  • 具有可访问 I²C/UART 引脚/端口的开放系统
  • 修改 ACPI 以向软件公开 I²C/UART 测试设备
  • 连接到正在验证的系统的特定测试设备 (WITT)

有关其他设置信息,请参阅 Hardware Lab Kit (HLK) 文档

外设驱动程序

外设由 ACPI 枚举,通常是静态的。 外设功能驱动程序通过与框架扩展交互来确定适当的总线资源。 外设和控制器不分层,外设可能使用多个 SPB、GPIO、串行和其他高速总线。 访问嵌入式设备(如传感器、输入设备、调制解调器和无线电)的外设驱动程序可以在内核模式或用户模式下编写。 只要适当更新 ACPI,这些驱动程序就可以在不同的 ODM 或 OEM 板配置之间移植。

固件

控制器 ACPI 设置和总线参数特定于供应商,并且取决于特定的控制器。 下表总结了控制器和外设总线的 ACPI 设置。

总线 控制器 ACPI 设置 外设 ACPI 设置
I²C

控制器地址

引脚配置

总线地址

时钟速率

从属模式

寻址模式

SPI

控制器地址

引脚配置

芯片选择线

时钟速率

时钟极性

时钟相位

线路模式

设备选择

设备选择极性

从属模式

UART

控制器地址/引脚

配置初始波特率

初始波特率

Parity

起始位和停止位长度

流控制方法(硬件/软件/无)

正在使用的线路

接收缓冲区大小

传输缓冲区大小

字节序

有关 ACPI 示例,请参阅如何获取设备的连接设置。 有关如何在低功耗总线上集成设备的详细信息,请参阅访问 GPIO、I2C 和 UART 设备

工具和技术参考

资源标题 内容类型 说明 链接
使用 Windows 驱动程序框架生成更好的驱动程序 视频 讨论 WDF 如何提高驱动程序的可靠性,以及如何更好地实现节能并在多个 Windows 版本上部署驱动程序。 第 9 频道
了解低功耗总线 视频 演示如何在新总线上集成设备并创建驱动程序。 你将了解如何编写 ACPI 来枚举外设并开始编写和测试外设驱动程序。 第 9 频道
内核模式驱动程序框架设计指南 文章 介绍内核模式驱动程序框架 (KMDF)。 MSDN
UMDF 1.x 设计指南 文章 介绍用户模式驱动程序框架 (UMDF)。 MSDN
Windows 硬件兼容性计划 文章 提供有关 Windows 认证计划的信息。 MSDN