Partager via


Gestion de l'alimentation de proximité en champ proche (NFP) pour les plates-formes de veille modernes

Un appareil de proximité en champ proche (NFP) est un dispositif émetteur/récepteur radio à courte portée qui permet à un PC Windows de s'associer et de se coupler avec d'autres ordinateurs équipés de NFP.

Un périphérique NFP est exposé au système d'exploitation Windows via l'interface GUID_DEVINTERFACE_NFP Plug and Play (PnP). Un pilote tiers, fourni par le fournisseur du périphérique NFP, est responsable de l'implémentation de l'interface GUI_DEVINTERFACE_NFP et de la gestion de l'alimentation du périphérique NFP physique. L’appareil NFP est généralement connecté aux broches d’interface I2C du système sur une puce (SoC) ou du silicium de cœur.

En règle générale, l’appareil NFP peut entrer en mode basse alimentation (mode de secours ou mode de suppression d’alimentation) lorsqu’aucun client logiciel n’a de publications ou d’abonnements de proximité, ou que toutes les publications et abonnements sont désactivés. Du point de vue du développement du pilote, cette condition se produit lorsqu'il n'y a pas de descripteurs en suspens sur le périphérique. Le périphérique NFP doit être placé en mode veille ou en mode hors tension lorsqu'aucun descripteur du périphérique n'est ouvert et activé.

Lorsque la plate-forme passe en veille moderne et que l'écran est éteint, le périphérique NFP doit passer en mode veille ou en mode d'alimentation hors tension. Si la consommation électrique d'un appareil NFP en mode veille est supérieure à un milliwatt en moyenne, l'appareil doit passer en mode 0 watt, sans alimentation.

Le pilote de périphérique NFP n'est pas directement averti lorsque la plate-forme entre et sort de la veille moderne. Au lieu de cela, Windows avertit indirectement le pilote en désactivant les descripteurs du pilote lors de l'entrée en mode veille moderne, et en activant ces mêmes descripteurs à la sortie de la veille moderne. Une fois la plateforme entrée en veille moderne, Windows envoie une notification de désactivation à chaque descripteur ouvert qui n’est pas déjà désactivé. Lorsque la plateforme quitte la veille moderne, Windows envoie une notification d’activation à chaque descripteur qu’elle a précédemment désactivé. Un descripteur ouvert qui était déjà désactivé avant l'entrée en veille moderne reste désactivé après la sortie de la veille moderne.

Modes de gestion de l'alimentation de l'appareil

À partir de Windows 8, un périphérique NFP pour une plate-forme de veille moderne devrait avoir trois modes d'alimentation (actif, inactif, et veille) en plus d'un mode hors tension (dans lequel toutes les entrées d'alimentation du périphérique NFP ont été désactivées par un mécanisme matériel externe à l'appareil). Contactez le fournisseur de matériel d'un périphérique NFP pour plus de détails sur les modes de gestion de l'alimentation pris en charge par le périphérique.

Le tableau suivant décrit les modes d'alimentation de périphérique pour un périphérique NFP.

Mode d’alimentation de l’appareil Description Consommation énergétique moyenne Latence de sortie à actif Mécanisme de transition

Actif

Le périphérique NFP communique activement avec un autre périphérique NFP sur un ordinateur à proximité.

< 50 milliwatts

N/A

N/A

Idle

Le périphérique NFP attend qu'un autre ordinateur avec NFP se rapproche. Le pilote du périphérique NFP a des publications et des abonnements ouverts.

< 5 milliwatts

< 10 millisecondes (typique)

Matériel autonome

Standby

Le périphérique NFP est sous tension, mais il n'y a pas de publications ou d'abonnements en attente (pas de descripteurs ouverts).

