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 Plug-and-Play, lorsque ACPI crée un objet de périphérique physique de périphérique USB (PDO).
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 depuis l’appareil. Un périphérique USB composite peut prendre en charge plusieurs interfaces dans une configuration unique. 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 :
Applications et services
- Toutes les demandes en mode utilisateur sont envoyées au pilote de classe en mode noyau fourni par Microsoft GenericUSBFn.sys. Vous pouvez créer un service en mode utilisateur qui communique avec GenericUSBFn.sys en envoyant des codes de contrôle d’E/S (IOCTLs) tels que définis dans genericusbfnioctl.h. Pour plus d’informations sur ces IOCTL, consultez Communication avec GenericUSBFn.sys à partir d’un service en mode utilisateur
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 du 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 à l’infrastructure kmDF (Kernel-Mode Driver Framework ). USB est un bus standard et dispose de fonctionnalités et de fonctionnalités requises. UFX est responsable de l’implémentation de la logique de fonction USB qui est commune à tous les contrôleurs de fonction USB et à la gestion et/ou à la distribution de requêtes à partir de 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 des IOCTL standard que les couches supérieures (pilotes de classe de fonction USB et services en mode utilisateur) peuvent utiliser pour envoyer des requêtes au contrôleur. En outre, UFX notifie les couches supérieures sur les demandes standard reçues de l’hôte.
Pilote client de fonction USB
UFX fournit une interface abstraite qui fonctionne de manière cohérente entre 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 puissance, 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 du contrôleur au contrôleur sont gérées par le pilote client.
Le pilote client de fonction USB est chargé d’implémenter des opérations spécifiques au contrôleur. Il s’agit notamment de l’implémentation des transferts de données de point de terminaison, des modifications de l’état de l’appareil USB (réinitialisation, suspension, reprise), de la détection d’attachement/détachement, de port/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 du pilote de classe de fonction USB pour les 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 in-box. Le pilote de filtre gère la charge USB à partir de la détection de port USB. Il doit publier un GUID pour chaque type de chargeur qu’il prend en charge et 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 de leurs types de valeurs correspondants qui peuvent être envoyés à celui-ci 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 Synopsys et ChipIdea, la logique de chargement 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.