Pilote UCSI (Connecteur USB Type-C®)

Microsoft fournit un pilote conforme à la spécification UCSI (Connecteur USB Type-C®) pour le transport ACPI. Si votre conception inclut un contrôleur incorporé avec transport ACPI, implémentez UCSI dans le BIOS/EC de votre système et chargez le pilote UCSI intégré (UcmUcsiCx.sys et UcmUcsiAcpiClient.sys).

Si votre matériel conforme à l’UCSI utilise un transport autre qu’ACPI, vous devez écrire un pilote client UCSI.

Pilotes pour la prise en charge des composants USB Type-C pour les systèmes avec des contrôleurs incorporés

Voici un exemple de système avec un contrôleur incorporé.

Diagramme des composants logiciels USB Type-C.

Dans l’exemple précédent, la commutation de rôle USB est gérée dans le microprogramme du système et la pile de pilotes de commutateur de rôle USB n’est pas chargée. Dans un autre système, la pile de pilotes peut ne pas être chargée, car le double rôle n’est pas pris en charge.

Dans l’image précédente,

  • Pilotes usb côté périphérique

    Les pilotes côté périphérique USB service de la fonction/périphérique/périphérique. L’extension de classe de contrôleur de fonction USB prend en charge le protocole MTP (Media Transfer Protocol) et le chargement à l’aide de chargeurs BC 1.2. Microsoft fournit des pilotes clients in-box pour les contrôleurs SYNopsys USB 3.0 et ChipIdea USB 2.0. Vous pouvez écrire un pilote client personnalisé pour votre contrôleur de fonction à l’aide d’interfaces de programmation du pilote client du contrôleur de fonction USB. Pour plus d’informations, consultez Développement de pilotes Windows pour les contrôleurs de fonction USB.

    Le fournisseur soC peut vous fournir le pilote de filtre inférieur de la fonction USB pour la détection du chargeur. Vous pouvez implémenter votre propre pilote de filtre si vous utilisez le pilote client Synopsys USB 3.0 ou ChipIdea USB 2.0.

  • Pilotes USB côté hôte

    Les pilotes USB côté hôte sont un ensemble de pilotes qui fonctionnent avec des contrôleurs hôtes USB conformes à EHCI ou XHCI. Les pilotes sont chargés si le pilote de commutateur de rôle énumère le rôle hôte. Si votre contrôleur hôte n’est pas conforme aux spécifications, vous pouvez écrire un pilote personnalisé à l’aide de l’interface de programmation UCX (USB Host Controller Extension). Pour plus d’informations, consultez Développement de pilotes Windows pour les contrôleurs hôtes USB.

    Toutes les classes de périphériques USB ne sont pas prises en charge sur Windows 10 Mobile.

  • Gestionnaire de connecteurs USB

    Microsoft fournit un pilote intégré UCSI avec Windows (UcmUcsiCx.sys) qui implémente les fonctionnalités définies dans la spécification de l’interface logicielle du système de connecteur USB Type-C. La spécification décrit les fonctionnalités de l’UCSI et explique les registres et les structures de données pour les concepteurs de composants matériels, les générateurs de systèmes et les développeurs de pilotes d’appareil.

    Ce pilote est destiné aux systèmes avec des contrôleurs incorporés. Ce pilote est un client du pilote d’extension de la classe gestionnaire de connecteur USB fourni par Microsoft (Ucmcx.sys). Le pilote gère des tâches telles que le lancement d’une demande au microprogramme pour modifier les données ou les rôles d’alimentation et l’obtention des informations nécessaires pour fournir des messages de résolution des problèmes à l’utilisateur.

Commandes UCSI requises par Windows

Consultez la spécification UCSI pour connaître les commandes requises dans toutes les implémentations UCSI.

Outre les commandes marquées comme Obligatoires, Windows nécessite les commandes suivantes :

  • GET_ALTERNATE_MODES
  • GET_CAM_SUPPORTED
  • GET_PDOS
  • SET_NOTIFICATION_ENABLE : le système ou le contrôleur doit prendre en charge les notifications suivantes dans SET_NOTIFICATION_ENABLE :
    • Modification des fonctionnalités du fournisseur prises en charge
    • Modification négociée du niveau de puissance
  • GET_CONNECTOR_STATUS : le système ou le contrôleur doit prendre en charge ces modifications de status de connecteur dans GET_CONNECTOR_STATUS :
    • Modification des fonctionnalités du fournisseur prises en charge
    • Modification négociée du niveau de puissance

