Designhandbuch für den Simple Peripheral Bus (SPB)-Treiber
In diesem Abschnitt wird beschrieben, wie Sie einen Treiber für ein einfaches Peripheriebus-Controllergerät (SPB) oder für ein Peripheriegerät schreiben, das mit einem SPB verbunden ist. Die SPB-Kategorie umfasst Busse wie I²C und SPI. Der Hardwareanbieter für ein SPB-Controllergerät stellt einen SPB-Controllertreiber zur Verwaltung der Hardwarefunktionen im Controller bereit. Dieser Treiber unterstützt möglicherweise eine Familie ähnlicher Controllergeräte. Der Hardwareanbieter für ein mit SPB verbundenes Peripheriegerät stellt einen SPB-Peripherietreiber zur Verwaltung der Hardwarefunktionen im Peripheriegerät bereit. Dieser Treiber unterstützt möglicherweise eine Familie von Peripheriegeräten auf einer Vielzahl von Hardwareplattformen, die kompatible SPBs bereitstellen.
In Versionen von Windows vor Windows 8 hat das Betriebssystem Informationen von SPB-verbundenen Geräten auf einer PC-Hauptplatine nur indirekt über die Plattformfirmware abgerufen. Ab Windows 8 können Hardwarehersteller Windows-Treiber bereitstellen, um ihre SPB-Controller und ihre mit SPB verbundenen Peripheriegeräte direkt zu steuern und diese Geräte für die Verwendung durch das Betriebssystem und anwendungen verfügbar zu machen. Weitere Informationen finden Sie unter SPB-Controllertreiber und SPB-Peripheriegerätetreiber.
SPBs werden häufig verwendet, um Peripheriegeräte mit niedriger Geschwindigkeit an Mainboard-Chipsätze und SoC-Module (System on a Chip) anzuschließen. Eine integrierte Schaltung benötigt weniger Pins, um eine Verbindung mit einem seriellen Bus herzustellen als mit einem parallelen Bus, der mehrere Datenbits pro Taktzyklus überträgt. In der Regel werden SPBs in kostensensiblen Anwendungen verwendet, bei denen niedrige Pinanzahl und einfache Verbindungen wichtiger sind als die Datenübertragungsgeschwindigkeit. Da SPBs mit niedrigen Geschwindigkeiten ausgeführt werden und nur wenige elektrische Verbindungen benötigen, werden sie häufig in Anwendungen eingesetzt, in denen der Akkustrom gespart werden muss.
Beispielsweise kann die PC-Hauptplatine in einem Laptop einen I²C-Bus verwenden, um mit einem Gerät mit niedriger Geschwindigkeit zu kommunizieren, das den Akkustand überwacht. Ebenso kann das SoC-Modul in einem Smartphone oder einem anderen mobilen Gerät einen I²C-Bus verwenden, um eine Verbindung mit einem Sensorgerät wie einem Beschleunigungsmesser, einem GPS-Gerät oder einem Temperatursensor herzustellen.
Ein SPB ist kein Plug & Play Bus. Peripheriegeräte haben typischerweise feste Verbindungen zu einem SPB und können nicht entfernt werden. Auch wenn ein Peripheriegerät von einem Steckplatz auf einem SPB getrennt werden kann, ist der Slot in der Regel für dieses Gerät reserviert. Während des Systemstarts listet die ACPI-Firmware auf der Hardwareplattform die mit SPB verbundenen Peripheriegeräte für den Plug & Play-Manager auf und gibt die Hardwareressourcen an, die für jedes Gerät dedizierte sind.
In diesen Ressourcen ist eine Verbindungs-ID enthalten, die die Verbindung des Geräts mit dem SPB identifiziert. Die Verbindungs-ID kapselt die Informationen (z. B. eine Busadresse und eine Busuhrhäufigkeit), die ein SPB-Controller benötigt, um eine Verbindung mit dem Gerät herzustellen. Andere Hardwareressourcen können einen Interrupt enthalten, mit dem der Treiber seinen ISR verbindet. Die Hardwareressourcen für das Gerät enthalten jedoch keinen Arbeitsspeicher für Geräteregister. Ein mit SPB verbundenes Peripheriegerät ist nicht speicherseitig zugeordnet und kann nur über den SPB zugegriffen werden. Weitere Informationen finden Sie unter Verbindungs-IDs für SPB-Connected Peripheriegeräte.
Ein SPB bietet keine busspezifischen Mittel, um Interruptanforderungen von Peripheriegeräten an den Prozessor zu übermitteln. Stattdessen signalisiert ein mit SPB verbundenes Peripheriegerät einen Interrupt über einen separaten Hardwarepfad, der sich außerhalb des SPB- und des SPB-Controllers befindet. Die Interruptdienstroutine (ISR) für ein mit SPB verbundenes Peripheriegerät muss bei IRQL = PASSIVE_LEVEL ausgeführt werden, damit E/A-Anforderungen synchron gesendet werden können, um über den SPB seriell auf die Hardwareregister des Geräts zuzugreifen. Weitere Informationen finden Sie unter Interrupts from SPB-Connected Peripheriegeräte.