< 1 milliwatt (selon l'appareil)

< 50 millisecondes (typique)

Commande du pilote ou broche GPIO du SoC ou du silicium de cœur.

Hors tension

Le périphérique NFP n'est pas alimenté car la plateforme n'est pas sous tension ou une entité externe a coupé l'alimentation.

0 watts

< 100 millisecondes

L'entité externe coupe l'alimentation ou applique l'alimentation via le micrologiciel ACPI en réponse à un IRP D3.

Notes

  • Dans le tableau précédent, le terme veille fait référence à un mode d'alimentation de périphérique distinct de la veille moderne, qui est un état d'alimentation à l'échelle de la plateforme.
  • Dans le tableau précédent, le terme IRP D3 fait référence à une requête IRP_MN_SET_POWER de type DevicePowerState.

La consommation électrique spécifiée d'un périphérique NFP en mode veille varie selon le numéro de référence et le fabricant. Les concepteurs de système doivent travailler avec le fournisseur de l'appareil pour comprendre la consommation d'énergie en mode veille spécifique à l'appareil. Si la consommation électrique en mode veille est supérieure à un milliwatt, l'appareil NFP doit être connecté à un rail d'alimentation commutable afin que l'appareil puisse être mis en mode hors tension pendant la veille moderne.

Mécanisme de gestion de l’alimentation logicielle

Windows s'appuie sur le fournisseur du périphérique NFP pour fournir un pilote tiers qui gère l'alimentation du périphérique NFP. Windows s'attend à ce que ce pilote surveille le nombre actuel de descripteurs ouverts vers le pilote de périphérique NFP et l'état de ces descripteurs pour déterminer quand mettre le périphérique NFP en mode basse consommation.

Nous recommandons aux développeurs de pilotes NFP d'utiliser UMDF (User-Mode Driver Framework) pour développer leurs pilotes. UMDF comprend un certain nombre de fonctionnalités qui facilitent le développement de la gestion de l'alimentation pendant l'exécution des périphériques.

Prise en charge D3

Les développeurs de pilotes NFP sont encouragés à mettre le périphérique NFP dans un état D3 lorsque tous les descripteurs du périphérique ont été fermés ou que tous les descripteurs ouverts du périphérique ont reçu la notification IOCTL_NFP_DISABLE. Tous les descripteurs ouverts recevront la notification IOCTL_NFP_DISABLE une fois que la plateforme entrera en veille moderne et que le bureau de l'utilisateur sera verrouillé.

Même si le périphérique NFP peut atteindre une consommation électrique inférieure à un milliwatt en mode d'alimentation inactif, une transition vers D3 est toujours recommandée lorsque toutes les descripteurs sont fermés ou ont reçu la notification IOCTL_NFP_DISABLE. L'exécution d'une transition vers D3 permet à tous les pilotes de la pile de pilotes du périphérique NFP d'être avertis que le matériel entre en mode basse consommation. En outre, une transition vers D3 peut être détectée par l’instrumentation intégrée à Windows. Le Kit de ressources de performances Windows et d’autres outils de diagnostic des performances peuvent être utilisés pour observer cette transition. Cette prise en charge de diagnostic intégrée réduit le coût pour un intégrateur système de vérifier que le périphérique NFP est IOCTL_NFP_DISABLE effectuant correctement la gestion de l'alimentation.

Pour certains bus, les périphériques sur le bus doivent passer à D3 avant que le contrôleur de bus puisse entrer dans un état de faible consommation. Pour un périphérique NFP connecté à I2C, il n'y a pas une telle dépendance vis-à-vis du périphérique NFP du point de terminaison entrant dans D3 pour que le contrôleur de bus I2C s'éteigne.

Toutefois, si les plateformes de veille modernes utilisent à l’avenir le bus USB (Universal Serial Bus) pour se connecter aux appareils NFP, un appareil NFP doit être en mesure d’entrer D3 afin que le contrôleur hôte USB puisse s’éteindre et que le SoC ou le silicium de cœur puisse entrer dans un état d’inactivité à faible consommation pendant la veille moderne. Les développeurs de pilotes de périphérique NFP sont encouragés à faire passer leurs appareils à D3 lorsqu’ils sont prêts à passer en mode basse consommation, quel que soit le bus sous-jacent, pour permettre la réutilisation future des pilotes et des diagnostics de gestion de l’alimentation faciles.

Si, pour passer en mode d'alimentation de secours, le périphérique NFP nécessite l'envoi d'une commande depuis le pilote de périphérique NFP sur le bus de communication, cette commande doit être envoyée dans le cadre de la transition vers D3 dans le pilote.

Si le périphérique NFP nécessite qu'une broche GPIO du SoC soit basculée pour passer en mode d'alimentation de veille, une transition vers D3 est nécessaire. Le lancement d'une transition vers D3 notifie le pilote Windows ACPI, Acpi.sys, qui exécute la méthode de contrôle _PS3 implémentée sous le périphérique NFP dans l'espace de noms ACPI. La méthode _PS3 peut basculer la ligne GPIO à travers une région d'opération GPIO. Pour rendre le pilote de périphérique NFP plus portable, tous les retards spécifiques à la plateforme ou autres contraintes de minutage doivent être implémentés dans le microprogramme de la plateforme afin que le pilote de périphérique NFP n’ait pas besoin d’être personnalisé pour une plateforme spécifique.

Pour activer la transition de l’appareil NFP vers D3 lorsque l’appareil est inactif et que la plateforme est à l’état d’alimentation du système S0 (fonctionnement), un pilote UMDF appelle la méthode IWDFDevice2::AssignS0IdleSettingsEx. Dans cet appel, le pilote fournit un pointeur vers une structure WUDF_DEVICE_POWER_POLICY_IDLE_SETTINGS en tant que paramètre d'entrée et définit le membre DxState de cette structure sur PowerDeviceD3.

Si la consommation d’énergie de l’appareil NFP en mode veille est supérieure à un milliwatt, l’appareil doit être mis en mode de mise hors tension lorsque tous les descripteurs sont fermés ou que tous les descripteurs ont reçu la notification IOCTL_NFP_DISABLE. Pour que le microprogramme et le matériel sous-jacents coupent l'alimentation du périphérique NFP, le périphérique doit déjà avoir entré D3 (c'est-à-dire D3hot) et le pilote de périphérique NFP doit avoir préalablement activé la transition vers D3cold. L'activation de D3cold implique que le pilote du périphérique NFP enregistre l'état matériel du périphérique avant la transition vers D3 afin que toute l'alimentation puisse être coupée du périphérique. Le périphérique doit pouvoir reprendre un fonctionnement normal ultérieurement après la mise sous tension du périphérique (c'est-à-dire que le périphérique quitte D3cold) et que le pilote restaure l'état matériel du périphérique. Pour activer D3cold, un pilote UMDF appelle la méthode IWDFDevice2::AssignS0IdleSettingsEx. Dans cet appel, le pilote fournit un pointeur vers une structure WUDF_DEVICE_POWER_POLICY_IDLE_SETTINGS et définit le membre ExcludeD3Cold de cette structure sur WdfFalse.