Pour plus d’informations sur les tâches requises pour implémenter UCSI dans le BIOS, consultez Implémentation du BIOS Intel.

Appareil ACPI UCM-UCSI pour UCSI 2.0 et versions ultérieures

À compter de Windows 11 mise à jour de septembre de la version 22H2, les pilotes de périphérique ACPI UCM-UCSI windows prennent en charge les spécifications UCSI version 2.0 et 2.1. La spécification UCSI 2.0 présente des changements cassants dans le mappage de mémoire de ses structures de données, comme défini dans la spécification UCSI Table 3-1 Data Structures. Pour maintenir la compatibilité descendante, Windows exige que le PPM UCSI de la version 2.0 ou ultérieure de la spécification implémente la fonction _DSM suivante sous l’appareil ACPI UCM-UCSI dans le microprogramme ACPI et retourne une valeur différente de zéro pour indiquer que l’OPM UCSI doit suivre la version de spécification UCSI signalée.

  • Arg0 : UUID = 6F8398C2-7CA4-11E4-AD36-631042B5008F
  • Arg1 : ID de révision = 0
  • Arg2 : Index de fonction = 5
  • Arg3 : package vide (non utilisé)

Valeur de retour :

Élément Type d’objet Description
UsePpmReportedUcsiVersion Entier (32 bits) 0x00000000 (par défaut) : si la VERSION structure, telle que définie dans la spécification UCSI Table 3-1 Data Structures, a la valeur 2.0 ou supérieure, UCSI OPM suit toujours la spécification UCSI 1.2. Sinon, LAM UCSI suit la spécification UCSI en fonction de la valeur dans la VERSION structure.

Notes

Pour les appareils ACPI UCM-UCSI, il s’agit d’une nouvelle fonction dans une méthode _DSM existante. D’autres fonctions de cette méthode _DSM doivent avoir été implémentées conformément au document d’implémentation du BIOS Intel de l’UCSI . La fonction 0, qui retourne un masque de bits de toutes les fonctions prises en charge, doit également être mise à jour en conséquence.

Exemple de flux pour UCSI

Les exemples fournis dans cette section décrivent l’interaction entre le matériel/microprogramme USB Type-C, le pilote UCSI et le système d’exploitation.

Détection de rôle DRP

  1. Le matériel/microprogramme USB Type-C détecte un événement d’attachement de périphérique et le système DRP Windows 10 devient initialement le rôle UFP.
    1. Le microprogramme envoie une notification indiquant une modification dans le connecteur.
    2. Le pilote UCSI envoie une requête GET_CONNECTOR_STATUS.
    3. Le microprogramme répond que son état de connexion = 1 et le type de partenaire de connecteur = DFP. ​
  2. Les pilotes de la pile de fonctions USB répondent à l’énumération.
  3. L’extension de classe gestionnaire de connecteurs USB reconnaît que la pile de fonctions USB a été chargée et que le système est donc dans un état incorrect. Il indique au pilote UCSI d’envoyer des demandes définir le rôle d’opération USB et définir le rôle de direction de l’alimentation au microprogramme.
  4. Le matériel/microprogramme USB Type-C lance l’opération d’échange de rôle avec le DFP.

Détection d’une condition d’erreur d’incompatibilité de chargeur

  1. Le matériel/microprogramme USB Type-C détecte qu’un chargeur est connecté et négocie un contrat d’alimentation par défaut. Il observe également que le chargeur ne fournit pas suffisamment de puissance au système.

  2. Le matériel/microprogramme USB Type-C définit le bit de chargement lent.

    1. Le microprogramme envoie une notification indiquant une modification dans le connecteur.
    2. Le pilote UCSI envoie une requête GET_CONNECTOR_STATUS.
    3. Le microprogramme répond avec Connect Status = 1, Connector Partner Type=DFP et Battery Charging Status = Slow/Trickle.
  3. L’extension de classe du gestionnaire de connecteurs USB envoie une notification à l’interface utilisateur pour afficher le message de résolution des problèmes de non-correspondance du chargeur.

