Simple Peripheral Bus (SPB)

Note

This article contains references to the term slave, a term that Microsoft no longer uses. When the term is removed from the software, we’ll remove it from this article.

This topic covers recommendations for Simple Peripheral Bus in Windows 10.Windows includes support for low-power, simple buses, such as Inter Integrated Circuit (I²C) and (I²C) and Simple Peripheral Interface (SPI), using framework extensions of the Kernel Mode Driver Framework (KMDF) architecture. Controller drivers are not provided in-box. Chipset vendors, OEMs, or IHVs must develop a controller driver implemented in KMDF. The architecture provides flexible device configuration topologies supporting simultaneous use of buses for control and data transactions, as well as GPIO for signaling and interrupts. The complete device definition is defined through Advanced Configuration and Power Interface (ACPI).

In Windows, buses are supported through KMDF controller drivers. With the aid of the KMDF platform, the controller driver is used predominantly to define the hardware-specific interfaces necessary to enable controller function.

The Windows infrastructure supports devices that share buses, buses that are multiplexed on the same line, and device configuration through ACPI. Windows uses ACPI as the primary means for device identification, configuration, and control.

The following table summarizes the support for the Simple Peripheral Bus.

Bus Inbox Support Framework extension provided Third party allowed Additional support details
I²C No Yes Yes, using SPB Framework extension

Master only

"General Call" is not supported

Direct Memory Access (DMA) supported

SPI No Yes Yes, using SPB Framework extension

Master only, "General Call" is not supported

Full duplex supported

DMA supported

MIPI-HSI No No Yes, using Windows Driver Foundation (WDF)
MIPI-SLIMbus No No Yes, using WDF
MIPI-CSI No No Yes, using WDF
UART No Yes Yes, using Serial Framework extension (SerCx2)

DMA supported

Custom transfer modes supported with SerCx2

Design considerations for SPB

The following are some generic considerations for SPB:

  • SPB is not a Plug and Play bus. Peripheral devices typically have fixed connections to an SPB and cannot be removed. System manufacturers must ensure accurate information in ACPI to enumerate the SPB-connected peripheral devices for the Plug and Play manager, and specifies the hardware resources that are dedicated to each device.

  • There is no in-band interrupt support for SPB. Most peripherals support device signaling through a separate interrupt (often GPIO based) mechanism, and accurately mapped in ACPI.

  • Windows provides support for the SPB Class Extension (spbcx.sys) in Windows 8 and beyond. SoC partners are responsible for developing and redistributing their appropriate SPB Controller driver.

  • Peripheral drivers for SPB devices are generally provided by SPB Device partners. Microsoft provides one class driver for SPB devices for HID over I²C (hidi2c.sys).

  • Device classes may provide HLK requirements or WEG guidance around the following topics related to I²C:

    • Sharing I²C controller with other devices
    • Preferred I²C signaling speed
    • Power management and wake scenarios over I²C and GPIO.
  • Inter Integrated Circuit (I²C): I²C is the primary bus that is validated as part of SPB and is highly recommended on SoC systems.

    Microsoft provides Windows Hardware Compatibility Program requirements for I²C. Use the Windows Hardware Lab Kit (HLK) to test devices against those requirements.

  • Simple Peripheral Interface (SPI): Support for SPI is optional and up to the SoC partner. The Windows Hardware Compatibility Program does not contain any requirements specific to SPI bus.

Support for SPB across systems

Microsoft supports SPB on Arm systems and x86/x64 platforms (running in S3 configurations). Microsoft supports SPB on platforms running in both Connected Standby (CS) and S3 configurations.

Please contact your platform provider for drivers and support.

There are a number of device scenarios that leverage SPB for connectivity. I²C is available on CS and S3 traditional power model. Modern SoCs with on-SoC sensor low power cores can implement non-I²C solutions as needed.

Devices on removable docks/ports should also follow the guidance around docking scenarios, also included in the WEG. Some of those devices may make more sense over buses like USB rather than I²C.