Pour plus d'informations, consultez Prise en charge de D3cold dans un pilote.

Gestionnaire de radio

Si l’appareil NFP utilise un mécanisme RF (radio) pour détecter les événements de proximité, le fournisseur de périphérique NFP doit fournir un gestionnaire radio en plus d’un pilote de périphérique NFP. Le gestionnaire radio est une DLL COM qui implémente l'API d'interface utilisateur de gestion radio et communique en privé avec le pilote de périphérique NFP. Lorsque l'utilisateur modifie l'état activé/désactivé de la radio du périphérique NFP dans l'application Paramètres Windows, le pilote du périphérique NFP reçoit une notification du changement via le gestionnaire radio. Le développeur de pilotes doit définir une interface privée pour communiquer l’état de gestion radio entre l’objet COM du gestionnaire radio et le pilote de périphérique NFP. Lorsque le pilote de périphérique NFP reçoit une commande de l'objet gestionnaire radio pour désactiver l'état radio activé/désactivé du périphérique, le pilote doit enregistrer l'état matériel du périphérique, désactiver tous les composants RF associés au périphérique NFP et faire passer le périphérique à D3. Notez que la quantité et l’état de tous les descripteurs de l’interface GUID_DEVINTERFACE_NFP qui sont déjà ouverts lorsque l’appareil entre dans D3 doivent être conservés pendant que l’appareil est en D3.

Une fois que le gestionnaire radio a indiqué que les composants RF de l'appareil NFP doivent être activés et mis sous tension, l'appareil NFP doit immédiatement revenir à D0 lorsque l'un des événements suivants se produit :

  • Un client ouvre un nouveau descripteur vers le pilote de périphérique NFP.
  • Tout descripteur déjà ouvert reçoit la notification IOCTL_NFP_ENABLE .

La notification IOCTL_NFP_ENABLE est envoyée par Windows au pilote de périphérique NFP lorsque la plateforme quitte la veille moderne et que l’utilisateur entre son mot de passe.

Si le gestionnaire de radio a indiqué que les composants RF de l’appareil NFP doivent être désactivés et hors tension, l’appareil NFP doit rester en D3, même si un nouveau descripteur est ouvert ou qu’un descripteur existant est activé, jusqu’à ce que le gestionnaire de radio indique que les composants RF doivent être activés et mis sous tension.

Si l’appareil NFP nécessite l’envoi d’une commande pour renvoyer l’appareil NFP en mode inactif, cette commande peut être envoyée via le bus de communication (généralement I2C) et doit se produire dans le cadre de la fin de la transition vers D0 dans le pilote de périphérique NFP.

La transition du périphérique NFP vers D0 permet d'exécuter la méthode de contrôle _PS0 sous le périphérique dans l'espace de noms ACPI. Si nécessaire, cette méthode de contrôle peut basculer une ligne GPIO du SoC vers l’appareil NFP pour retourner l’appareil en mode inactif.

Configurations d'alimentation matérielles prises en charge

