Freigeben über


Verwendung der SPB I/O-Anfrage-Schnittstelle

Ab Windows 8 ist die SPB-Framework-Erweiterung (SPB Framework Extension, SpbCx) eine vom System bereitgestellte Komponente, die die SPB-E/A-Anfrage Schnittstelle unterstützt. SPB-Peripheriegerätetreiber verwenden diese Schnittstelle, um E/A-Anfragen an Geräte zu senden, die an I²C, SPI und andere einfache Peripheriebusse (Simple Peripheral Bus, SPB) angeschlossen sind. Durch die Bereitstellung einer standardisierten E/A-Anfrage-Schnittstelle für eine Vielzahl von Bustypen vereinfacht SpbCx die Aufgabe, Treiber-Support für eine Familie von Peripheriegeräten auf einer Vielzahl von Hardware-Plattformen und SPB-Controllern verschiedener Anbieter bereitzustellen.

Wenn die folgenden Bedingungen erfüllt sind, kann der Anbieter der Hardware für ein Peripheriegerät mit SPB-Anschluss einen Gerätetreiber entwickeln, der für mehrere Bustypen geeignet ist:

  • Das Peripheriegerät muss mit diesen Bussen hardwarekompatibel sein.
  • Der Treiber kann für alle diese Bustypen die gleichen Protokolle zur Steuerung der Geräte verwenden.

Durch die Eliminierung von busspezifischem Code aus Peripherietreibern verkürzt die Erweiterung des SPB-Frameworks die Entwicklungszeit für diese Treiber und sorgt für ein konsistenteres Verhalten über die unterstützten Bustypen hinweg.

Peripheriegeräte, die an SPBs angeschlossen sind, werden nicht im Speicher abgebildet, und die Treiber für diese Geräte können nicht direkt auf die Hardware-Register dieser Geräte zugreifen. Stattdessen muss sich ein Treiber für ein SPB-Peripheriegerät auf einen SPB-Controller verlassen, um Daten seriell zum und vom Gerät zu übertragen. Um eine solche Übertragung anzufordern, muss der Treiber eine E/A-Anfrage an das Gerät senden. Diese E/A-Anfrage wird an eine Warteschlange gesendet, die von SpbCx verwaltet wird.

SpbCx arbeitet mit einem SPB-Controller-Treiber zusammen, um E/A-Anfragen von Treibern zu bearbeiten. Der Anbieter der Hardware für den SPB-Controller stellt den SPB-Controller-Treiber zur Verfügung, um die für die Controller-Hardware spezifischen Aufgaben auszuführen.

Nur Treiber können E/A-Anfragen an die E/A-Anfrage-Schnittstelle eines SPB-Controllers senden. Anwendungen können keine E/A-Anfragen direkt an einen SPB-Controller senden. Stattdessen kann eine Anwendung E/A-Anfragen an den Treiber für ein an die SPB angeschlossenes Peripheriegerät senden und sich dann darauf verlassen, dass der Treiber alle E/A-Anfragen an den SPB-Controller sendet, die zur Übertragung von Daten zu oder von dem Gerät erforderlich sind.

Bevor ein Treiber E/A-Anfragen an ein mit dem SPB verbundenes Peripheriegerät senden kann, muss der Treiber eine logische Verbindung zu dem Gerät öffnen. Um diese Verbindung zu öffnen, verwendet der Treiber die Verbindungs-ID, die er als Hardware-Ressource vom Plug and Play Manager erhalten hat. Weitere Informationen finden Sie unter Verbindungs-IDs für SPB Peripheriegeräte.

SpbCx und der SPB-Controller-Treiber bearbeiten gemeinsam Lese- und Schreibanfragen für SPB-angeschlossene Peripheriegeräte. Als Antwort auf eine IRP_MJ_READ-Anfrage überträgt der SPB-Controller die angegebene Anzahl von Bytes von einem Peripheriegerät in einen vom Treiber bereitgestellten Puffer. Als Antwort auf eine IRP_MJ_WRITE-Anfrage überträgt der SPB-Controller die angegebene Anzahl von Bytes aus einem vom Treiber bereitgestellten Puffer an ein Peripheriegerät.

Bei einer IRP_MJ_READ- oder IRP_MJ_WRITE-Anfrage zur Übertragung von null Bytes schließt SpbCx die Anfrage mit einem STATUS_SUCCESS-Statuscode ab, führt aber keinen Vorgang durch.

SpbCx und der SPB-Controller-Treiber behandeln auch diese SPB-spezifischen E/A-Steuerelemente (I/O Control Codes, IOCTLs):

Ein SPB-Peripherietreiber verwendet diese IOCTLs, um E/A-Übertragungssequenzen auszuführen. Eine E/A-Übertragungssequenz ist eine geordnete Reihe von Busübertragungen (Lese- und Schreibvorgänge), die als ein einziger, atomarer Busvorgang ausgeführt wird. Weitere Informationen über diese IOCTLs finden Sie unter E/A-Übertragungssequenzen.

Der SPB-Controller-Treiber für einen bestimmten SPB-Controller unterstützt möglicherweise angepasste IOCTLs, die hardwarespezifische Funktionen ausführen. Dabei handelt es sich um IOCTLs, die von SpbCx nicht verarbeitet werden und die der Anbieter der Hardware für den SPB-Controller zugunsten von SPB-Peripheriegerätetreibern unterstützt, die hardwarespezifische Vorgänge durchführen müssen. Wenn ein SPB-Peripheriegerätetreiber eine IOCTL sendet, die weder von SpbCx noch vom SPB-Controller-Treiber erkannt wird, wird kein Vorgang ausgeführt und die E/A-Anfrage wird mit einem Fehlerstatuswert von STATUS_NOT_SUPPORTED abgeschlossen.

Der Treiber für ein an SPB angeschlossenes Peripheriegerät ist in der Regel entweder ein User-Mode Driver Framework (UMDF)-Treiber oder Kernel-Mode Driver Framework (KMDF)-Treiber. Um eine Lese-, Schreib- oder IOCTL-Anfrage an ein SPB-verbundenes Peripheriegerät zu senden, ruft ein UMDF-Treiber eine Methode wie IWDFIoRequest::Send auf. Ein KMDF-Treiber ruft eine Methode wie WdfIoTargetSendReadSynchronously, WdfIoTargetSendWriteSynchronously, oder WdfIoTargetSendIoctlSynchronously auf.

Code-Beispiele, die zeigen, wie E/A-Anfragen an SPB-angeschlossene Peripheriegeräte gesendet werden, finden Sie in diesen Themen:

Hardware-Ressourcen für SPB-Peripheriegeräte-Treiber im Benutzer-Modus

Hardware-Ressourcen für SPB-Peripheriegeräte-Treiber im Kernel-Modus