简单外设总线 (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 |