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 für die 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.
Im vorherigen Beispiel wird der USB-Rollenwechsel in der Firmware des Systems behandelt. Der USB-Rollenwechsel-Treiberstapel wird nicht geladen. In einem anderen System wird der Treiberstapel möglicherweise nicht geladen, da duale Rollen nicht unterstützt werden.
In der obigen Abbildung:
Geräteseitige USB-Treiber
Die geräteseitigen USB-Treiber unterstützen die Funktion/das Gerät/das Peripheriegerät. Die Erweiterung der USB-Funktionscontroller-Klasse unterstützt das Media Transfer Protocol (MTP) und das Laden über BC 1.2-Ladegeräte. 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. Sie können Ihren eigenen Filtertreiber implementieren, wenn Sie den integrierten Synopsys USB 3.0- oder ChipIdea USB 2.0-Clienttreiber verwenden.
Hostseitige USB-Treiber
Die USB-hostseitigen Treiber sind eine Reihe von Treibern, die mit EHCI- oder XHCI-kompatiblen USB-Hostcontrollern funktionieren. Die Treiber werden geladen, wenn der Rollenwechseltreiber die Hostrolle enumeriert. Wenn Ihr Hostcontroller nicht spezifikationskonform ist, können Sie einen benutzerdefinierten Treiber schreiben, indem Sie USB-Hostcontrollererweiterung (UCX)-Programmierschnittstelleverwenden. Weitere Informationen finden Sie unter Entwickeln von Windows-Treibern für USB-Hostcontroller.
Nicht alle USB-Geräteklassen werden von Windows 10 Mobile unterstützt.
USB Connector 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 und 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 innerhalb von 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 innerhalb von GET_CONNECTOR_STATUS unterstützen:
- Änderung bei den unterstützten Anbieterfunktionen
- Änderung beim ausgehandelten Leistungsniveau
Informationen zu den aufgaben, die zum Implementieren von UCSI im BIOS erforderlich sind, finden Sie unter Intel BIOS Implementation of 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: Revision 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
Für UCM-UCSI ACPI-Geräte ist dies eine neue Funktion in einer bestehenden _DSM-Methode. 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
- USB-Type-C-Hardware/Firmware erkennt ein Geräteanfügungsereignis, und das Windows 10-DRP-System übernimmt zunächst die UFP-Rolle.
- Die Firmware sendet eine Benachrichtigung, die eine Änderung des Connectors angibt.
- Der UCSI-Treiber sendet eine GET_CONNECTOR_STATUS Anforderung.
- Die Firmware antwortet, dass der Verbindungsstatus = 1 und der Connector-Partnertyp = DFP ist.
- Die Treiber im USB-Funktionsstapel reagieren auf die Enumeration.
- 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.
- USB Type-C-Hardware/Firmware leitet den Rollenwechsel mit dem DFP ein.
Erkennen der Fehlerbedingung „Ladegerätkonflikt“
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.
USB-Type-C-Hardware/Firmware legt das Bit für langsames Aufladen fest.
- Die Firmware sendet eine Benachrichtigung, die eine Änderung des Connectors angibt.
- Der UCSI-Treiber sendet eine GET_CONNECTOR_STATUS Anforderung.
- Die Firmware reagiert mit Verbindungsstatus = 1, Connector-Partnertyp = DFP und Akkuladestatus = Langsam/Trickle.
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, wie im MUTT Software Pack bereitgestellt. 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. Er erfordert, dass der Treiber geladen und ausgeführt wird und auch die Testschnittstelle für den Treiber aktiviert ist. Diese Schnittstelle ist standardmäßig nicht aktiviert, um zu verhindern, dass nicht autorisierte Benutzer in einem Einzelhandelssystem darauf zugreifen können.
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.
Halten Sie auf dem Gerät Eigenschaften gedrückt (oder klicken Sie mit der rechten Maustaste darauf), und öffnen Sie die Registerkarte Details.
Wählen Sie im Dropdownmenü Geräteinstanzpfad aus, und notieren Sie den Eigenschaftswert.
Öffnen Sie den Registrierungs-Editor (regedit.exe).
Navigieren Sie unter diesem Schlüssel zum Geräteinstanzpfad.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\<device-instance-path>\Geräteparameter
Erstellen Sie einen DWORD-Wert namens TestInterfaceEnabled, und legen Sie den Wert auf 0x1 fest.
Starten Sie das Gerät neu, indem Sie die Option Deaktivieren auf dem Geräteknoten im Geräte-Manager 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 command | Befehl UcsiControl.exe |
---|---|
Zurücksetzen der PPM | UcsiControl.exe Send 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 Send 0 6 |
Connector-Funktionsabruf | UcsiControl.exe Send 0 10007 |
Festlegen von UOM | DFP: UcsiControl.exe Send 0 810008 UFP: UcsiControl.exe Send 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 Send 0 2010009 |
Festlegen von PDR | Anbieter: UcsiControl.exe Send 0 81000B Consumer: UcsiControl.exe Send 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 Send 0 010012 |
Fehlerstatus abrufen | UcsiControl.exe Send 0 13 |