Übersicht über SPB-Controllertreiber
Ein SPB-Controller ist ein Gerät, das einen einfachen Peripheriebus (SPB ) steuert und Daten zu und von den Peripheriegeräten überträgt, die mit dem SPB verbunden sind. Der Hardwarehersteller für einen SPB-Controller stellt einen SPB-Controllertreiber zum Verwalten der Hardwarefunktionen im Controller bereit.
Ab Windows 8 vereinfacht die SPB-Framework-Erweiterung (SpbCx) die Entwicklung von Controllertreibern für einfache Peripheriebusse (SPBs). SpbCx ist eine vom System bereitgestellte Erweiterung des Kernelmodustreiberframeworks (KMDF). Der Hardwarehersteller für das SPB-Controllergerät stellt einen Controllertreiber bereit, um alle hardwarespezifischen Treibervorgänge auszuführen. Dieser Treiber kommuniziert mit SpbCx, um Vorgänge auszuführen, die speziell für SPB-Controller gelten, und kommuniziert direkt mit KMDF, um generische Treibervorgänge auszuführen.
Beispielsweise ruft ein SPB-Controllertreiber in der Regel die WdfDeviceInitSetPnpPowerEventCallbacks-Methode in KMDF auf, um sich für den Empfang von Energieereignisrückrufen zu registrieren, und ruft die WdfInterruptCreate-Methode auf, um die Interruptdienstroutine (Interrupt Service Routine, ISR) des Treibers mit dem Interrupt vom SPB-Controller zu verbinden. Um SPB-spezifische Vorgänge auszuführen, kommuniziert der SPB-Controller über die SpbCx-Gerätetreiberschnittstelle (DDI) mit SpbCx.
SpbCx arbeitet mit dem SBP-Controllertreiber zusammen, um E/A-Anforderungen für Peripheriegeräte zu verarbeiten, die mit dem SPB verbunden sind. SpbCx führt Verarbeitungsaufgaben aus, die für SPB-Controllertreiber üblich sind. Zu diesen Aufgaben gehört die Verwaltung der E/A-Anforderungswarteschlangen für den SPB-Controller. Diese Warteschlangen enthalten E/A-Anforderungen von treibern, die die mit dem Bus verbundenen Peripheriegeräte verwalten. Der SPB-Controllertreiber führt alle hardwarespezifischen Vorgänge aus, die zum Verarbeiten dieser Anforderungen erforderlich sind.
Das folgende Diagramm zeigt den SPB-Controllertreiber und SpbCx.
Der SPB-Controllertreiber und SpbCx werden beide im Kernelmodus ausgeführt und kommunizieren über spbCx DDI miteinander. Der SPB-Controllertreiber ruft Treiberunterstützungsmethoden auf, die von SpbCx implementiert werden. SpbCx ruft Ereignisrückruffunktionen auf, die vom SPB-Controllertreiber implementiert werden.
Die Treiber, die E/A-Anforderungen an den SPB-Controller senden, sind entweder Kernelmodustreiber, die das Kernelmodustreiberframework (KMDF) verwenden, oder Treiber im Benutzermodus, die das Benutzermodustreiberframework (UMDF) verwenden. Diese Treiber können Lese- und Schreibanforderungen senden, um Daten an und von SPB-verbundenen Peripheriegeräten zu übertragen. Darüber hinaus können die Treiber I/O-Steuerungsanforderungen (IOCTL) senden, um SPB-spezifische Vorgänge auszuführen.
Der SPB-Controllertreiber greift direkt auf die Hardwareregister des SPB-Controllergeräts zu, um Datenübertragungen zu und von Peripheriegeräten zu initiieren, die mit dem SPB verbunden sind. Bei einem SPB wie I2C erfolgen diese Datenübertragungen mit relativ langsamen Geschwindigkeiten. Obwohl es sich bei den Hardwareregistern des SPB-Controllers wahrscheinlich um eine Speicherzuordnung handelt, muss auf die Register der Peripheriegeräte seriell über den SPB zugegriffen werden.
Als Reaktion auf eine E/A-Anforderung zum Übertragen von Daten an oder von einem SPB-verbundenen Peripheriegerät initiiert der SPB-Controllertreiber die Busübertragung, markiert die E/A-Anforderung als ausstehend und gibt zurück, ohne auf den Abschluss der Übertragung zu warten. Später, wenn die SPB-Controllerhardware die Übertragung beendet, signalisiert der Controller einen Interrupt, und der ISR im SPB-Controllertreiber schließt entweder die ausstehende E/A-Anforderung ab oder initiiert die nächste Übertragung im angeforderten E/A-Vorgang.
Nur Treiber können E/A-Anforderungen direkt an einen SPB-Controller senden. Wenn eine Anwendung im Benutzermodus Daten an oder von einem mit SPB verbundenen Peripheriegerät überträgt, muss die Anwendung den SPB-Peripheriegerätetreiber verwenden, um die entsprechenden Lese- oder Schreibanforderungen an den SPB-Controller zu senden.