SPB 控制器驱动程序概述
SPB 控制器是一个设备,该设备控制简单外设总线 (SPB) 并可向连接到 SPB 的外围设备传输数据以及从其传输数据。 SPB 控制器的硬件供应商会提供 SPB 控制器驱动程序来管理控制器中的硬件功能。
从 Windows 8 开始,SPB 框架扩展 (SpbCx) 简化了简单外围总线 (SPB) 控制器驱动程序的开发。 SpbCx 是系统提供的 内核模式驱动程序框架 (KMDF) 的扩展。 SPB 控制器设备的硬件供应商提供控制器驱动程序来执行所有特定于硬件的驱动程序操作。 此驱动程序与 SpbCx 通信以执行特定于 SPB 控制器的操作,并与 KMDF 直接通信以执行通用驱动程序操作。
例如,SPB 控制器驱动程序通常调用 KMDF 中的 WdfDeviceInitSetPnpPowerEventCallbacks 方法来注册以接收电源事件回调,并调用 WdfInterruptCreate 方法将驱动程序的中断服务例程 (ISR) 连接到 SPB 控制器中的中断。 为了执行特定于 SPB 的操作,SPB 控制器通过 SpbCx 设备驱动程序接口与 SpbCx 通信 (DDI) 。
SpbCx 与 SBP 控制器驱动程序合作,处理连接到 SPB 的外围设备的 I/O 请求。 SpbCx 执行 SPB 控制器驱动程序通用的处理任务。 这些任务包括管理 SPB 控制器的 I/O 请求队列。 这些队列包含来自驱动程序的 I/O 请求,这些请求管理连接到总线的外围设备。 SPB 控制器驱动程序执行处理这些请求所需的所有特定于硬件的操作。
下图显示了 SPB 控制器驱动程序和 SpbCx。
SPB 控制器驱动程序和 SpbCx 都在内核模式下运行,并通过 SpbCx DDI 相互通信。 SPB 控制器驱动程序调用由 SpbCx 实现的驱动程序支持方法。 SpbCx 调用由 SPB 控制器驱动程序实现的事件回调函数。
向 SPB 控制器发送 I/O 请求的驱动程序是使用内核 模式驱动程序框架 (KMDF) 的内核模式驱动程序,或者是使用 用户模式驱动程序框架 (UMDF) 的用户模式驱动程序。 这些驱动程序可以发送读取和写入请求,以向/从 SPB 连接的外围设备传输数据。 此外,驱动程序可以发送 I/O 控制 (IOCTL) 请求来执行特定于 SPB 的操作。
SPB 控制器驱动程序直接访问 SPB 控制器设备的硬件寄存器,以启动与连接到 SPB 的外围设备的数据传输。 对于 I2C 等 SPB,这些数据传输的速度相对较慢。 尽管 SPB 控制器的硬件寄存器可能是内存映射的,但外围设备的寄存器必须通过 SPB 串行访问。
为了响应 I/O 请求向/从 SPB 连接的外围设备传输数据,SPB 控制器驱动程序启动总线传输,将 I/O 请求标记为挂起,并在不等待传输完成的情况下返回。 稍后,当 SPB 控制器硬件完成传输时,控制器发出中断信号,SPB 控制器驱动程序中的 ISR 要么完成挂起的 I/O 请求,要么在请求的 I/O 操作中启动下一次传输。
只有驱动程序可以直接将 I/O 请求发送到 SPB 控制器。 当用户模式应用程序向或从 SPB 连接的外围设备传输数据时,应用程序必须依靠 SPB 外围设备驱动程序向 SPB 控制器发送相应的读取或写入请求。