Comment tester UCSI

Il existe de nombreuses façons de tester votre implémentation UCSI. Pour tester des commandes individuelles dans votre implémentation UCSI BIOS/EC, utilisez UCSIControl.exe, qui est fourni dans le pack logiciel MUTT. Pour tester votre implémentation UCSI complète, utilisez les tests UCSI qui se trouvent dans le Kit HLK (Hardware Lab Kit) Windows et les étapes des procédures d’interopérabilité manuelles de type C.

UCSIControl.exe

Vous pouvez tester des commandes individuelles dans votre implémentation UCSI BIOS/EC à l’aide de UCSIControl.exe. Cet outil vous permet d’envoyer des commandes UCSI au microprogramme via le pilote UCSI. Il nécessite que le pilote soit chargé et en cours d’exécution, et que l’interface de test du pilote soit activée. Par défaut, cette interface n’est pas activée afin d’empêcher son accès aux utilisateurs non autorisés sur un système de vente au détail.

  1. Recherchez le nœud d’appareil dans Gestionnaire de périphériques (devmgmt.msc) nommé UCSI USB Connector Manager. Le nœud se trouve sous la catégorie contrôleurs De bus série universel .

  2. Sélectionnez et maintenez la touche (ou cliquez avec le bouton droit) sur l’appareil, puis sélectionnez Propriétés et ouvrez l’onglet Détails .

  3. Sélectionnez Chemin d’accès de l’instance de l’appareil dans la liste déroulante et notez la valeur de la propriété.

  4. Ouvrez l’Éditeur du Registre (regedit.exe).

  5. Accédez au chemin d’accès instance de l’appareil sous cette clé.

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

  6. Créez une valeur DWORD nommée TestInterfaceEnabled et définissez la valeur sur 0x1.

  7. Redémarrez l’appareil en sélectionnant l’option Désactiver sur le nœud de l’appareil dans Gestionnaire de périphériques, puis en sélectionnant Activer. Vous pouvez également redémarrer le PC.

Vous pouvez afficher l’aide en exécutant UcsiControl.exe / ?.

Voici les commandes courantes :

Commande UCSI commande UcsiControl.exe
Réinitialisation ppm UcsiControl.exe Envoyer 0 1
Réinitialisation du connecteur Réinitialisation réversible : UcsiControl.exe Send 0 10003

Réinitialisation matérielle : UcsiControl.exe Envoyer 0 810003
Définir l’activation de la notification Toutes les notifications : UcsiControl.exe Send 0 ffff0005

Exécution de la commande uniquement : UcsiControl.exe Envoyer 0 00010005

Aucune notification : UcsiControl.exe Envoyer 0 00000005
Obtenir la fonctionnalité UcsiControl.exe Envoyer 0 6
Obtenir la fonctionnalité de connecteur UcsiControl.exe Send 0 10007
Définir UOM DFP : UcsiControl.exe Send 0 810008

UFP : UcsiControl.exe Envoyer 0 1010008

DRP : UcsiControl.exe Send 0 2010008
Définir l’UOR DFP : UcsiControl.exe Send 0 810009

UFP : UcsiControl.exe Envoyer 0 1010009

Accepter : UcsiControl.exe Envoyer 0 2010009
Définir le pdr Fournisseur : UcsiControl.exe Send 0 81000B

Consommateur : UcsiControl.exe Send 0 101000B

Accepter : UcsiControl.exe Send 0 201000B
Obtenir des PDO Source locale : UcsiControl.exe Send 7 00010010

Récepteur local : UcsiControl.exe Send 3 00010010

Source distante : UcsiControl.exe Send 7 00810010

Récepteur distant : UcsiControl.exe Envoyer 3 00810010
Obtenir l’état du connecteur UcsiControl.exe Envoyer 0 010012
Obtenir l’état de l’erreur UcsiControl.exe Envoyer 0 13