Plug & Play Unterstützung für HID über SPI
In diesem Artikel wird die Plug-and-Play-Unterstützung für Geräte beschrieben, die HID über den SPI-Transport unterstützen.
Treiberladen
Windows lädt den HID SPI-Klassentreiber basierend auf einer kompatiblen Bezeichner-Übereinstimmung zwischen einem Hardwarebezeichner und dem INF. Der Bezeichner wird von advanced Configuration and Power Interface (ACPI) generiert. Der Hardwarebezeichner wird für den SPI-Geräteknoten in ACPI generiert. Alle HID SPI-kompatiblen Geräte müssen zusätzlich zu einem eindeutigen Hardwarebezeichner den Kompatibilitätsbezeichner verfügbar machen.
Die ACPI 5.0-Spezifikation enthält Unterstützung für HID-Klassengeräte. Die ACPI-Definitionen für HID SPI sind wie folgt:
Feld | Wert | ACPI-Objekt | Format | Kommentare |
---|---|---|---|---|
Hardware-ID | Herstellerspezifisch | _HID | Zeichenfolge im Format VVVVdddd (z. B. MSFT0011) | VendorID + DeviceID |
Kompatible ID | PNP0C51 | _CID | Zeichenfolge im Format ACPIxxxx oder PNPxxxx | CompatibleID |
Subsystem | Herstellerspezifisch | _SUB | Zeichenfolge im Format von VVVVssss (z. B. MSFQ1234) | SubVendorID + SubSystemID |
Hardwarerevision | Herstellerspezifisch | _HRV | 0xRRRR (2Byte Revision) | Hardwarerevisionsnummer |
Aktuelle Ressourceneinstellungen | Herstellerspezifisch | _CRS | Bytedatenstrom | - SpiSerialBus für den Zugriff auf das Gerät. - GpioInt für Interrupts. |
Gerätespezifische Methode | GUID {6e2ac436-0fcf-41af-a265-b32a220dcfab} | _DSM | Paket | Definiert eine Struktur, die gerätespezifische Informationen enthält. |
Gerätezurücksetzungsmethode | _RST | ACPI 6.0 7.3.25-kompatible Gerätezurücksetzungsmethode, die vom Hostbetriebssystem als ACPI FLDR aufgerufen werden soll. |
Jedes HID SPI-Gerät muss die folgenden Pflichtfelder bereitstellen:
- Hardware-ID
- Kompatible ID
- Hardwarerevision
- Aktuelle Ressourceneinstellungen
- Gerätespezifische Methode
- Gerätezurücksetzungsmethode
Weitere Informationen finden Sie in der ACPI 6.0-Spezifikation (Advanced Configuration and Power Interface).
Im Folgenden finden Sie ein Beispiel für eine Hardware-IDs und kompatible IDs für ein zufälliges HID SPI-Gerät. Diese Details basieren auf einem Beispielgerät, das sich selbst als HID mit einer Sammlung der Klasse "herstellerspezifisch" der obersten Ebene meldet.
Advanced Configuration and Power Interface (ACPI) generiert die folgenden Hardware-IDs und kompatiblen IDs, um den HID SPI-Transporttreiber zu laden:
Hardwarebezeichner: Kompatible Bezeichner
ACPI\Vid_xxxx&Pid_yyyy&Rev_zzzz;: ACPI\PNP0C51
ACPI\Vid_xxxxPid_yyyy;:
ACPI\xxxxyyyy;:
Im vorherigen Beispiel wurde die Hardware-ID mithilfe der Werte generiert, die aus der _HID ACPI-Methode für das Beispielgerät extrahiert wurden. Die kompatible ID wird mithilfe der Werte generiert, die aus der _CID ACPI-Methode für das Beispielgerät extrahiert wurden. Die kompatible ID für eine HID über SPI muss für Version 1.0 immer PNP0C51 sein.
Hinweis
Wenn Sie ein INF angeben, sollten Sie nur die Hardwarebezeichner in der linken Spalte der vorherigen Tabelle verwenden. (Verwenden Sie nicht den kompatiblen Bezeichner in der rechten Spalte.)
Die Hardware-ID für den HID-Clientgeräteknoten, der von der komponente HIDClass.sys generiert wird, lautet wie folgt:
Hardwarebezeichner: Kompatibler Bezeichner
HID\VEN_MSFT&DEV_0010&REV_0002&Col01;: N/A
-HID\VEN_MSFT&DEV_0010&Col01 HID\MSFT0010&Col01;: N/A
-HID\*MSFT0010Col01: N/A
-HID_DEVICE_UP:FF00_U:0001;: N/A
-HID_DEVICE: N/A
Die Hardware-ID wird von HIDClass.sys generiert und ist für alle Transporte identisch. Dieser Bezeichner basiert auf Werten, die von HIDSPI.SYS (aus ACPI extrahiert) an HIDClass.sys übergeben werden.
Sequenz der Geräteenumeration
Sobald ein HID SPI-Gerätetreiber (HIDSPI.SYS) geladen wurde, beginnt er mit der Kommunikation mit dem Gerät über den SPI-Bus. Der erste Vorgang, den der Treiber ausführt, ist die Sequenz der Geräteenumeration.
Die folgende Liste enthält die Enumerationssequenz. Die Reihenfolge dieser Liste kann sich in zukünftigen Versionen von Windows ändern.
Rufen Sie den ACPI Source Language (ASL) -Code für das HID SPI-Gerät aus dem System-BIOS ab.
Ausgeben einer vom Host initiierten Zurücksetzung auf das Gerät
- Aufrufen der ACPI-_RST-Methode
- Gerät bestätigt GPIO-Interrupt
- Host liest die Zurücksetzungsantwort vom Gerät
HiD-Deskriptor vom Gerät abrufen
- Host schreibt HID-Deskriptoranforderung
- Gerät bestätigt GPIO-Interrupt
- Host liest HID-Deskriptorantwort
Abrufen des Berichtsdeskriptors
- Host writes report descriptor request (Host schreibt Berichtsdeskriptoranforderung)
- Gerät bestätigt GPIO-Interrupt
- Antwort des Hostleseberichts
Wenn der Host keine der Schritte mit dem Gerät erfolgreich ausführen kann, wird der HIDSPI-Treiber möglicherweise mit dem Fehlerwert Code 10 geladen. Der Host kann das Zurücksetzen des Geräts erneut durchführen, wenn keine Antwort empfangen wird. Die Wiederholungslogik ist jedoch nicht garantiert.
HID-Berichtsvorgänge
Die folgende Tabelle bietet eine Übersicht über die HID-Berichtsvorgänge, die vom HID-SPI-Protokoll unterstützt werden, sowie der Eingabe- und Ausgabeberichte, die für die Ausführung des Vorgangs verwendet werden.
HID-Berichtstyp | Vorgang | Ausgabeberichtstyp | Eingabeberichtstyp |
---|---|---|---|
Eingabebericht | GET | 0x06 (Anforderung – leerer Inhalt) |
0x0B (Antwort) |
Eingabebericht | SET (Nicht unterstützt) |
– | – |
Eingabebericht | INTERRUPT IN | N/A – Keine Anforderung | 0x01 |
Featurebericht | GET | 0x04 (Anforderung – leerer Inhalt) |
0x05 (Antwort) |
Featurebericht | SET | 0x03 | 0x09 (Bestätigung – leerer Inhalt) |
Ausgabebericht | GET (Nicht unterstützt) |
– | – |
Ausgabebericht | SET | 0x05 | 0x0A (Bestätigung – leerer Inhalt) |
Protokollvorgänge
Vorgang | Anforderungsberichtstyp | Antwortberichtstyp |
---|---|---|
Gerätedeskriptoranforderung | 0x01 | 0x7 |
Berichtsdeskriptoranforderung | 0x02 | 0x8 |
Befehlsanforderung | 0x07 | 0x4 |
Antwort zurücksetzen | – | 0x3 |