Un appareil NFP ne devrait pas consommer plus d'un milliwatt d'énergie, en moyenne, lorsque la plateforme matérielle est en veille moderne. Si le périphérique ne consomme pas plus d'un milliwatt d'énergie lorsqu'il est en mode veille, le pilote de périphérique NFP peut placer le périphérique en mode veille lorsqu'il n'est pas utilisé. Sinon, le concepteur du système doit connecter l'appareil à un rail d'alimentation dédié qui peut être éteint lorsque l'appareil n'est pas utilisé.

La puissance en veille est inférieure à un milliwatt

Si le périphérique NFP consomme moins d'un milliwatt d'énergie en mode veille, le périphérique NFP peut être placé sur n'importe quel rail d'alimentation du système et peut partager ce rail avec n'importe quel nombre d'autres périphériques. La transition de l'appareil vers le mode d'alimentation de veille se produit dans le cadre de sa transition vers D3.

L'entrée du périphérique NFP en mode veille peut être initiée soit en envoyant une commande sur le bus de communication (généralement I2C), soit en basculant une ligne SoC GPIO qui est acheminée vers le périphérique NFP.

Si le périphérique NFP nécessite le basculement d'une ligne GPIO à partir du SoC pour passer en mode veille, la ligne GPIO doit être décrite dans une région d'opération GPIO dans l'espace de noms ACPI. L'intégrateur système doit implémenter les méthodes _PS3 et _PS0 sous le périphérique NFP dans l'espace de noms ACPI. L'implémentation de la méthode _PS3 doit basculer la ligne GPIO pour basculer le périphérique NFP en mode veille. L'implémentation de la méthode _PS0 doit basculer la ligne GPIO pour faire passer le périphérique NFP du mode veille au mode inactif. Le basculement de cette ligne peut être soumis à des contraintes de synchronisation spécifiques à la plateforme ou à l'appareil.

Comme décrit précédemment, le pilote de périphérique NFP doit lancer une transition vers D3 lorsque tous les descripteurs sont fermés, ou que tous les descripteurs ont reçu la notification IOCTL_NFP_DISABLE, ou que le gestionnaire de radio a demandé que les composants RF dans l’appareil NFP soient désactivés.

La puissance en veille est supérieure à un milliwatt

Si la consommation électrique de l'appareil NFP en mode veille est supérieure à un milliwatt, l'appareil NFP doit être placé sur un rail d'alimentation dédié qui peut être allumé et éteint indépendamment sous le contrôle d'un GPIO à partir du SoC. Lorsque tous les descripteurs sont fermés, ou que tous les descripteurs ont reçu la notification IOCTL_NFP_DISABLE, ou que le gestionnaire de radio a demandé que les composants RF soient désactivés, le périphérique NFP passe d’abord à D3, puis passe en mode hors tension lorsque le rail d’alimentation est éteint.

Le rail d'alimentation commutable doit être contrôlé par une ligne GPIO à partir du SoC ou du silicium de cœur. La ligne GPIO doit être décrite comme faisant partie d'une région d'opération GPIO dans l'espace de noms ACPI. De plus, l'espace de noms ACPI doit inclure une ressource d'alimentation qui décrit le rail d'alimentation commutable et qui implémente les méthodes de contrôle _ON et _OFF. Les méthodes de contrôle _ON et _OFF basculent la ligne GPIO décrite dans la région de fonctionnement GPIO pour activer et désactiver le rail d'alimentation. Les packages _PR3 et _PR0 doivent être placés sous le périphérique NFP dans l'espace de noms ACPI et doivent être liés à la ressource d'alimentation qui décrit le rail d'alimentation.

Comme décrit précédemment, le pilote de périphérique NFP doit activer D3cold. En outre, le pilote doit lancer une transition vers D3 lorsque tous les descripteurs sont fermés, ou que tous les descripteurs ont reçu la notification IOCTL_NFP_DISABLE, ou que le gestionnaire de radio demande que les composants RF soient désactivés. Lorsque le pilote ACPI reçoit l’IRP D3, il exécute la méthode _OFF sur la ressource d’alimentation indiquée par le package _PR3. Cette méthode basculera la ligne GPIO qui contrôle le matériel de commutation d'alimentation pour couper l'alimentation du périphérique NFP.

Si le gestionnaire radio a indiqué que les composants RF doivent être activés, le pilote de périphérique NFP doit effectuer une transition vers D0 lorsqu'un nouveau descripteur est ouvert ou qu'un descripteur existant a reçu la notification IOCTL_NFP_ENABLE. Lorsque le pilote ACPI reçoit l’IRP D0 (une requête IRP_MN_SET_POWER de type DevicePowerState), il exécute la méthode _ON sur la ressource d’alimentation indiquée par le package _PR0. Cette méthode basculera la ligne GPIO qui contrôle le matériel de commutation d'alimentation pour réappliquer l'alimentation au périphérique NFP.

