Freigeben über


Connector System Software Interface (UCSI)-Treiber für USB Type-C®

Microsoft stellt einen spezifikationskonformen Connector System Software Interface (UCSI)-Treiber für USB-Type-C® für einen erweiterten Advanced Configuration and Power Interface (ACPI)-Transport bereit. Wenn Ihr Design einen eingebetteten Controller mit ACPI-Transport enthält, implementieren Sie UCSI im BIOS/EC Ihres Systems, und laden Sie den integrierten UCSI-Treiber (UcmUcsiCx.sys and UcmUcsiAcpiClient.sys).

Wenn Ihre UCSI-kompatible Hardware einen anderen Transport als ACPI verwendet, müssen Sie einen UCSI-Clienttreiber schreiben.

Treiber zur Unterstützung von USB-Type-C-Komponenten für Systeme mit eingebetteten Controllern

Hier ist ein Beispiel für ein System mit einem eingebetteten Controller.

Diagramm der USB-Type-C Softwarekomponenten.

USB-Rollenwechsel wird in der Firmware des Systems gesteuert. Der USB-Rollenschalter-Treiber-Stack wird nicht geladen. In einem anderen System wird der Treiberstapel möglicherweise nicht geladen, da duale Rollen nicht unterstützt werden.

  • USB-geräteseitige Treiber

    Die geräteseitigen USB-Treiber unterstützen die Funktion/das Gerät/das Peripheriegerät. Die Erweiterung der USB-Funktionscontrollerklasse unterstützt das Media Transfer Protocol (MTP) und das Aufladen mit BC 1.2-Ladegeräten. Microsoft stellt mitgelieferte Clienttreiber für Synopsys USB 3.0- und ChipIdea USB 2.0-Controller bereit. Sie können einen benutzerdefinierten Clienttreiber für Ihren Funktionscontroller schreiben, indem Sie Programmierschnittstellen für USB-Funktionscontroller-Clienttreiber verwenden. Weitere Informationen finden Sie unter Entwickeln von Windows-Treibern für USB-Funktionscontroller.

    Der SoC-Anbieter stellt Ihnen möglicherweise den untergeordneten USB-Funktionsfiltertreiber für die Ladegerätentdeckung bereit. Wenn Sie den integrierten Synopsys USB 3.0- oder ChipIdea USB 2.0-Clienttreiber verwenden, können Sie Ihren eigenen Filtertreiber implementieren.

  • USB-hostseitige Treiber

    Die USB-hostseitigen Treiber sind eine Reihe von Treibern, die mit EHCI- oder XHCI-kompatiblen USB-Hostcontrollern funktionieren. Wenn der Rollenschaltertreiber die Hostrolle aufzählt, werden die Treiber geladen. Wenn Ihr Hostcontroller nicht spezifikationskonform ist, können Sie einen benutzerdefinierten Treiber mithilfe der Programmierschnittstelle für USB-Hostcontrollererweiterung schreiben. Weitere Informationen finden Sie unter Entwickeln von Windows-Treibern für USB-Hostcontroller.

  • USB-Verbinder-Manager

    Microsoft stellt einen integrierten UCSI-Treiber mit Windows (UcmUcsiCx.sys) bereit, der die in der USB-Type-C Connector System Software Interface Specification definierten Funktionen implementiert. Die Spezifikation beschreibt die Funktionen von UCSI. Es erläutert die Register und Datenstrukturen für Hardwarekomponentendesigner, System-Generatoren und Gerätetreiberentwickler.

    Dieser Treiber ist für Systeme mit eingebetteten Controllern vorgesehen. Dieser Treiber ist ein Client des von Microsoft bereitgestellten USB Connector Manager-Klassenerweiterungstreibers (Ucmcx.sys). Der Treiber verarbeitet Aufgaben wie das Einleiten von Anforderungen an die Firmware, um die Daten oder Leistungsrollen zu ändern und Informationen zu erhalten, die zum Bereitstellen von Problembehandlungsmeldungen für Benutzer erforderlich sind.

UCSI-Befehle, die von Windows benötigt werden

Informationen zu Befehlen, die in allen UCSI-Implementierungen erforderlich sind, finden Sie in der UCSI-Spezifikation.

