Driver UCSI (USB Type-C® Connector Software Interface)

Microsoft fornisce un driver conforme alla specifica UCSI (Usb Type-C® Connector System Interface) per il trasporto ACPI. Se la progettazione include un controller incorporato con trasporto ACPI, implementare UCSI nel BIOS/EC del sistema e caricare il driver UCSI in-box (UcmUcsiCx.sys e UcmUcsiAcpiClient.sys).

Se l'hardware conforme a UCSI usa un trasporto diverso da ACPI, è necessario scrivere un driver client UCSI.

Driver per il supporto dei componenti USB Type-C per sistemi con controller incorporati

Ecco un esempio di sistema con un controller incorporato.

Diagramma dei componenti software di tipo USB-C.

Nell'esempio precedente, il cambio di ruolo USB viene gestito nel firmware dello stack di driver del sistema e del commutatore di ruolo USB non viene caricato. In un altro sistema, lo stack di driver potrebbe non essere caricato perché il doppio ruolo non è supportato.

Nell'immagine precedente,

  • Driver lato dispositivo USB

    I driver sul lato dispositivo USB serviziono la funzione/dispositivo/periferica. L'estensione della classe del controller di funzione USB supporta MTP (Media Transfer Protocol) e carica usando i caricatori BC 1.2. Microsoft fornisce driver client predefiniti per i controller USB 3.0 e ChipIdea USB 2.0 di Synopsys. È possibile scrivere un driver client personalizzato per il controller di funzione usando interfacce di programmazione del driver client del controller di funzione USB. Per altre informazioni, vedere Sviluppo di driver Windows per controller di funzione USB.

    Il fornitore soC potrebbe fornire il driver filtro inferiore della funzione USB per il rilevamento del caricatore. È possibile implementare un driver di filtro personalizzato se si usa il driver client USB 3.0 o ChipIdea USB 2.0 in-box.

  • Driver lato host USB

    I driver lato host USB sono un set di driver che funzionano con controller host USB conformi AHCI o XHCI. I driver vengono caricati se il driver del commutatore di ruolo enumera il ruolo host. Se il controller host non è conforme alle specifiche, è possibile scrivere un driver personalizzato usando l'interfaccia di programmazione UCX (USB Host Controller Extension). Per informazioni, vedere Sviluppo di driver Windows per controller host USB.

    Non tutte le classi di dispositivi USB sono supportate in Windows 10 Mobile.

  • Gestione connettori USB

    Microsoft fornisce un driver predefinito UCSI con Windows (UcmUcsiCx.sys) che implementa le funzionalità definite nella specifica dell'interfaccia software del sistema del connettore USB Type-C. La specifica descrive le funzionalità di UCSI e illustra i registri e le strutture di dati, per progettisti di componenti hardware, generatori di sistemi e sviluppatori di driver di dispositivo.

    Questo driver è destinato ai sistemi con controller incorporati. Questo driver è un client per il driver di estensione della classe di gestione connettori USB fornito da Microsoft (Ucmcx.sys). Il driver gestisce attività come l'avvio di una richiesta al firmware per modificare i dati o i ruoli di risparmio energia e ottenere informazioni necessarie per fornire messaggi di risoluzione dei problemi all'utente.

Comandi UCSI richiesti da Windows

Vedere la specifica UCSI per i comandi necessari in tutte le implementazioni UCSI.

Oltre ai comandi contrassegnati come Obbligatorio, Windows richiede questi comandi:

  • GET_ALTERNATE_MODES
  • GET_CAM_SUPPORTED
  • GET_PDOS
  • SET_NOTIFICATION_ENABLE: il sistema o il controller deve supportare le notifiche seguenti all'interno di SET_NOTIFICATION_ENABLE:
    • Modifica delle funzionalità del provider supportate
    • Modifica del livello di alimentazione negoziata
  • GET_CONNECTOR_STATUS: il sistema o il controller deve supportare queste modifiche dello stato del connettore all'interno di GET_CONNECTOR_STATUS:
    • Modifica delle funzionalità del provider supportate
    • Modifica del livello di alimentazione negoziata