Problèmes de veille

Il n'y a aucun problème de veille pour le périphérique NFP. Le périphérique NFP n’est pas autorisé à prendre en charge la veille du SoC pendant que la plateforme est en veille moderne.

Test et validation

Il est essentiel que le concepteur du système vérifie que le périphérique NFP passe de manière fiable en mode veille ou en mode hors tension lorsque l'écran est éteint pour la veille moderne. La solution de gestion de l'alimentation pour le périphérique NFP dépend fortement de la mise en œuvre du pilote tiers. Par conséquent, les intégrateurs système sont encouragés à discuter de la meilleure méthode pour tester et valider la fonctionnalité du périphérique NFP avec le fournisseur du périphérique NFP.

Si le pilote de périphérique NFP initie une transition vers D3 lorsque tous les descripteurs du pilote sont fermés ou désactivés, l’outil XPerf peut être utilisé pour observer cette transition. Cette méthode de validation est similaire à celle décrite ailleurs pour les contrôleurs tactiles et les appareils de capteur.

Si le pilote envoie des commandes sur le bus de communication pour faire passer l'appareil en mode veille et en sortir, le pilote doit prendre en charge le suivi des événements afin que l'intégrateur système puisse facilement valider les opérations de gestion de l'alimentation. L’instrumentation peut facilement être ajoutée aux pilotes Windows à l’aide d’événements suivi d’événements pour Windows (ETW). Pour plus d’informations, consultez Ajout du suivi d'événements aux pilotes en mode noyau. Un avantage du traçage ETW est qu'il peut être visualisé à l'aide de la suite d'outils Windows Performance Toolkit, qui inclut XPerf.

Liste de vérification de la gestion de l’alimentation des appareils NFP

Les intégrateurs système et les fournisseurs NFP doivent consulter la liste de contrôle ci-dessous pour vérifier que leur conception de gestion de l'alimentation système est compatible avec Windows 8 et versions ultérieures.

  • Sélectionnez un périphérique NFP doté d'un mode veille qui consomme en moyenne moins d'un milliwatt d'énergie.
  • Vérifiez que le pilote de périphérique NFP initie une transition vers D3 lorsque tous les descripteurs de l’appareil sont fermés, ou que tous les descripteurs ouverts ont reçu la notification IOCTL_NFP_DISABLE, ou que le gestionnaire de radio demande que les composants RF de l’appareil NFP soient désactivés et mis hors tension.
  • Vérifiez que le pilote de périphérique NFP lance une transition vers D0 si le gestionnaire de radio a indiqué que les composants RF doivent être activés et que le premier descripteur est ensuite ouvert sur l’appareil ou que le premier descripteur ouvert reçoit la notification IOCTL_NFP_ENABLE.
  • Si le pilote de périphérique NFP envoie une commande personnalisée sur le bus de communication pour indiquer au périphérique NFP de passer en mode veille, contactez le fournisseur du périphérique NFP pour déterminer la meilleure façon de vérifier que le périphérique NFP passe en mode veille en réponse à cette commande.
  • Si la consommation électrique du périphérique NFP est supérieure à un milliwatt, assurez-vous que le périphérique est placé sur un rail d'alimentation commutable.
  • Si le périphérique NFP est situé sur un rail d'alimentation commutable :
    • Vérifiez que l'appareil prend en charge la coupure complète de l'alimentation de l'appareil lorsqu'il n'est pas utilisé, et que la restauration de l'alimentation réactive et réinitialise automatiquement l'appareil.
    • Vérifiez que le rail d'alimentation est contrôlé par une ligne GPIO à partir du SoC ou du silicium de cœur.
    • Mappez la ligne GPIO dans une région d’opération GPIO implémentée dans le microprogramme ACPI système.
    • Fournissez une ressource d’alimentation pour décrire le rail d’alimentation et incluez les méthodes de contrôle _ON, _OFF et _STA dans cette ressource d’alimentation.
    • Fournissez les packages _PR0 et _PR3 sous l’appareil NFP dans le microprogramme ACPI système et assurez-vous qu’ils référencent la ressource d’alimentation.
    • Si le périphérique NFP nécessite un délai de mise sous tension avant que le pilote puisse y accéder, codez ce délai dans l’implémentation de la méthode de contrôle _ON.
  • Lancez plusieurs transitions vers et hors de la veille moderne, puis testez le fonctionnement de l’appareil NFP lorsque l’affichage est allumé.