Zusätzlich zu den Befehlen, die als Erforderlich gekennzeichnet sind, sind in Windows folgende Befehle erforderlich:

  • GET_ALTERNATE_MODES
  • GET_CAM_SUPPORTED
  • GET_PDOS
  • SET_NOTIFICATION_ENABLE: Das System oder der Controller muss die folgenden Benachrichtigungen in SET_NOTIFICATION_ENABLE unterstützen:
    • Änderung bei den unterstützten Anbieterfunktionen
    • Änderung beim ausgehandelten Leistungsniveau
  • GET_CONNECTOR_STATUS: Das System oder der Controller muss diese Connectorstatusänderungen in GET_CONNECTOR_STATUS unterstützen:
    • Änderung bei den unterstützten Anbieterfunktionen
    • Änderung beim ausgehandelten Leistungsniveau

Weitere Informationen finden Sie unter Intel BIOS-Implementierung von UCSI.

UCM-UCSI-ACPI-Gerät für UCSI 2.0 und höher

Ab Windows 11, Version 22H2 September-Update, unterstützen die Windows UCM-UCSI ACPI-Gerätetreiber die UCSI-Spezifikation Version 2.0 und 2.1. Die UCSI-Spezifikation 2.0 hat Änderungen in der Speicherzuordnung der Datenstrukturen vorgenommen, wie sie in derUCSI-Spezifikationstabelle 3-1 Datenstrukturen definiert sind.

** Um die Abwärtskompatibilität aufrechtzuerhalten, erfordert Windows, dass das UCSI PPM der Spezifikation Version 2.0 oder höher die folgende _DSM-Funktion unter dem UCM-UCSI ACPI-Gerät in der ACPI-Firmware implementiert und einen Wert ungleich Null zurückgibt, wodurch angegeben wird, dass UCSI OPM der gemeldeten UCSI-Spezifikationsversion folgen sollte.

  • Arg0: UUID = 6F8398C2-7CA4-11E4-AD36-631042B5008F
  • Arg1: Revisions-ID = 0
  • Arg2: Funktionsindex = 5
  • Arg3: Leeres Paket (nicht verwendet)

Rückgabewert:

Element Objekttyp Beschreibung
UsePpmReportedUcsiVersion Integer (32-Bit) 0x00000000 (Standard): Wenn die VERSION-Struktur den Wert 2.0 oder höher hat, wie in UCSI-Spezifikation, Tabelle 3-1 Datenstrukturen definiert, folgt UCSI OPM weiter der UCSI-Spezifikation 1.2. Andernfalls folgt UCSI OPM der UCSI-Spezifikation gemäß dem Wert in der VERSION-Struktur.

Anmerkung

Bei UCM-UCSI ACPI-Geräten ist diese Funktion in einer vorhandenen _DSM Methode neu. Andere Funktionen dieser _DSM-Methode sollten gemäß dem Dokument Intel-BIOS-UCSI-Implementierung implementiert worden sein. Funktion 0, die eine Bitmaske aller unterstützten Funktionen zurückgibt, sollte ebenfalls entsprechend aktualisiert werden.

Beispielablauf für UCSI

In den Beispielen in diesem Abschnitt wird die Interaktion zwischen USB-Type-C Hardware/Firmware, UCSI-Treiber und Betriebssystem beschrieben.

DRP-Rollenerkennung

  1. USB-Type-C Hardware/Firmware erkennt ein Geräteanfügungsereignis. Das DRP-System von Windows 10 übernimmt zunächst die UFP-Rolle.

    1. Die Firmware sendet eine Benachrichtigung, die eine Änderung des Connectors angibt.
    2. Der UCSI-Treiber sendet eine GET_CONNECTOR_STATUS Anforderung.
    3. Die Firmware antwortet, dass der Verbindungsstatus = 1 und der Connector-Partnertyp = DFP.
  2. Die Treiber im USB-Funktionsstapel reagieren auf die Enumeration.

  3. Die Klassenerweiterung für die Verwaltung der USB-Verbindung erkennt, dass der USB-Funktionsstack geladen ist, wodurch sich das System im falschen Zustand befindet. Sie weist den UCSI-Treiber an, die Anforderungen USB-Betriebsmodus festlegen und Leistungsrichtungsmodus festlegen an die Firmware zu senden.

  4. USB Type-C-Hardware/Firmware leitet den Rollenwechsel mit dem DFP ein.

Erkennen der Fehlerbedingung „Ladegerätkonflikt“

  1. USB-Type-C-Hardware/Firmware erkennt, dass ein Ladegerät angeschlossen ist und einen Standardleistungsvertrag aushandelt. Es stellt außerdem fest, dass das Ladegerät nicht ausreichend Energie für das System bereitstellt.

  2. USB-Type-C-Hardware/Firmware legt das Bit für langsames Aufladen fest.

    1. Die Firmware sendet eine Benachrichtigung, die eine Änderung des Connectors angibt.
    2. Der UCSI-Treiber sendet eine GET_CONNECTOR_STATUS Anforderung.
    3. Die Firmware antwortet mit connect Status = 1, Connector Partner Type = DFP, und Akkuladestatus = Slow/Trickle.
  3. Die USB Connector Manager-Klassenerweiterung sendet Benachrichtigungen an die Benutzeroberfläche, um die Fehlermeldung zum Ladegerätkonflikt anzuzeigen.