Per informazioni sulle attività necessarie per implementare UCSI nel BIOS, vedere Intel BIOS Implementation of UCSI .For information about the tasks required to implement UCSI in the BIOS implementation, see Intel BIOS Implementation of UCSI.

Dispositivo ACPI UCM-UCSI per UCSI 2.0 e versioni successive

A partire da Windows 11, versione 22H2 aggiornamento di settembre, i driver di dispositivo ACPI UCM-UCSI di Windows supportano la specifica UCSI versione 2.0 e 2.1. La specifica UCSI 2.0 presenta modifiche di rilievo nel mapping di memoria delle relative strutture di dati, come definito nella tabella 3-1 delle strutture di dati della specifica UCSI. Per mantenere la compatibilità con le versioni precedenti, Windows richiede UCSI PPM della versione 2.0 o successiva per implementare la funzione di _DSM seguente nel dispositivo ACPI UCM-UCSI ACPI e restituire un valore diverso da zero per indicare che UCSI OPM deve seguire la versione della specifica UCSI segnalata.

  • Arg0: UUID = 6F8398C2-7CA4-11E4-AD36-631042B5008F
  • Arg1: ID revisione = 0
  • Arg2: Indice funzione = 5
  • Arg3: Pacchetto vuoto (non usato)

Valore restituito:

Elemento Tipo di oggetto Descrizione
UsePpmReportedUcsiVersion Intero (32 bit) 0x00000000 (impostazione predefinita): se la VERSION struttura, come definito nella specifica UCSI Tabella 3-1, ha il valore 2.0 o superiore, UCSI OPM segue ancora la specifica UCSI 1.2. In caso contrario, UCSI OPM segue la specifica UCSI in base al valore nella VERSION struttura.

Nota

Per i dispositivi ACPI UCM-UCSI, si tratta di una nuova funzione in un metodo di _DSM esistente. Altre funzioni di questo metodo _DSM dovrebbero essere state implementate in base all'implementazione intel BIOS del documento UCSI . Anche la funzione 0, che restituisce una maschera di bit di tutte le funzioni supportate, deve essere aggiornata di conseguenza.

Flusso di esempio per UCSI

Gli esempi forniti in questa sezione descrivono l'interazione tra l'hardware/firmware USB Type-C, il driver UCSI e il sistema operativo.

Rilevamento dei ruoli DRP

  1. L'hardware/firmware USB Type-C rileva un evento di collegamento del dispositivo e il sistema DRP di sistema Windows 10 diventa inizialmente il ruolo UFP.
    1. Il firmware invia una notifica che indica una modifica nel connettore.
    2. Il driver UCSI invia una richiesta di GET_CONNECTOR_STATUS.
    3. Il firmware risponde che lo stato di connessione = 1 e il tipo di partner connettore = DFP. ​
  2. I driver nello stack di funzioni USB rispondono all'enumerazione .
  3. L'estensione della classe di gestione connettori USB riconosce che lo stack di funzioni USB è stato caricato e quindi il sistema è nello stato errato. Indica al driver UCSI di inviare le richieste Set USB Operation Role (Imposta ruolo operazione USB) e Set Power Direction Role (Imposta ruolo direzione alimentazione) al firmware.
  4. L'hardware/firmware USB Type-C avvia l'operazione di scambio dei ruoli con DFP.

Rilevamento di una condizione di errore di mancata corrispondenza del caricatore

  1. L'hardware/firmware USB Type-C rileva che un caricatore è connesso e negozia un contratto di alimentazione predefinito. Osserva inoltre che il caricatore non fornisce potenza sufficiente al sistema.

  2. L'hardware/firmware USB Type-C imposta il bit di ricarica lenta.

    1. Il firmware invia una notifica che indica una modifica nel connettore.
    2. Il driver UCSI invia una richiesta di GET_CONNECTOR_STATUS.
    3. Il firmware risponde con stato connect = 1, connettore tipo partner=DFP e stato di ricarica della batteria = lento/trucco.
  3. L'estensione della classe di gestione connettori USB invia una notifica all'interfaccia utente per visualizzare il messaggio di risoluzione dei problemi di mancata corrispondenza del caricatore.

