Freigeben über


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

Microsoft stellt einen USB Type-C-Connector® system software interface (UCSI) spezifikationskonformen Treiber für den ACPI-Transport bereit. Wenn Ihr Entwurf 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 und UcmUcsiAcpiClient.sys).

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

Treiber für die Unterstützung von USB-Typ-C-Komponenten für Systeme mit eingebetteten Controllern

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

Diagramm der USB-Typ-C-Softwarekomponenten.

Im vorherigen Beispiel wird der USB-Rollenwechsel in der Firmware des Systems durchgeführt, und der USB-Rollenwechseltreiberstapel wird nicht geladen. In einem anderen System wird der Treiberstapel möglicherweise nicht geladen, da die duale Rolle nicht unterstützt wird.

In der obigen Abbildung

  • GERÄTESEITIGE USB-Treiber

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

    Der SoC-Anbieter stellt Ihnen möglicherweise den USB-Funktionsuntergrenzer-Filtertreiber für die Ladegeräterkennung zur Verfügung. Sie können Einen eigenen Filtertreiber implementieren, wenn Sie den mitgelieferten Synopsys USB 3.0- oder ChipIdea USB 2.0-Clienttreiber verwenden.

  • USB-hostseitige Treiber

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

    Nicht alle USB-Geräteklassen werden auf Windows 10 Mobile unterstützt.

  • USB-Connector-Manager

    Microsoft stellt einen UCSI-In-Box-Treiber mit Windows (UcmUcsiCx.sys) bereit, der die in der Usb Type-C Connector System Software Interface Specification definierten Features implementiert. Die Spezifikation beschreibt die Funktionen von UCSI und erläutert die Register und Datenstrukturen für Entwickler von Hardwarekomponenten, Systementwicklern und Gerätetreibern.

    Dieser Treiber ist für Systeme mit eingebetteten Controllern vorgesehen. Dieser Treiber ist ein Client für den von Microsoft bereitgestellten USB-Connector-Manager-Klassenerweiterungstreiber (Ucmcx.sys). Der Treiber verarbeitet Aufgaben, z. B. das Initiieren einer Anforderung an die Firmware, um die Daten oder Energierollen zu ändern, und das Abrufen von Informationen, die zum Bereitstellen von Problembehandlungsmeldungen für den Benutzer erforderlich sind.

UCSI-Befehle, die für Windows erforderlich sind

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

Zusätzlich zu den als Erforderlich markierten Befehlen erfordert Windows die folgenden Befehle:

  • 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 der unterstützten Anbieterfunktionen
    • Ausgehandelte Energieebenenänderung
  • GET_CONNECTOR_STATUS: Das System oder der Controller muss diese status Änderungen in GET_CONNECTOR_STATUS unterstützen:
    • Änderung der unterstützten Anbieterfunktionen
    • Ausgehandelte Energieebenenänderung

Informationen zu den Aufgaben, die für die Implementierung von UCSI im BIOS erforderlich sind, 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-Spezifikationsversionen 2.0 und 2.1. Die UCSI-Spezifikation 2.0 weist breaking changes in der Speicherzuordnung ihrer Datenstrukturen auf, wie in der UCSI-Spezifikation Tabelle 3-1-Datenstrukturen definiert. Um die Abwärtskompatibilität aufrechtzuerhalten, benötigt Windows das UCSI PPM der Spezifikationsversion 2.0 oder höher, um die folgende _DSM-Funktion unter dem UCM-UCSI ACPI-Gerät in der ACPI-Firmware zu implementieren und einen Wert ungleich null zurückzugeben, um anzugeben, 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 Ganze Zahl (32 Bit) 0x00000000 (Standard): Wenn die VERSION Struktur, wie in UCSI-Spezifikationstabelle 3-1-Datenstrukturen definiert, den Wert 2,0 oder höher aufweist, folgt UCSI OPM weiterhin der UCSI-Spezifikation 1.2. Andernfalls folgt UCSI OPM der UCSI-Spezifikation gemäß dem Wert in der VERSION -Struktur.

Hinweis

Für UCM-UCSI ACPI-Geräte ist dies eine neue Funktion in einer vorhandenen _DSM-Methode. Andere Funktionen dieser _DSM-Methode sollten gemäß dem Intel BIOS-Implementierungsdokument des UCSI implementiert worden sein. Funktion 0, die eine Bitmaske aller unterstützten Funktionen zurückgibt, sollte entsprechend aktualisiert werden.

