Partager via


Vue d’ensemble du support du pilote GPIO

À compter de Windows 8, l’extension d’infrastructure GPIO (GpioClx) simplifie la tâche d’écriture d’un pilote pour un périphérique de contrôleur GPIO. De plus, GpioClx fournit un support de pilote pour les périphériques qui se connectent aux broches GPIO. GpioClx, qui est une extension fournie par le système à l’infrastructure de pilote en mode noyau (KMDF), effectue des tâches de traitement communes aux membres de la classe de périphérique GPIO.

Cette vue d’ensemble présente les articles suivants :

Pilotes de contrôleur GPIO

Les fournisseurs de matériel fournissent des pilotes pour contrôler leurs contrôleurs GPIO. Un pilote de contrôleur GPIO est un pilote KMDF qui gère toutes les opérations spécifiques au matériel pour un contrôleur GPIO. Le pilote de contrôleur GPIO collabore avec GpioClx pour gérer les demandes d’E/S pour les groupes de broches GPIO configurées en tant qu’entrées de données et sorties de données. En outre, ce pilote collabore avec GpioClx pour gérer les demandes d’interruption à partir de broches GPIO configurées en tant qu’entrées d’interruption.

Un périphérique contrôleur GPIO possède un certain nombre de broches GPIO. Ces broches peuvent être physiquement connectées à des périphériques. Les broches GPIO peuvent être configurées en tant qu’entrées de données, sorties de données ou entrées de requête d’interruption. En règle générale, une broche GPIO est dédiée à un appareil périphérique et n’est pas partagée par deux appareils ou plus. Les connexions entre les broches GPIO et les périphériques sont fixes et ne peuvent pas être modifiées par l’utilisateur (par exemple, en supprimant un périphérique et en la remplaçant par un autre appareil). Par conséquent, l’affectation des broches GPIO aux périphériques peut être décrite dans le microprogramme de la plateforme.

Le diagramme suivant montre le pilote de contrôleur GPIO et GpioClx.

diagramme de blocs des composants gpio.

Le pilote de contrôleur GPIO et GpioClx communiquent entre eux via l’interface de pilote de périphérique GpioClx (DDI). Le pilote contrôleur GPIO appelle les méthodes de support du pilote qui sont implémentées par GpioClx. GpioClx appelle les fonctions de rappel d’événements qui sont implémentées par le pilote contrôleur GPIO.

Le pilote de contrôleur GPIO accède directement aux registres matériels de l’appareil de contrôleur GPIO.

GpioClx gère les demandes d’E/S des pilotes pour les périphériques qui se connectent physiquement aux broches GPIO. GpioClx traduit ces demandes d’E/S en opérations matérielles simples, qu’elle effectue en appelant les fonctions de rappel d’événement implémentées par le pilote du contrôleur GPIO. Par exemple, pour lire ou écrire des données dans un ensemble de broches GPIO, GpioClx appelle des fonctions de rappel d’événements telles que CLIENT_ReadGpioPins et CLIENT_WriteGpioPins. GpioClx gère les files d’attente d’E/S pour le contrôleur GPIO, ce qui permet de soulager le pilote du contrôleur GPIO de cette tâche.

En outre, GpioClx gère les interruptions principales de l’appareil du contrôleur GPIO et mappe ces interruptions aux interruptions secondaires, qui sont gérées par les pilotes de périphérique. Les interruptions principales sont des interruptions générées par des périphériques matériels. Les interruptions secondaires sont générées par le système d’exploitation en réponse à certaines interruptions principales. Les interruptions primaires et secondaires sont identifiées par des interruptions système globales (GSI). Le microprogramme ACPI de la plateforme matérielle affecte des GSIs aux interruptions principales et, au moment de l’exécution, le système d’exploitation affecte des GSIs aux interruptions secondaires.

Par exemple, le microprogramme affecte un GSI à l’interruption matérielle du contrôleur GPIO, et le système d’exploitation affecte un GSI à une broche GPIO configurée comme entrée d’interruption.