Come testare UCSI

Esistono molti modi per testare l'implementazione UCSI. Per testare i singoli comandi nell'implementazione DEL BIOS/EC UCSI, usare UCSIControl.exe, disponibile in MUTT Software Pack. Per testare l'implementazione UCSI completa, usare entrambi i test UCSI disponibili in Windows Hardware Lab Kit (HLK) e i passaggi descritti nelle procedure di interoperabilità manuale type-C.

UCSIControl.exe

È possibile testare i singoli comandi nell'implementazione del BIOS/EC UCSI usando UCSIControl.exe. Questo strumento consente di inviare comandi UCSI al firmware tramite il driver UCSI. Richiede il caricamento e l'esecuzione del driver e anche l'interfaccia di test per il driver abilitato. Per impostazione predefinita, questa interfaccia non è abilitata in modo da impedire che sia accessibile agli utenti non autorizzati in un sistema di vendita al dettaglio.

  1. Individuare il nodo del dispositivo in Gestione dispositivi (devmgmt.msc) denominato UCSI USB Connector Manager. Il nodo si trova nella categoria Controller del bus seriale universale .

  2. Selezionare e tenere premuto (o fare clic con il pulsante destro del mouse) sul dispositivo e scegliere Proprietà e aprire la scheda Dettagli .

  3. Selezionare Device Instance Path (Percorso istanza dispositivo) nell'elenco a discesa e prendere nota del valore della proprietà.

  4. Apri l'Editor del Registro di sistema (regedit.exe).

  5. Passare al percorso dell'istanza del dispositivo in questa chiave.

    <HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\device-instance-path>\Parametri del dispositivo

  6. Creare un valore DWORD denominato TestInterfaceEnabled e impostare il valore su 0x1.

  7. Riavviare il dispositivo selezionando l'opzione Disabilita nel nodo del dispositivo in Gestione dispositivi e quindi selezionando Abilita. In alternativa, è possibile riavviare il PC.

È possibile visualizzare la Guida eseguendo UcsiControl.exe /?.

Ecco i comandi comuni:

Comando UCSI comando UcsiControl.exe
Reimpostazione DI PPM UcsiControl.exe Invia 0 1
Reimpostazione connettore Reimpostazione temporanea: UcsiControl.exe Invia 0 10003

Reimpostazione rapida: UcsiControl.exe Invia 0 810003
Imposta abilitazione notifica Tutte le notifiche: UcsiControl.exe Invia 0 ffff0005

Completamento solo dei comandi: UcsiControl.exe Invia 0 00010005

Nessuna notifica: UcsiControl.exe Invia 0 00000005
Ottenere funzionalità UcsiControl.exe Invia 0 6
Ottenere la funzionalità del connettore UcsiControl.exe Invia 0 10007
Impostare UOM DFP: UcsiControl.exe Invia 0 810008

UFP: UcsiControl.exe Invia 0 1010008

DRP: UcsiControl.exe Invia 0 2010008
Impostare UOR DFP: UcsiControl.exe Invia 0 810009

UFP: UcsiControl.exe Invia 0 1010009

Accetta: UcsiControl.exe Invia 0 2010009
Impostare PDR Provider: UcsiControl.exe Send 0 81000B

Consumer: UcsiControl.exe Invia 0 101000B

Accetta: UcsiControl.exe Invia 0 201000B
Ottenere i file PDO Origine locale: UcsiControl.exe Invia 7 00010010

Sink locale: UcsiControl.exe Invia 3 00010010

Origine remota: UcsiControl.exe Invia 7 00810010

Sink remoto: UcsiControl.exe Invia 3 00810010
Ottenere lo stato del connettore UcsiControl.exe Invia 0 010012
Ottenere lo stato dell'errore UcsiControl.exe Invia 0 13