Pilotes côté périphérique USB dans Windows

Décrit l’architecture de la pile de fonctions USB.

Sur un périphérique USB, la pile de fonctions USB fait référence à un groupe de pilotes énumérés par le gestionnaire de Plug-and-Play, quand ACPI crée un objet de périphérique physique (PDO) de périphérique USB.

Dans un seul appareil de configuration, un périphérique USB peut définir une ou plusieurs interfaces. Par exemple, le protocole MTP (Media Transfer Protocol) pour le transfert de fichiers vers et à partir de l’appareil. Un périphérique USB composite peut prendre en charge plusieurs interfaces dans une même configuration. La pile de fonctions USB crée des PDO pour chaque interface et PnP Manager charge le pilote de classe qui crée l’objet de périphérique de fonction (FDO) pour cette interface.

La pile de fonctions USB est conceptualisée dans cette image :

pile de fonctions usb.

Applications et services

Pilote de classe de fonction USB

Un pilote de classe de fonction USB implémente les fonctionnalités d’une interface spécifique (ou d’un groupe d’interfaces) sur le périphérique USB. MTP et IpOverUsb sont des exemples de pilotes de classe fournis par le système. Le pilote de classe peut être implémenté uniquement en tant que pilote en mode noyau, ou il peut s’agir d’un service en mode utilisateur associé au pilote de classe fourni par le système GenericUSBFn.sys.

Un pilote de classe de fonction envoie des requêtes au contrôleur à l’aide d’un pilote de classe de fonction USB aux interfaces de programmation UFX.

Extension de classe de fonction USB (UFX)

L’extension de classe de fonction USB (UFX) est une extension fournie par le système à KMDF (Kernel-Mode Driver Framework ). USB est un bus standard qui dispose de certaines fonctionnalités et fonctionnalités requises. UFX est responsable de l’implémentation de la logique de fonction USB commune à tous les contrôleurs de fonction USB et de la gestion et/ou de la répartition des requêtes à partir des pilotes de classe de fonction USB. En particulier, UFX gère le processus d’énumération de l’appareil et de traitement des transferts de contrôle standard. Pour effectuer certaines de ces opérations, UFX doit connaître les fonctionnalités du bus. Ces fonctionnalités sont signalées à UFX lorsque l’interface d’extension de classe est établie.

UFX expose les IOCTL standard que les couches supérieures (pilote de classe de fonction USB et services en mode utilisateur) peuvent utiliser pour envoyer des requêtes au contrôleur. De plus, UFX informe les couches supérieures des requêtes standard reçues de l’hôte.

Pilote client de fonction USB

UFX fournit une interface abstraite qui fonctionne de manière cohérente sur différents contrôleurs. Toutefois, les contrôleurs ont des fonctionnalités différentes, avec des limitations telles que le nombre de points de terminaison, les types de points de terminaison, la faible consommation d’énergie et la mise en éveil à distance. Par exemple, certains contrôleurs prennent en charge DMA, tandis que d’autres ne le font pas. Certains contrôleurs implémentent des flux dans le matériel, tandis que d’autres contrôleurs s’attendent à ce que le pilote gère les flux. Pour ces raisons, seules les fonctionnalités courantes sont gérées dans UFX. Les transferts, la gestion de l’alimentation, la prise en charge des flux et d’autres fonctionnalités qui varient d’un contrôleur à l’autre sont gérés par le pilote client.

Le pilote client de fonction USB est responsable de l’implémentation d’opérations spécifiques au contrôleur. Il s’agit notamment de l’implémentation de transferts de données de point de terminaison, des changements d’état d’appareil USB (réinitialisation, suspension, reprise), de la détection de l’attachement/détachement, de la détection du port/du chargeur. Le pilote client est également responsable de la gestion de l’alimentation et des événements PnP.

Le pilote client de fonction est écrit en tant que pilote KMDF ( Kernel-Mode Driver Framework ) à l’aide d’un pilote de classe de fonction USB vers des interfaces de programmation UFX.

Microsoft fournit des pilotes clients de fonction intégré (UfxChipidea.sys, Ufxsynopsys.sys) pour les contrôleurs ChipIdea et Synopsys.

Pilote de filtre inférieur USB

Un pilote de filtre inférieur USB prend en charge la détection des chargeurs si le contrôleur de fonction utilise les pilotes Synopsys et ChipIdea en boîte. Le pilote de filtre gère la charge USB à partir de la détection de port USB. t doit publier un GUID pour chaque type de chargeur pris en charge, ainsi qu’une liste des propriétés de ce chargeur. Si un chargeur spécifique est configurable, le pilote de filtre USB inférieur définit une liste de PropertyIDs pris en charge et leurs types de valeurs correspondants qui peuvent lui être envoyés, pour configurer le chargeur. Le pilote avertit également la pile de la batterie quand elle peut commencer à charger et la quantité maximale de courant que l’appareil peut dessiner. Pour les pilotes clients autres que les pilotes Synopsys et ChipIdea, la logique de charge peut être implémentée dans le pilote client.

Un pilote de classe de fonction envoie une requête à UFX à l’aide d’interfaces de programmation pour prendre en charge les chargeurs propriétaires.