So testen Sie UCSI

Es gibt viele Möglichkeiten, ihre UCSI-Implementierung zu testen. Um einzelne Befehle in Ihrer UCSI BIOS/EC-Implementierung zu testen, verwenden Sie UCSIControl.exe, die im Microsoft USB Test Tool (MUTT)-Softwarepaket bereitgestellt wird. Verwenden Sie zum Testen Ihrer vollständigen UCSI-Implementierung sowohl die UCSI-Tests im Windows Hardware Lab Kit (HLK) als auch die Schritte in Manuelle Interoperabilitätstestverfahren für USB-Typ-C.

UCSIControl.exe

Sie können einzelne Befehle in Ihrer UCSI BIOS/EC-Implementierung testen, indem Sie UCSIControl.exeverwenden. Mit diesem Tool können Sie UCSI-Befehle über den UCSI-Treiber an die Firmware senden. Der Treiber muss geladen und ausgeführt werden. Außerdem ist die Testschnittstelle für den Treiber aktiviert. Diese Schnittstelle ist standardmäßig nicht aktiviert, um zu verhindern, dass nicht autorisierte Benutzer in einem Einzelhandelssystem darauf zugreifen können.

  1. Suchen Sie den Geräteknoten im Device Manager (devmgmt.msc) mit dem Namen UCSI USB Connector Manager. Der Knoten befindet sich in der Kategorie Universal Serial Bus-Controller.

  2. Wählen Sie das Gerät aus, halten Sie es gedrückt, oder klicken Sie mit der rechten Maustaste auf das Gerät. Wählen Sie "Eigenschaften" aus, und öffnen Sie die Registerkarte "Details ".

  3. Wählen Sie im Dropdownmenü den Geräteinstanzpfad aus, und notieren Sie sich den Eigenschaftswert.

  4. Öffnen Sie den Registrierungs-Editor (regedit.exe).

  5. Navigieren Sie unter diesem Schlüssel zum Geräteinstanzpfad.

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\<device-instance-path>\Device Parameters

  6. Erstellen Sie einen DWORD-Wert namens TestInterfaceEnabled, und legen Sie den Wert auf 0x1 fest.

  7. Um das Gerät neu zu starten, wählen Sie im Geräteknoten im Geräte-Manager "Deaktivieren" und dann "Aktivieren" aus. Alternativ können Sie den PC neu starten.

Sie können die Hilfe anzeigen, indem Sie UcsiControl.exe /? ausführen.

Hier sind die allgemeinen Befehle:

UCSI-Befehl Befehl UcsiControl.exe
Zurücksetzen der PPM UcsiControl.exe Sende 0 1
Zurücksetzen des Connectors Weiche Zurücksetzung: UcsiControl.exe Send 0 10003

Harte Zurücksetzung: UcsiControl.exe Send 0 810003
Aktivieren von Benachrichtigungen Alle Benachrichtigungen: UcsiControl.exe Send 0 ffff0005

Nur Befehlsabschluss: UcsiControl.exe Send 0 00010005

Keine Benachrichtigung: UcsiControl.exe Send 0 00000005
Funktionsabruf UcsiControl.exe Senden 0 6
Connector-Funktionsabruf UcsiControl.exe Sende 0 10007
Festlegen von UOM DFP: UcsiControl.exe Sende 0 810008

UFP: UcsiControl.exe Sende 0 1010008

DRP: UcsiControl.exe Senden 0 2010008
Festlegen von UOR DFP: UcsiControl.exe Sende 0 810009

UFP: UcsiControl.exe 0 1010009 senden

Akzeptieren: UcsiControl.exe Send 0 2010009
Festlegen von PDR Anbieter: UcsiControl.exe Send 0 81000B

Verbraucher: UcsiControl.exe senden 0 101000B

Akzeptieren: UcsiControl.exe Send 0 201000B
Abrufen von PDOs Lokale Quelle: UcsiControl.exe Send 7 00010010

Lokale Senke: UcsiControl.exe Send 3 00010010

Remotequelle: UcsiControl.exe Send 7 00810010

Remotesenke: UcsiControl.exe Send 3 00810010
Abrufen des Connectorstatus UcsiControl.exe Sende 0 010012
Fehlerstatus abrufen UcsiControl.exe 0 13 senden