Partitionnement d’un contrôleur GPIO en banques de broches
Un développeur de pilotes peut, en option, partitionner un périphérique de contrôleur d’E/S à usage général (GPIO) en deux ou plusieurs banques de broches GPIO. Par exemple, un périphérique de contrôleur GPIO qui a 64 broches GPIO peut être décrit par le pilote du contrôleur GPIO comme deux banques, chacune ayant 32 broches GPIO. Le développeur peut fournir un seul pilote pour gérer toutes les banques dans un périphérique de contrôleur GPIO, et ce pilote utilise généralement un seul objet d’appareil pour représenter l’ensemble de l’appareil. Toutefois, certaines ou toutes les banques de l’appareil peuvent être gérées indépendamment des autres banques de l’appareil.
En règle générale, un pilote de contrôleur GPIO choisit de partitionner un contrôleur GPIO en deux ou plusieurs banques pour l’une des raisons suivantes :
- L’état d’alimentation des broches GPIO dans une banque peut être géré indépendamment des broches des autres banques.
- Le nombre total de broches dans le contrôleur GPIO est supérieur à 64.
La taille de banque maximale prise en charge par l’extension d’infrastructure GPIO (GpioClx) est de 64 broches. Un périphérique de contrôleur GPIO qui contient plus de 64 broches doit être partitionné par le pilote en deux ou plusieurs banques, chacune d’elles ne contenant pas plus de 64 broches.
Pour déterminer comment un contrôleur GPIO est partitionné en banques, GpioClx appelle la fonction de rappel d’événement CLIENT_QueryControllerBasicInformation . Cette fonction, qui est implémentée par le pilote de contrôleur GPIO, fournit une structure CLIENT_CONTROLLER_BASIC_INFORMATION qui décrit les attributs et les fonctionnalités du contrôleur GPIO. Deux membres de cette structure, TotalPins et NumberOfPinsPerBank, spécifient la façon dont les broches du contrôleur GPIO sont partitionnés en banques. TotalPins spécifie le nombre total de broches dans le contrôleur GPIO, et NumberOfPinsPerBank spécifie le nombre de broches par banque. Si N est le nombre de banques dans le contrôleur, les banques sont numérotées de 0 à N–1. Tous, à l’exception de la dernière banque (c’est-à-dire le numéro de banque N à 1) doivent contenir le nombre de broches spécifié dans le membre NumberOfPinsPerBank . La dernière banque peut avoir n’importe quel nombre de broches allant de une à NumberOfPinsPerBank.
GpioClx détermine le nombre total de banques dans le contrôleur GPIO à partir des valeurs des membres TotalPins et NumberOfPinsPerBank . GpioClx utilise la formule entière suivante pour calculer le nombre total de banques :
(TotalPins + NumberOfPinsPerBank – 1) / NumberOfPinsPerBank Dans certains appareils de contrôleur GPIO, une banque de broches dans un appareil peut être activée ou basculer vers un état de faible alimentation indépendamment des autres banques du même appareil. Ainsi, lorsqu’une banque particulière est inactive, cette banque peut être basculée vers un état de faible consommation d’énergie pour réduire la consommation d’énergie. Pour prendre en charge ces appareils, GpioClx prend en charge la gestion de l’alimentation au niveau des composants. GpioClx définit deux états d’alimentation au niveau du composant, F0 (entièrement activé) et F1 (à faible consommation ou hors tension).
Pour déterminer si une banque de broches GPIO prend en charge la gestion de l’alimentation au niveau des composants, GpioClx appelle la fonction de rappel d’événement CLIENT_QuerySetControllerInformation . Le paramètre InputBuffer de cette fonction est un pointeur vers une structure CLIENT_CONTROLLER_QUERY_SET_INFORMATION_INPUT . Pour demander des informations de gestion de l’alimentation, l’appelant définit le membre RequestType de cette structure sur QueryBankPowerInformation.
Si une banque GPIO prend en charge la gestion de l’alimentation au niveau des composants, GpioClx permet une transition vers l’état d’alimentation F1 lorsque la banque est inactive. Avant que la banque ne passe à l’état F1, GpioClx appelle la fonction de rappel d’événement CLIENT_SaveBankHardwareContext pour indiquer au pilote d’enregistrer le contexte matériel (principalement, le contenu du registre) de la banque. Plus tard, une fois que la banque est entrée dans l’état F0, GpioClx appelle la fonction de rappel d’événement CLIENT_RestoreBankHardwareContext pour indiquer au pilote de restaurer le contexte matériel précédemment enregistré.