SPB framework extension

The SPB framework extension library extends the Windows Driver Framework to support SPB drivers. The SPB framework simplifies development of an SPB controller driver and improves the compatibility between peripheral drivers and the controller driver by providing common implementation of the "top-half" of the driver that processes I/O requests (as compared to the "bottom-half", which is driven by the top-half and controls the hardware). The SPB Framework Extension is a KMDF extension library. It handles the up-front processing of SPB request and the sequence in which they are handed to the controller driver. The SPB framework extension is designed to support I²C and SPI buses, and may be appropriate for other buses with similar semantics.

Serial Framework extension

The serial framework extension library extends the Windows driver framework to support serial controller drivers. Similarly to the SPB framework, the serial framework simplifies development of a serial controller driver and improves the compatibility between peripheral drivers and the controller driver by providing common implementation of the "top-half" of the driver that processes I/O requests. The serial framework extension is a KMDF extension library. It handles the up-front processing of the calls to the serial APIs and the sequence in which they are handed to the controller driver. The serial framework extension is designed to support the modern UART controllers and simplify controller driver implementation and diagnosability.

I²C and UART HLK requirements

There are Hardware Compatibility Program requirements for I²C and UART controllers. Requirements for SPI are being considered for the future as well. The logo requirements are primarily intended for SoC silicon vendors for the bus interface hardware and the associated controller drivers. OEMs and ODMs are not required to revalidate the hardware or controller driver but are welcome to run the tests if desired. Special set-up steps are required to validate these requirements. The setup includes the following:

  • An open system with accessible I²C /UART pins/ports
  • Modifications in ACPI to expose the I²C/ UART test device to software
  • A specific test device (WITT) attached to the system under validation

For additional set-up information, please refer to the Hardware Lab Kit (HLK) documentation.

Peripheral drivers

Peripherals are enumerated by ACPI and are generally static. Peripheral function drivers determine their appropriate bus resources by interacting with the framework extensions. Peripherals and controllers are not hierarchical, and peripherals may use several SPB, GPIO, Serial, and other high speed buses. Peripheral drivers that access embedded devices, such as sensors, input devices, modems, and radios, may be written in kernel mode or user mode. These drivers may be portable across different ODM or OEM board configurations as long as ACPI is updated appropriately.

Firmware

Controller ACPI settings and bus parameters are vendor-specific and dependent on the particular controller. The following table summarizes the ACPI settings for the controller and the peripheral bus.

Bus Controller ACPI settings Peripheral ACPI settings
I²C

Controller addresses

Pin configuration

Bus address

Clock rate

Slave mode

Addressing mode

SPI

Controller addresses

Pin configuration

Chip select line

Clock rate

Clock polarity

Clock phase

Wire mode

Device selection

Device selection polarity

Slave mode

UART

Controller address / pin

Configure initial baud rate

Initial baud rate

Parity

Start bit and stop bit length

Flow control method(Hardware/Software/None)

Lines in use

Receive buffer size

Transmit buffer size

Endian-ness

For an ACPI example, see How to Get the Connection Settings for a Device. For more information about how to integrate devices on low power buses, see Accessing GPIO, I2C, and UART Devices.

Tools and technical reference

Resource Title Content type Description Link
Using the Windows Driver Framework to build better drivers Video Discusses how the WDF can improve driver reliability and how to better realize power-savings and deploy drivers on multiple versions of Windows. Channel 9
Understanding Low-Power Buses Video Demonstrates how to integrate a device on the new buses and create a driver. You will learn how to write ACPI to enumerate your peripheral and get started writing and testing a peripheral driver. Channel 9
Kernel-Mode Driver Framework Design Guide Article Introduces Kernel-Mode Driver Framework (KMDF). MSDN
UMDF 1.x Design Guide Article Introduces User-Mode Driver Framework (UMDF). MSDN
Windows Hardware Compatibility Program Article Provides information on the Windows Certification Program. MSDN