Architektur und Übersicht für HID über den SPI-Transport
In diesem Artikel wird der Treiberstapel für Geräte beschrieben, die HID über den SPI-Transport unterstützen.
Architektur und Übersicht
Der HID SPI-Treiberstapel besteht aus vorhandenen und neuen Komponenten, die von Microsoft bereitgestellt werden, sowie aus Komponenten des SPI-Siliziumherstellers. Die folgende Abbildung zeigt den Stapel und diese Komponenten.
Windows bietet eine Schnittstelle für stromarme, einfache Busse, die effektiv mit dem Betriebssystem kommunizieren können. Diese Schnittstelle wird als einfacher Peripheriebus (SPB) bezeichnet und unterstützt Busse wie Inter-Integrated Circuit (I2C) und serielle Peripherieschnittstelle (SPI). Weitere Informationen zu SPB finden Sie im Thema "Simple Peripheral Bus (SPB) ".
Windows stellt einen KMDF-basierten HID-Miniporttreiber bereit, der Version 1.0 der Protokollspezifikation für HID über SPI implementiert. Dieser Treiber wird HIDSPI.sys genannt. Windows lädt diesen Treiber basierend auf einer kompatiblen ID-Übereinstimmung, die von der Advanced Configuration and Power Interface (ACPI) verfügbar gemacht wird. Systemintegratoren können eine Erweiterung INF verwenden, um diesen Treiber basierend auf der Hardware-ID ihres Peripheriegeräts zu laden. Der Treiber stellt sicher, dass Apps, die HID IOCTLs auf Anwendungsebene für Software verwenden, die die HID-IOCTLs und API-Sätze nutzt. Dem Treiber wird eine GPIO-Verbindung bereitgestellt, die es dem Gerät ermöglicht, eine Unterbrechung zu bestätigen, wenn sie Aufmerksamkeit erfordert oder Daten enthält.
Hinweis
Der HIDSPI.sys Gerätetreiber unterstützt nur den SPI-Bus. I2C, SMBUS oder andere Low-Power-Busse werden in Windows nicht unterstützt.
Der SPI-Controllertreiber
Der SPI-Controllertreiber macht eine IOCTL-Schnittstelle (Serial Peripheral Bus, SPB) verfügbar, um Lese- und Schreibvorgänge auszuführen. Dieser Treiber stellt die eigentlichen Controllerinterne (z. B. SPI) bereit. Die SPB-Klassenerweiterung verarbeitet im Namen des Controllertreibers alle Interaktionen mit dem Ressourcenhub und implementiert erforderliche Warteschlangen, um gleichzeitige Ziele zu verwalten.
Hinweis
Der HID SPI-Treiber funktioniert nicht auf Systemen, die keinen SPI-Bus haben, der mit der SPB-Plattform kompatibel ist. Wenden Sie sich an Den Systemhersteller, um zu ermitteln, ob der SPI-Bus auf Ihrem Gerätesystem mit der SPB-Plattform kompatibel ist.
Der GPIO-Controllertreiber
Der GPIO-Controller (General Purpose Input/Output) liefert Unterbrechungen vom Gerät über GPIO. Dies ist häufig eine einfache untergeordnete Komponente, die GPIO-Pins verwendet, um Windows von neuen Daten oder anderen Ereignissen zu signalisieren. GPIO kann das Gerät auch über andere Ansätze als den SPI-Kanal steuern.
Der Ressourcenhub
Verbindungen auf einer SoC-Plattform sind in der Regel nicht auffindbar, da es keine Standards für die Geräteaufzählung auf den Bussen gibt, die auf SoC verwendet werden. Daher müssen diese Geräte in der Advanced Configuration and Power Interface (ACPI) statisch definiert werden. Darüber hinaus verfügen Komponenten häufig über mehrere Abhängigkeiten, die mehrere Busse umfassen, im Gegensatz zu einer strengen Verzweigungsstruktur.
Der Ressourcenhub ist ein Proxy, der die Verbindungen zwischen allen Geräten und Buscontrollern verwaltet. Der HIDSPI-Treiber verwendet den Ressourcenhub, um geräteoffene Anforderungen an den entsprechenden Controllertreiber umzuleiten. Weitere Informationen zum Ressourcenhub finden Sie im Thema "Verbindungs-IDs für verbundene SPB-Geräte ".
HIDSPI-Klassenerweiterung (HIDSPICx)
Für Implementierungen, die eine höhere Leistung oder Integration erfordern, können Systemhersteller benutzerdefiniertes Silizium für die Verarbeitung von HIDSPI-Transaktionen entwickeln. Hierfür wird die HIDSPICx-Klassenerweiterung mit Windows bereitgestellt. HIDSPICx ermöglicht die Entwicklung eines benutzerdefinierten HIDSPI HWA-Controllertreibers ohne SpbCx.
Für HWA-Geräte stellt der Anbieter einen Clienttreiber bereit, der für die Implementierung der durch die Klassenerweiterung definierten Schnittstelle und die Kommunikation mit der Klassenerweiterung zuständig ist.