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.
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
- USB Type-C Hardware/Firmware erkennt ein Device Attach-Ereignis, und das Windows 10 System-DRP-System wird zunächst zur 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 ihr Verbindungsstatus = 1 und Connectorpartnertyp = DFP.
- Die Treiber im USB-Funktionsstapel reagieren auf die Enumeration.
- 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.
- Usb Type-C Hardware/Firmware initiiert den Role-Swap-Vorgang mit dem DFP.
Erkennen einer Fehlerbedingung für einen Ladeladefehler
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.
USB Type-C Hardware/Firmware legt das langsame Ladebit fest.
- Die Firmware sendet eine Benachrichtigung, die eine Änderung des Connectors angibt.
- Der UCSI-Treiber sendet eine GET_CONNECTOR_STATUS-Anforderung.
- Die Firmware antwortet mit Verbindungsstatus = 1, Connector-Partnertyp = DFP und Akkuladestatus = Langsam/Trickle.
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.
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 .
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 .
Wählen Sie in der Dropdownliste Geräteinstanzpfad aus, und notieren Sie sich den Eigenschaftswert.
Öffnen Sie den Registrierungs-Editor (regedit.exe).
Navigieren Sie unter diesem Schlüssel zum Instance Pfad des Geräts.
<HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\device-instance-path>\Device Parameters
Erstellen Sie einen DWORD-Wert mit dem Namen TestInterfaceEnabled , und legen Sie den Wert auf 0x1 fest.
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 |