Beispielflow 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 Device Attach-Ereignis, und das Windows 10 System-DRP-System wird zunächst zur 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 ihr Verbindungsstatus = 1 und Connectorpartnertyp = DFP. ​
  2. Die Treiber im USB-Funktionsstapel reagieren auf die Enumeration.
  3. Die USB-Connector-Manager-Klassenerweiterung erkennt, dass der USB-Funktionsstapel geladen wurde und sich daher das System im falschen Zustand befindet. Er weist den UCSI-Treiber an, anforderungen set USB Operation Role und Set Power Direction Role an die Firmware zu senden.
  4. Usb Type-C Hardware/Firmware initiiert den Role-Swap-Vorgang mit dem DFP.

Erkennen einer Fehlerbedingung für einen Ladeladefehler

  1. USB Type-C Hardware/Firmware erkennt, dass ein Ladegerät angeschlossen ist, und handelt einen Standardstromvertrag aus. Es stellt auch fest, dass das Ladegerät nicht genügend Strom für das System bereitstellt.

  2. USB Type-C Hardware/Firmware legt das langsame Ladebit 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 Verbindungsstatus = 1, Connector-Partnertyp = DFP und Akkuladestatus = Langsam/Trickle.
  3. Die USB-Connector-Manager-Klassenerweiterung sendet eine Benachrichtigung an die Benutzeroberfläche, um die Meldung zur Problembehandlung für den Fehler des Ladegeräts anzuzeigen.

Testen von UCSI

Es gibt viele Möglichkeiten, Ihre UCSI-Implementierung zu testen. Verwenden Sie zum Testen einzelner Befehle in Ihrer UCSI BIOS/EC-Implementierung UCSIControl.exe, die im MUTT Software Pack bereitgestellt wird. Verwenden Sie zum Testen Ihrer vollständigen UCSI-Implementierung sowohl die UCSI-Tests, die im Windows Hardware Lab Kit (HLK) zu finden sind, als auch die Schritte in den manuellen Interop-Verfahren für Typ-C.

UCSIControl.exe

Sie können einzelne Befehle in Ihrer UCSI BIOS/EC-Implementierung testen, indem Sie UCSIControl.exe verwenden. Mit diesem Tool können Sie UCSI-Befehle über den UCSI-Treiber an die Firmware senden. Es erfordert, dass der Treiber geladen und ausgeführt wird und auch die Testschnittstelle für den Treiber aktiviert ist. Standardmäßig ist diese Schnittstelle nicht aktiviert, um zu verhindern, dass nicht autorisierte Benutzer auf einem Einzelhandelssystem darauf zugreifen können.

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

  2. Halten Sie das Gerät gedrückt (oder klicken Sie mit der rechten Maustaste darauf), wählen Sie Eigenschaften aus, und öffnen Sie die Registerkarte Details .

  3. Wählen Sie in der Dropdownliste 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 Instance Pfad des Geräts.

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

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

  7. Starten Sie das Gerät neu, indem Sie auf dem Geräteknoten in Geräte-Manager die Option Deaktivieren auswählen und dann Aktivieren auswählen. 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
PPM-Zurücksetzung UcsiControl.exe Senden 0 1
Zurücksetzen des Connectors Soft Reset: UcsiControl.exe Send 0 10003

Hard Reset: UcsiControl.exe Send 0 810003
Festlegen der Aktivierung von Benachrichtigungen Alle Benachrichtigungen: UcsiControl.exe Send 0 ffff0005

Nur Befehlsabschluss: UcsiControl.exe Send 0 00010005

Keine Benachrichtigung: UcsiControl.exe Send 0 00000005
Abrufen der Funktion UcsiControl.exe Senden 0 6
Abrufen der Connectorfunktion UcsiControl.exe Senden 0 10007
Festlegen von UOM DFP: UcsiControl.exe Send 0 810008

UFP: UcsiControl.exe Senden von 0 1010008

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

UFP: UcsiControl.exe Send 0 1010009

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

Consumer: UcsiControl.exe Send 0 101000B

Annehmen: UcsiControl.exe Senden 0 201000B
Abrufen von PDOs Lokale Quelle: UcsiControl.exe Senden von 7 00010010

Lokale Senke: UcsiControl.exe Senden von 3 00010010

Remotequelle: UcsiControl.exe Send 7 00810010

Remotesenke: UcsiControl.exe Send 3 00810010
Abrufen des Connectorstatus UcsiControl.exe Send 0 010012
Abrufen des Fehlerstatus UcsiControl.exe Senden 0 13