GpioClx implémente un ISR qui gère les interruptions primaires générées par le matériel du contrôleur GPIO. Lorsqu’un périphérique déclare une interruption sur une broche GPIO et que les interruptions sur cette broche sont activées et non masquées, le contrôleur GPIO interrompt le processeur. En réponse, le gestionnaire de piège du noyau planifie l’ISR de GpioClx pour s’exécuter. Pour identifier la broche GPIO qui a provoqué l’interruption, l’ISR GpioClx appelle la fonction de rappel d’événement CLIENT_QueryActiveInterrupts, qui est implémentée par le pilote du contrôleur GPIO. L’ISR de GpioClx recherche ensuite le GSI assigné à cette broche et passe ce GSI à la couche d’abstraction matérielle (HAL). Le HAL génère une interruption secondaire en appelant l'ISR qui est inscrit pour ce GSI. Cet ISR appartient au pilote du périphérique qui a initialement déclenché l’interruption.

Pour plus d’informations sur les interruptions primaires et secondaires, consultez les sections Interruptions GPIO et.

Pilotes pour les périphériques qui utilisent les broches GPIO

Au démarrage, le gestionnaire Plug-and-Play (PnP) énumère les appareils PnP et les appareils non PnP. Pour les appareils non PnP avec des connexions fixes aux broches GPIO, le gestionnaire PnP interroge le microprogramme de la plateforme pour déterminer quelles broches GPIO sont affectées en tant que ressources matérielles gérées par le système à ces appareils.

Le pilote KMDF pour un périphérique reçoit ses ressources matérielles assignées lors d’un rappel EvtDevicePrepareHardware. Ces ressources peuvent inclure des broches GPIO configurées en tant que sorties de données, entrées de données ou entrées de requête d’interruption.

Une ressource d’E/S GPIO est un nouveau type de ressource Windows dans Windows 8. Cette ressource se compose d’un ensemble d’une ou plusieurs broches GPIO qui peuvent être utilisées en tant qu’entrées de données ou sorties de données. Si un pilote de périphérique ouvre une ressource d’E/S GPIO pour les lectures, le pilote utilise toutes les broches de la ressource en tant qu’entrées de données. Si un pilote ouvre une ressource d’E/S GPIO pour les écritures, le pilote utilise toutes les broches de la ressource en tant que sorties de données. Pour obtenir des exemples de code qui montrent comment un pilote de périphérique ouvre une connexion logique à un ensemble de broches d’E/S GPIO, consultez les rubriques suivantes :

Connexion d’un pilote KMDF aux broches I/O GPIO

Une broche GPIO configurée comme entrée d'interruption est attribuée à un pilote en tant que ressource d'interruption ordinaire de Windows. L’abstraction des ressources d’interruption masque le fait qu’une interruption peut être implémentée par une broche GPIO au lieu d’un contrôleur d’interruption programmable, par exemple. Par conséquent, le pilote peut traiter une ressource d’interruption basée sur GPIO de la même façon que toute autre ressource d’interruption.

Pour accéder aux broches GPIO dans une ressource d’E/S GPIO, un pilote de périphérique doit ouvrir une connexion logique aux broches. Un pilote KMDF appelle la méthode WdfIoTargetOpen pour ouvrir la connexion. Grâce à cette connexion, le pilote peut envoyer des demandes d’E/S aux broches GPIO. Le pilote envoie IOCTL_GPIO_READ_PINS demandes de lecture de données depuis ces broches (si ce sont des broches d’entrée) ou IOCTL_GPIO_WRITE_PINS demandes d'écriture de données sur ces broches (si ce sont des broches de sortie).

Pour que le pilote d'un périphérique puisse recevoir les interruptions provenant d'un pin GPIO, il doit enregistrer sa routine de service d'interruption (ISR) afin de capter les interruptions émises par la ressource de gestion d'interruptions implémentée par ce pin. Un pilote KMDF appelle la méthode WdfInterruptCreate pour connecter un ISR à l’interruption.