Sensoren Power Management

Ein mobiler PC enthält normalerweise Sensorgeräte wie einen Umgebungslichtsensor (ALS), 3D-Beschleunigungsmesser, 3D-Gyrometer oder 3D-Magnetometer. Wenn ein Sensorgerät nicht vom Betriebssystem oder von einer Anwendung verwendet wird, können Power-Management-Software das Gerät in einen Niedrigleistungsmodus umstellen, um den Stromverbrauch zu verringern. In einem PC, der das moderne Standby-Power-Modell unterstützt, werden Sensorgeräte voraussichtlich kurz nach der Eingabe des modernen Standbymodus auf einen niedrigen Strommodus wechseln und bleiben in diesem Modus, bis der PC den modernen Standbymodus beendet.

In diesem Artikel wird erläutert, wie Sie die Energieverwaltung für Sensorgeräte implementieren. Außerdem wird in diesem Artikel die Energieverwaltung des optionalen Sensor-Mikrocontrollers (auch Sensor-Fusion-Hub oder Sensor-MCU genannt) und der aggregierten Sensorgeräte behandelt. (z. B. ein Kompasssensorgerät kann implementiert werden, indem ein Beschleunigungsmesser, ein Gyrometer und ein Magnetometer unter der Kontrolle eines Sensorcontrollers zusammengefasst werden. Der Mikrocontroller macht diese Sensorgeräte als einzelnes logisches Sensorgerät auf Windows verfügbar.)

Sensoren und Sensorcontroller

Sensorhardware ist für die moderne mobile Oberfläche wichtig. Ab Windows 10 steht eine umfangreiche Systeminfrastruktur zur Verfügung, um mehrere Sensorgeräte verfügbar zu machen und zu verwalten. Diese Infrastruktur vereinfacht die Entwicklung von Anwendungen, die Sensorinformationen integrieren und kritische integrierte Windows-Szenarien unterstützen, z. B. automatische Bildschirmdrehung oder Ändern der Anzeigehelligkeit basierend auf Umgebungslicht.

Während der Systemlaufzeit können einzelne Sensoren ausgeschaltet werden, wenn sie nicht verwendet werden. Die Anforderungen für die Verwendung eines bestimmten Sensorgeräts werden über die Windows Sensor-API an das Gerät und seine Treiber übermittelt. Wenn ein Sensorgerät nicht vom Betriebssystem oder von Anwendungen verwendet wird, kann das Gerät vom Sensortreiber oder von der Firmware, die auf dem Sensorcontroller ausgeführt wird, heruntergefahren werden.

Nachdem die Systemanzeige deaktiviert ist und die Hardwareplattform moderne Standby-Geräte eingibt, sollten alle Sensorgeräte und optionalen Sensorcontroller, die sich nicht bereits in Niedrigleistungszuständen befinden, innerhalb von wenigen Sekunden in Die Standbyzustände eingeben, damit die Plattform insgesamt einen Niedrigleistungszustand eingeben kann. Sensortreiber überwachen jedoch nicht direkt Übergänge zu und von modernem Standby, um zu ermitteln, wann Sensorgeräte eingeschaltet und deaktiviert werden sollen. Stattdessen sollte der Sensortreiber das Gerät aktivieren, wenn das Gerät aktiv von einem oder mehreren Clients verwendet wird, was Anwendungen oder Betriebssystemkomponenten sein kann. Der Treiber sollte Strom aus dem Gerät entfernen, wenn keine Clients das Gerät verwenden.

Wenn die Sensorklassenerweiterung den Treiber anfordert, sensorische Beispiellesungen zu starten, ruft er die EvtSensorStart-Rückrufmethode des Sensortreibers auf. Wenn die Sensorklasseerweiterung den Treiber anfordert, sensorische Beispiellesungen zu beenden, ruft er die EvtSensorStop-Rückrufmethode des Treibers auf. Weitere Informationen finden Sie unter "Informationen zu Sensortreiberereignissen".

Nachdem der Computer moderne Standby-Zustände eingegeben hat und alle Sensorgeräte niedrige Stromzustände eingeben, muss der Gesamtstromverbrauch aller Systemsensorhardware kleiner als ein Milliwatt sein. Die Sensorgeräte und optionaler Sensorcontroller können einen Standbyzustand mit niedriger Leistung eingeben, der für die Sensorhardware spezifisch ist. Oder die Hardware-Power-Rail auf die Sensorgeräte und der optionale Sensorcontroller können unter Kontrolle der Sensortreiber und/oder der SYSTEM ACPI-Firmware deaktiviert werden.

Ab Windows 10 wird die Unterstützung für eine begrenzte Reihe von Sensor-Hardwarekonnektivitätsoptionen für das Kern-Silicon oder System auf einem Chip (SoC) in einer modernen Standbyplattform bereitgestellt. In den folgenden Abschnitten werden die unterstützten Hardware- und Softwarekonfigurationen sowie deren Power-Management-Verhalten sowohl während des modernen Standby-Modus als auch beim aktiven Einsatz der Plattform erläutert.

Modi der Energieverwaltung

Windows erwartet, dass jedes Sensorgerät oder der Sensorcontroller drei Geräte-Power-Modi – aktiv, Leerlauf und Standby – neben einem optionalen, Null-Watt-, Power-removed-Modus haben. In der folgenden Tabelle werden die Leistungsmodi für ein Sensorgerät und optionaler Sensorcontroller beschrieben. Die Tabelle unterscheidet zwischen einem Leerlaufmodus, in dem die Sensorhardware verwendet wird, aber derzeit leer ist, und einen Leerlaufmodus, in dem die Sensorhardware nicht verwendet wird.

Mode BESCHREIBUNG Durchschnittlicher Stromverbrauch Beenden der Latenz für aktiv Übergangsmechanismus

Aktiv

Der Sensorgerät und/oder Sensorcontroller stellt aktiv Umweltänderungen bereit oder verarbeitet.

< 100 Milliwatt

Leerlauf (in Verwendung)

Das Sensorgerät und/oder der Sensorcontroller wird von einer oder mehreren Anwendungen verwendet und wartet darauf, den nächsten Satz von Sensorinformationen für den Hauptprozessor bereitzustellen.

< 50 Milliwatt

Sensorspezifischer Sensor

Hardware-autonome Hardware

Leerlauf (nicht verwendet)

Das Sensorgerät und/oder der Sensorcontroller werden von keiner Anwendung verwendet. Kalibrierungsdaten für den Sensor oder den Sensorcontroller werden beibehalten.

< 5 Milliwatt

Sensorspezifischer Sensor

Human Interface Device (HID)-Befehle oder Sensorframework-Nachrichten, die die aktuelle Nutzung von Sensorgeräten beschreiben.

Standby

Das Sensorgerät und/oder der Sensorcontroller werden von keiner Anwendung verwendet. Kalibrierungsdaten für den Sensor oder den Sensorcontroller werden beibehalten. Der Sensor- und/oder Sensorcontroller führt keine weiteren Maßnahmen aus, bis die Software auf dem Hauptprozessor ausgeführt wird.

< 1 Milliwatt (für alle Systemsensoren)

<10 Millisekunden

Mehrere Optionen:

  • HIDI2C-Befehl SET_POWER(Sleep)
  • Private Nachricht von Drittanbietern
  • GPIO-Linie von SoC zu Sensorhardware

Power-removed

Die Leistung wird aus dem Sensorgerät und/oder Sensorcontroller entfernt, und alle Hardwarekontexte werden verloren.

0 Milliwatt

< 100 Millisekunden

Externe Entität entfernt Power oder wendet Power über DIE ACPI-Firmware als Reaktion auf D3 Power IRP an.

Hinweis

In der vorherigen Tabelle bezieht sich der Begriff Standby auf einen Gerätestrommodus, der sich vom modernen Standby-Modus unterscheidet, was ein plattformweiter Stromzustand ist.

Mechanismen für die Softwareenergieverwaltung

Die Laufzeit-Energieverwaltung für Sensorgeräte und der Sensorcontroller wird vor allem von der Verwendung gesteuert. In der Regel werden der Sensortreiber und die Hardware erwartet, dass ein Sensor im Leerlaufmodus platziert wird, wenn er nicht vom Betriebssystem oder einer Anwendung verwendet wird. Die Windows Sensor Platform bietet Informationen über die Anzahl der Anwendungs- oder Betriebssystemclients, die mit einem bestimmten Sensor verbunden sind, sowie Anforderungen für den Zollzyklus oder die Datenrate des Sensors. Der Sensortreiber und/oder die Hardware verwendet diese Informationen, um das Sensorgerät nahtlos in den Leerlaufmodus zu übertragen, wenn das System ausgeführt wird und die Anzeige aktiviert ist.

Nachdem die Systemanzeige ausgeschaltet ist und die Plattform in den modernen Standby-Modus eingibt, erwartet Windows alle Sensoren und Sensorcontroller, um einen Standby- oder Power-Remove-Modus einzugeben.

Die Wahl eines Software-Power-Management-Mechanismus, der für Sensorgeräte und den optionalen Sensorcontroller verwendet werden soll, hängt davon ab, wie die Sensorhardware Windows vom Gerätetreiber verfügbar gemacht wird und wie die Sensorhardware physisch mit dem SoC- oder Core-Silicon verbunden ist. Windows unterstützt zwei Methoden zum Anzeigen und Verbinden von Sensorgeräten. Eine Methode verwendet den integrierten Sensor HID-Klassentreiber über eine I2C-Verbindung, bei der integrierte HIDI2C-Treiber HID-Informationen über die I2C-Verbindung übertragen. Der andere erfordert einen Drittanbietertreiber, der die Universelle Sensortreiberschnittstelle implementiert und die Methoden in der Tabelle SensorscxFunctions aufruft.

Die beiden Optionen für die Verbindung mit einem Sensor- oder Sensorcontroller werden in der folgenden Tabelle verglichen. Die Auswahl einer der beiden Optionen für die Verbindung mit Sensorhardware diktiert die Software-Power-Management-Mechanismen, die benötigt werden, um die Sensorhardware in den Standby- oder Power-removed-Modus zu übertragen.

Verbindungsoption Busverbindung Sensortreiber erforderlich Treiberanbieter Kommentare

HIDI2C

Sensorhardware verbindet sich direkt mit dem SoC- oder Core-Silicon über I2C.

Sensor HID-Klassentreiber + HID-over-I2C-Klassentreiber

Microsoft. Posteingangskomponente ab Windows 8.

Pros / Cons

Sensortreiber von Drittanbietern

Sensorhardware verbindet sich direkt mit dem SoC- oder Core-Silicon über I2C oder UART.

Drittanbietertreiber, der SENSOR_CONTROLLER_CONFIG implementiert

Sensorgerätanbieter.

Pros / Cons

HIDI2C

Für die HIDI2C-Option ist der optionale Sensorcontroller physisch mit dem SoC- oder Kern-Silizium über einen I2C-Bus verbunden. Der Mikrocontroller macht mehrere HID-Sammlungen auf oberster Ebene verfügbar, eine für jedes logische Sensorgerät. Ein Kompasssensor kann beispielsweise über HID als logisches Sensorgerät verfügbar gemacht werden, das eine Aggregation des Beschleunigungsmessers, Gyrometers und Magnetometersensoren hinter dem Sensorcontroller ist. Dies ist die einfachste Implementierung in Bezug auf Konnektivität und Software, da keine Drittanbietersoftware für das Sensorgerät erforderlich ist.

Der Windows HIDI2C-Stapel ähnelt dem von Touchcontrollern und Stift-Digitalisierern, in denen es zwei Software-Power-Management-Mechanismen unterstützt: einen In-Band-HID-Befehl und einen Laufzeitübergang zum D3-Zustand.

In-Band-HID-Befehl

SET_POWER(Schlaf) Wird an das Gerät gesendet, nachdem die Anzeige deaktiviert wurde und die Plattform in den modernen Standbymodus wechselt. Dieser Befehl kann das Gerät in den Standby-Strommodus übertragen.

SET_POWER(Ein) Wird an das Gerät gesendet, wenn die Plattform modern standby vorhanden ist und die Anzeige erneut aktiviert ist.

Laufzeitübergang zum D3-Zustand für den HID-Sensorgerätestapel

D3 IRP Eine IRP_MJ_POWER Anforderung, die unmittelbar nach dem Befehl SET_POWER(Sleep) an den Treiberstapel für das Gerät gesendet wird. Dadurch wird das Gerät aufgefordert, den D3-Gerätestromzustand einzugeben. Im Rahmen des Übergangs zu D3 kann die SYSTEM ACPI-Firmware Steuerungsmethoden ausführen, um das Gerät in den Standby- oder Stromfernmodus zu wechseln.

D0 IRP Eine IRP_MJ_POWER Anforderung, die an den Treiberstapel für das Gerät gesendet wird, wenn die Plattform einen modernen Standbymodus enthält und die Anzeige aktiviert ist. Dadurch wird das Gerät aufgefordert, den D0-Gerätestromzustand einzugeben. Bei Bedarf kann die ACPI-Firmware des Systems Steuerungsmethoden ausführen, um das Gerät wieder in den Leerlaufmodus (nicht zu verwenden) zu wechseln.

Sensortreiber von Drittanbietern

Für den Sensortreiber von Drittanbietern ist der Sensorcontroller physisch über einen I2C-Bus oder UART mit dem Kern-Silizium verbunden.

Der Hersteller des Sensorgeräts muss einen User-Mode Driver Framework (UMDF)-Treiber bereitstellen, der SENSOR_CONTROLLER_CONFIG Schnittstelle implementiert. Der UMDF-Treiber kommuniziert mit dem Sensorgerät über I2C oder UART. Dies kann mehrmals implementiert werden – einmal für jeden Sensor, der sich hinter dem Sensorcontroller befindet. Der Sensortreiber von Drittanbietern ist für die Erstellung und Koordinierung aller Energieverwaltung verantwortlich.

Sensortreiber von Drittanbietern werden voraussichtlich mithilfe von Windows Driver Frameworks (WDF) erstellt und basieren auf dem Adxl354acc-Beispieltreiber . Der Treiber muss eine verwaltete Warteschlange verwenden und den D3-Leerlaufzustand über einen Aufruf der IWDFDevice3::AssignS0IdleSettingsEx-Methode konfigurieren. Der Treiber sollte die Methoden IWDFDevice2::StopIdle und IWDFDevice2::ResumeIdle verwenden, um WDF anzugeben, wenn das Gerät leer oder aktiv ist. Der Treiber sollte auch D3cold aktivieren, indem das ExcludeD3Cold-Element der WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS-Struktur auf WdfFalse festgelegt wird. Durch das Aktivieren von D3cold kann die Plattform Strom vom Sensorgerät entfernen, nachdem es leer ist und den D3-Zustand eingibt.

Stellen Sie als bewährte Methode gerätespezifischen Code in den Treiber ein, und platzieren Sie plattformspezifischen Code in der ACPI-Firmware, um die wiederverwenden von Treibercode auf mehreren Plattformen zu ermöglichen.

Eingabe moderner Standbyanforderungen

Die Anforderungen des Drittanbietersensortreibers für die Energieverwaltung sind eine Funktion des Standby-Stromverbrauchs der Sensorhardware.

Sensortreiber von Drittanbietern sollten einen Übergang zu D3 initiieren, wenn das Sensorgerät bereit ist, den Standby- oder Power-Removed-Modus einzugeben, auch wenn das Gerät in der Lage ist, einen In-Band-Kommunikationsmechanismus zu verwenden, um in einen Strommodus zu wechseln, der weniger als ein Milliwatt verbraucht. Der Grund für diese Anforderung besteht darin, dass viele Bustreiber in Windows den Gerätestromstatus ihrer Endpunktgeräte nachverfolgen und nur dann herunterfahren, wenn alle Endpunktgeräte ausgeschaltet sind. Für einige SoC-Designs und Verbindungsbusse (insbesondere universal Serial Bus (USB)) müssen sich alle Endpunktgeräte und der Hostcontroller in D3 befinden, damit der SoC den niedrigsten Stromzustand während des modernen Standbymodus eingibt. In der Lage, den niedrigsten Leistungszustand einzugeben, kann ein System problemlos verhindern, dass moderne Standbyanforderungen für die Akkulaufzeit erfüllt werden.

Wenn die Sensorhardware über einen Standby-Stromverbrauch von weniger als einem Milliwatt für alle gesteuerten Sensorhardware verfügt, sollte der Sensortreiber das Gerät automatisch in den Standbymodus wechseln, wenn die Sensoren (oder alle Sensoren auf dem Mikrocontroller) nicht mehr verwendet werden.

Wenn die Sensorhardware über einen Standby-Stromverbrauch von mehr als einem Milliwatt verfügt, muss der Sensortreiber einen D3-Übergang ausführen und den ACPI-Steuerungsmethoden erlauben, Strom vom Sensorgerät zu entfernen. Der Sensortreiber muss alle erforderlichen Sensorgerätezustände speichern, damit die Leistung während D3 aus dem Gerät entfernt werden kann. Der Sensorhardwareanbieter sollte eng mit dem Systemintegrator zusammenarbeiten, um sicherzustellen, dass die Sensorhardware und der Treiber den D3-Übergang zuverlässig und schnell ausführt.

Wichtig

Der Treiber muss alle Sensorgerätekontext speichern, bevor das Gerät D3 eingibt, und muss den gesamten Sensorgerätekontext wiederherstellen, nachdem das Gerät D0 eingegeben hat.

Kurz nach dem Eintritt in den modernen Standbymodus beendet Windows die Verwendung aller Sensoren automatisch, indem die Verwendung von Sensoren des Betriebssystems (z. B. Umgebungslicht und Drehung) und durch Anhalten von Anwendungen deaktiviert wird. Der Sensortreiber sollte den Zustand aller gesteuerten Sensorhardware aggregieren und diese Hardware auf den Standbygeräte-Strommodus umstellen, wenn alle Sensoren nicht mehr verwendet werden.

Der Mechanismus zum Wechseln des Sensorgeräts in den Standbymodus kann so konzipiert werden, dass die In-Band-Kommunikation über den Bus verwendet wird, der das Gerät mit dem SoC verbindet. So kann beispielsweise ein proprietärer Standbybefehl über den Bus an die Sensorhardware gesendet werden. Oder die Sensorhardware kann mit einer GPIO-Leitung verbunden sein, die das Gerät in den Standbymodus wechselt.

Hinweis

Wenn eine GPIO-Linie verwendet wird, um das Gerät in den Standbymodus zu wechseln, sollte der Sensortreiber den Treiberstapel auf D3 übertragen und die ACPI-Steuerungsmethoden für das Gerät (z. B. _PS3) zulassen, um die GPIO-Linie auf den Zustand festzulegen, der zum Platzieren der Hardware im Standbymodus erforderlich ist. Dieses Schema ermöglicht es dem Sensortreiber, auf plattformagnostische Weise zu schreiben – die spezifischen GPIO-Leitungen, Timing-Anforderungen und andere plattformspezifische Informationen werden in der ACPI-Firmware codiert, die vom Systemintegrator und nicht im gerätespezifischen Treiber bereitgestellt wird.

Verlassen moderner Standbyanforderungen

Wenn die Plattform den modernen Standby-Modus verlässt, muss der Sensortreiber die Sensorhardware wieder in den Leerlaufmodus (nicht verwendet) übertragen. Wenn Systemdienste fortgesetzt werden, fordert Windows die Verwendung von Sensoren an, z. B. Drehung und Umgebungslicht, die zum Ausführen von Systemfunktionen erforderlich sind. Wenn Anwendungen fortgesetzt werden, fordern sie möglicherweise Sensorinformationen an. Wenn die Sensorhardware eine In-Band-Nachricht benötigt, um das Gerät in den Leerlaufmodus zurückzugeben, sollte der Gerätetreiber diese Nachricht senden, sobald die erste Anforderung für Sensorinformationen gesendet wird. Wenn die Sensorhardware eine GPIO-Linie benötigt, um das Gerät zu signalisieren, um zum Leerlaufzustand zurückzukehren, muss der Treiber diese GPIO-Linie verwenden, um einen Übergang zu D0 auszuführen, sobald die erste Anforderung für Sensorinformationen bereitgestellt wird. In diesem Fall sollten ACPI-Steuerungsmethoden (z. B. _PS0) die GPIO-Linie nach Bedarf umschalten, um den Übergang zu initiieren. Wenn die Sensorhardware zuvor einen Übergang zum stromfernen Modus benötigt hat, da der Stromverbrauch im Standbymodus eine Milliwatt überschreitet, muss der Sensortreiber einen Übergang zu D0 durchführen und die ACPI-Steuerungsmethoden zulassen, um die Leistung auf das Gerät wiederherzustellen.

Energiekonfiguration für unterstützte Hardware

Die Hardware-Power-Management-Konfiguration für ein Sensorgerät hängt vom Stromverbrauch der Sensorhardware im Standbymodus ab und ob ein optionaler Sensorcontroller das Gerät verwaltet.

Standby-Leistung < ein Milliwatt

Wenn der Stromverbrauch eines Sensorgeräts im Standby-Strommodus nicht ein Milliwatt überschreitet, ist der Plattformdesigner nicht erforderlich, um die Sensorhardware an eine Stromschiene anzufügen, die von ACPI-Steuerungsmethoden aktiviert und deaktiviert werden kann. Eine der folgenden Mechanismen wird verwendet, um den Sensor in den Standby-Leistungsmodus zu wechseln:

  • Ein HID SET_POWER(Sleep)-Befehl.
  • Eine GPIO-Linie aus dem SoC.
  • Ein proprietärer Befehl, der vom Sensortreiber an die Sensorhardware gesendet wird.

Wenn die Plattform einen Sensorcontroller enthält, kann der Mikrocontroller-Chip entweder ein oder mehrere integrierte Sensorgeräte enthalten oder mit einem oder mehreren externen Sensorgeräten verbunden sein. In beiden Fällen sind diese Sensorgeräte aus der Sicht der Software verborgen hinter dem Mikrocontroller und unsichtbar für Windows. Wenn ein Sensorcontroller und seine aggregierten Sensorgeräte zusammen weniger als ein Milliwatt verbrauchen, wenn sich der Mikrocontroller und die Sensorhardware im Standby-Leistungsmodus befinden, ist der Plattformdesigner nicht erforderlich, um die Mikrocontroller- oder Sensorhardware an eine Stromschiene anzufügen, die von ACPI-Steuerungsmethoden aktiviert und deaktiviert werden kann. Der Sensorcontroller verwendet einen der folgenden Mechanismen, um sich selbst und alle Sensoren zu übertragen, die er im Standbymodus verwaltet:

  • Ein HIDI2C-SET_POWER (oder ähnlich) Befehl, der über den Kommunikationsbus gesendet wird.
  • Eine GPIO-Linie aus dem SoC.

Wenn der Sensor eine GPIO-Linie aus dem SoC benötigt, um Übergänge zu und vom Standbymodus zu initiieren, muss die Plattform-Firmware sowohl ein _PS3 -Objekt als auch ein _PS0 -Objekt im ACPI-Namespace unter dem Sensorhardwaregerät bereitstellen. Die ACPI-Firmware muss auch einen GPIO-Vorgangsbereich enthalten, der die GPIO-Linie von der SoC zur Sensorhardware beschreibt. Mit der _PS3-Steuerungsmethode wird die GPIO-Linie umgeschaltet, um das Gerät in den Standbymodus zu wechseln, und die _PS0 Steuerungsmethode schaltet die GPIO-Linie um, um die Sensorhardware in den Leerlaufmodus umzuschalten.

Das folgende Blockdiagramm zeigt die Power-Management-Optionen für einen eigenständigen Sensor, der weniger als ein Milliwatt im Standby-Strommodus verbraucht.

Eine Option besteht darin, den Windows HIDI2C-Stapel zu verwenden, wie auf der linken Seite des vorherigen Diagramms dargestellt. In diesem Fall kann der Übergang des Sensors zum Standby-Strommodus entweder durch einen In-Band-HID-Befehl SET_POWER (Ruhezustand) oder durch einen D3-IRP initiiert werden, den der ACPI-Treiber verarbeitet, indem die _PS3 Steuerungsmethode für den Sensor ausgeführt wird.

Die andere Option besteht darin, einen Drittanbietersensortreiber zu verwenden, wie auf der rechten Seite des vorherigen Diagramms dargestellt. Der Sensortreiber von Drittanbietern kann den Übergang zum Standby-Strommodus entweder mithilfe eines proprietären In-Band-Befehls oder durch Senden eines D3-IRP initiieren, das der ACPI-Treiber verarbeitet, indem die _PS3 Steuerungsmethode für den Sensor ausgeführt wird.

Der Plattform-Designer kann einen Mechanismus auswählen, unabhängig davon, ob die Sensorgeräte integriert oder außerhalb des Mikrocontrollerchips sind.

Standby-Leistung > ein Milliwatt

Wenn die Plattform Sensorhardware und/oder einen Sensorcontroller umfasst, der zusammen mehr als ein Milliwatt im Standby-Strommodus verbraucht, muss die Sensorhardware und der Mikrocontroller in den stromfernen Modus umgestellt werden, wenn sich das System im modernen Standbymodus befindet. In dieser Konfiguration sollte der Sensor, der optionale Sensorcontroller und alle Sensoren hinter dem Mikrocontroller auf einer einzigen Stromschiene platziert werden, die unter der Steuerung einer GPIO-Linie aus dem SoC ein- und ausgeschaltet wird.

Diese Konfiguration erfordert, dass der Plattform-Designer alle Sensorhardware auf einer umschaltbaren Stromschiene platzieren kann, die von einer GPIO-Linie aus dem SoC gesteuert wird. Wenn mehrere Eingangsspannungen für die Sensorhardware erforderlich sind, können mehrere Schalter, die jeweils von derselben GPIO-Leitung gesteuert werden, verwendet werden. Zusätzlich zur umschaltbaren Stromschiene muss die PLATTFORM ACPI-Firmware eine Power Resource im Namespace definieren. Diese Power Resource beschreibt die Sensorhardware und enthält die _ON und _OFF Methoden, die für die Verwendung eines GPIO-Betriebsbereichs verantwortlich sind, um die GPIO-Linie aus dem SoC umzuschalten.

Die Plattform-Firmware muss einen Verweis auf die Power Resource unter jedem Sensorgerät im ACPI-Namespace auf der umschaltbaren Stromschiene enthalten, einschließlich _PR0 und _PR3 Objekte.

Das folgende Blockdiagramm zeigt die Power-Management-Optionen für Sensorhardware und/oder einen Sensorcontroller, der zusammen mehr als ein Milliwatt im Standby-Strommodus verbraucht. Die beiden Optionen sind die Verwendung des Windows HIDI2C-Stapels, wie auf der linken Seite des Diagramms dargestellt, oder die Verwendung eines Drittanbietersensortreibers, wie auf der rechten Seite dargestellt.

In der Konfiguration, die den integrierten HIDI2C-Treiberstapel verwendet, wie auf der linken Seite des vorherigen Diagramms dargestellt, initiiert der HIDI2C-Treiber einen D3-Übergang, nachdem die Anzeige deaktiviert ist und die Plattform in den modernen Standbymodus wechselt. Wenn der D3-IRP über den ACPI-Treiber fließt, wird das _PR3-Objekt ausgewertet, und Windows deaktiviert die angegebene Power Resource, indem die _OFF-Methode ausgeführt wird. Wenn mehrere Sensoren die Power-Ressource teilen, zählt Windows automatisch alle Sensoren und führt die _OFF-Methode nur aus, nachdem alle Sensoren D3 eingegeben haben.

Wenn die Sensorhardware einen Drittanbietersensortreiber verwendet, wie auf der rechten Seite des vorherigen Diagramms dargestellt, ist der Steuerungsfluss wie zuvor identisch, außer dass der Sensortreiber dafür verantwortlich ist, den Übergang zu D3 zu initiieren.

Nachdem die Plattform aus dem modernen Standbymodus fortgesetzt wurde und eine Anwendung oder das Betriebssystem die Verwendung des Sensors anfordert, wechselt der Treiber zu D0. Ein D0-IRP fließt durch den ACPI-Treiber und das _PR0 Objekt wird ausgewertet, sodass der ACPI-Treiber die _ON Methode für die zugeordnete Power Resource ausführt. Mit der _ON-Methode wird die GPIO-Leitung umgeschaltet, um die umschaltbare Netzschiene zu aktivieren. Wenn das System einen Drittanbietersensortreiber verwendet, muss der Treiber einen D0-IRP anfordern und einen Übergang zu D0 sofort initiieren, nachdem Sensordaten vom Betriebssystem oder einer Anwendung angefordert wurden.

Aktivierungsinteressen

Es gibt keine Reaktivierungsbedenken für Sensoren oder den optionalen Sensorcontroller. Sensorgeräte werden voraussichtlich im Standby- oder Power-Remove-Modus während des modernen Standbymodus angezeigt und werden nicht erwartet, dass der SoC aktiviert wird, während sich die Plattform im modernen Standbymodus befindet.

Testen und Validieren

Es ist wichtig, dass der Systemdesigner überprüft, ob die Sensorhardware den Standby- oder Power-removed-Modus eingibt, wenn die Anzeige für den modernen Standby deaktiviert ist. Die Methode, die zum Testen und Überprüfen der Gerätekraftverwaltung verwendet wird, hängt davon ab, wie das Sensorgerät verbunden ist.

HIDI2C-angeschlossener Sensor

Wenn das System den Windows HIDI2C-Stapel verwendet, sollte sich der Systemintegrator an den Sensortreiberanbieter wenden, um informationen darüber zu geben, wie der Treiber am besten überprüfen kann, ob der Treiber die Energieverwaltung ordnungsgemäß ausführt. Sensortreiberanbieter werden empfohlen, die Ereignisablaufverfolgung für Windows (ETW) für alle Power-Management-Entscheidungen in ihrem Gerätetreiber zu verwenden und Beispieldokumentationen für Systemintegratoren bereitzustellen, um zu beschreiben, wie Sie den richtigen Power-Management-Vorgang mithilfe der ETW-Ereignisse und des Windows Performance Toolkit (WPT) überprüfen können.

Sensortreiber von Drittanbietern

Wenn das System einen Sensortreiber von Drittanbietern verwendet, sollte sich der Systemintegrator an den Sensortreiberanbieter wenden, um zu erfahren, wie der Treiber die Energieverwaltung ordnungsgemäß ausführt. Sensortreiberanbieter werden empfohlen, die Ereignisablaufverfolgung für Windows (ETW) für alle Power-Management-Entscheidungen in ihrem Gerätetreiber zu verwenden und Beispieldokumentationen für Systemintegratoren bereitzustellen, um zu beschreiben, wie Sie den richtigen Power-Management-Vorgang mithilfe der ETW-Ereignisse und des Windows Performance Toolkit (WPT) überprüfen können.

Wenn der Treiber einen Übergang zu D3 initiiert, wenn alle sensoreigenen Geräte nicht mehr verwendet werden, können Sie die Anweisungen in der folgenden Liste befolgen, um sicherzustellen, dass dieser Übergang wie erwartet auftritt, und dass ein Sensorgerät an D0 zurückgibt, wenn eine Anwendung oder das Betriebssystem das Gerät erneut verwenden muss.

Die softwareorientierte Methode verwendet Windows-Instrumentierung, um zu überprüfen, ob der D3-IRP über den Gerätetreiberstapel für das Sensorgerät überläuft. Der Windows Power Manager verfügt über integrierte ETW-Instrumentierung, die Instrumentierung für die Erkennung von Dx IRPs (Geräteleistungsanforderungen) umfasst. Um diese Informationen im manuellen Modus anzuzeigen, laden Sie das Windows Performance Toolkit herunter, und installieren Sie sie auf dem System unter Test.

Folgen Sie nach der Installation des Windows Performance Toolkits den folgenden Anweisungen, um eine XPerf-Ablaufverfolgung im Benutzermodus zu starten:

  1. Öffnen Sie ein Eingabeaufforderungsfenster als Administrator.

  2. Navigieren Sie zum Ordner \%ProgramFiles%\Windows Kits\8.0\Windows Performance Toolkit\ .

  3. Führen Sie den folgenden Befehl aus, um Xperf zu starten:xperf.exe -start power_session -on Microsoft-Windows-Kernel-Power

  4. Überwechseln Sie das System in den modernen Standbymodus, indem Sie die Power-Taste drücken.

  5. Warten Sie 30 Sekunden ab.

  6. Schalten Sie das System aus dem modernen Standby-Modus aus, indem Sie die Power-Taste drücken.

  7. Führen Sie den folgenden Befehl aus, um die Ereignisprotokollierung zu beenden: xperf.exe -stop power_session

  8. Konvertieren Sie die binäre Ablaufverfolgungsdatei in .csv- und humanlesbares Format: xperf.exe –i \user.etl > power.txt

  9. Öffnen Sie die Power.txt Datei in einem Text-Editor, und suchen Sie nach der Hardware-ID des Sensorgeräts. Sie können die Hardware-ID des Sensorgeräts auf der Registerkarte "Details" der Geräteeigenschaften in Geräte-Manager unter Geräteinstanzpfad nachschlagen. Im folgenden Beispiel ist der Geräteinstanzpfad des Sensorgeräts ACPI\MST0731\2&daba3ff&0.

  10. Die Initiierung des D3-IRP für das Sensorgerät wird durch ein Ereignis des Typs Microsoft-Windows-Kernel-Power/IRP/Stop angegeben, der den Geräteinstanzpfad des Sensorgeräts und einen letzten Ereigniswert von 3 aufweist, der angibt, dass der Zielzustand D3 ist. Das folgende Ausgabeereignis aus der Power.txt-Datei zeigt den Anfang des D3-IRP. Die letzten beiden Parameterwerte für dieses Ereignis (im rechten Abstand dargestellt) geben den Geräteinstanzpfad und den Zielzustand an.

    Microsoft-Windows-Kernel-Power/Irp/Start, 7605393, "Unknown" (4), 256, 0,,,,, 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\MSFT0731\2&daba3ff&0", 3

  11. Dieses Ereignis sollte am Anfang der ausgabedatei Power.txt protokolliert werden. Der Parameterwert 0x868e2728 im vorherigen Ausgabeereignis ist ein Zeiger auf die IRP-Struktur für D3 IRP. Wenn Sie nach nachfolgenden Ereignissen in der Ablaufverfolgungsdatei suchen, die denselben IRP-Zeiger aufweisen, können Sie den Fortschritt des D3-IRP verfolgen, da er über den Treiberstapel für das Sensorgerät fließt.

  12. Microsoft-Windows-Kernel-Power/Irp/Start, 7605393, "Unknown" (4),256, 0,,,,, 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\ATML1000\2&daba3ff&0", 3

  13. Microsoft-Windows-Kernel-Power/Driver/Start, 7605416, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fb56e0, "\Driver\sensdrv"

  14. Microsoft-Windows-Kernel-Power/Driver/Stop, 7605515, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fb56e0

  15. Microsoft-Windows-Kernel-Power/Driver/Start, 7605522, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fab6a0, "\Driver\i2cdrv"

  16. Microsoft-Windows-Kernel-Power/Driver/Stop, 7608342, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fab6a0

  17. Microsoft-Windows-Kernel-Power/Driver/Start, 7608351, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x857ffb90, "\Driver\ACPI"

  18. Microsoft-Windows-Kernel-Power/Driver/Stop, 7608416, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x857ffb90

  19. Microsoft-Windows-Kernel-Power/Driver/Start, 7608424, "Unknown" (4), 20, 0,,,,, 0x868e2728, 0x85fb56e0, "\Driver\sensdrv"

Wenn der Windows ACPI-Treiber Acpi.sys verarbeitet, verarbeitet Acpi.sys die entsprechende _PR3-Steuerelementmethode. Der System-Firmware-Designer stellt diese Steuerungsmethode bereit, um anzugeben, welche Power Resource für das Sensorgerät deaktiviert werden muss, um den D3-Zustand einzugeben. Acpi.sys führt auch die _OFF Steuerelementmethode unter der Power Resource aus.

Sie können einen ähnlichen Prozess verwenden, um sicherzustellen, dass das Sensorgerät zu D0 zurückgibt, wenn die Plattform den modernen Standby beendet und die Anzeige aktiviert. Ein Microsoft-Windows-Kernel-Power/IRP/Startereignis für das Sensorgerät wird mit einem Zielzustand von 0 (angibt D0) sofort protokolliert, nachdem die Power-Schaltfläche gedrückt wurde, um das System zu aktivieren, und das Betriebssystem oder ein fortgesetzter Anwendungsauftrag fordert Sensordaten an.

Prüfliste für Sensor- und Sensor-Mikrocontroller

Systemintegratoren und Sensorgeräteanbieter sollten die folgende Prüfliste verwenden, um sicherzustellen, dass ihr System-Power-Management-Design mit Windows 8 und höher kompatibel ist.

  • Wählen Sie Sensorhardware aus, die mit dem integrierten HIDI2C-Treiber und dem HIDSensor-Treiberstapel kompatibel ist.
  • Wählen Sie Sensorhardware aus, die einen Standby-Stromverbrauch von weniger als einem Milliwatt aufweist.
  • Stellen Sie sicher, dass der Sensorhardware- und Drittanbietertreiber (falls erforderlich) die Laufzeit-Leerlauf-Energieverwaltung unterstützt, wenn die Anzeige aktiviert ist:
    • Sensoren sollten heruntergefahren und D3 automatisch eingegeben werden, wenn sie nicht von einer Anwendung oder dem Betriebssystem verwendet werden.
    • Sensoren sollten D0 automatisch aktivieren und eingeben, wenn Sensordaten von einer Anwendung oder dem Betriebssystem angefordert werden.
    • Der Sensortreiber von Drittanbietern sollte als WDF-Treiber implementiert werden und kann auf dem SpbAccelerometer-Beispieltreiber basieren.
    • Die Abfrage für Sensorinformationen sollte begrenzt und auf die niedrigste Stromverbrauchsebene aktiviert werden. Beispielsweise sollte die Abfrage eines analogen Sensors hinter einem Mikrocontroller oder einer anderen Hardware mit niedriger Leistung erfolgen, die den SoC unterbrechen kann, wenn neue Sensordaten einen Schwellenwerterkennungswert überschreiten. Vermeiden Sie die Abfrage des Sensors in einem Treiber, der regelmäßig auf dem SoC ausgeführt wird, was den Gesamtstromverbrauch des Systems erheblich erhöhen kann.
  • Wenn die Sensorhardware einen Drittanbietertreiber verwendet:
    • Der Systemintegrator sollte mit dem Sensorgerätanbieter kommunizieren, um zu verstehen, wie Die Energieverwaltung für die Sensorhardware implementiert wird.
    • Wenn die Sensorhardware mehr als ein Milliwatt im Standby-Strommodus verbraucht, platzieren Sie die Sensorhardware auf einer eigenständigen Power Rail, die von einer GPIO-Linie aus dem SoC gesteuert wird. Stellen Sie Verweise auf die erforderliche ACPI-Power-Ressource, _ON/_OFF Steuerelementmethoden und Power Resource unter dem Sensorgerät im ACPI-Namespace (wie unten beschrieben) bereit.
    • Wenn die Sensorhardware eine GPIO-Linie aus dem SoC verwendet, um das Gerät in den Standby-Strommodus zu wechseln, stellen Sie sicher, dass die SYSTEM ACPI-Firmware die richtigen _PS3 und _PS0 Steuerungsmethoden (wie unten beschrieben) enthält.
  • Wenn die Sensorhardware einen Sensor-Mikrocontroller enthält, der Sensorgeräte angeschlossen hat, muss der Sensorcontroller eine Möglichkeit haben, die Sensorgeräte herunterzuschalten. Die Geräte können mithilfe der In-Band-Kommunikation über den Bus heruntergefahren werden, der den Mikrocontroller mit den Geräten verbindet, oder eine GPIO-Linie vom Mikrocontroller an die Geräte.
  • Wenn die Sensorhardware eine GPIO-Linie aus dem SoC erfordert, um das Gerät in den Standby-Strommodus zu wechseln:
    • Stellen Sie sicher, dass die GPIO-Linie aus dem SoC die vom Sensorhardwareanbieter festgelegten Anforderungen erfüllt und ausgelöst wird.
    • Beschreiben Sie im ACPI-Namespace den SoC GPIO-Pin als Teil einer GPIO-Vorgangsregion.
    • Stellen Sie eine _PS3 Kontrollmethode unter dem Sensorgerät im ACPI-Namespace bereit, um das Signal in der GPIO-Linie nach Bedarf zu verschieben, um die Sensorhardware in den Standby-Strommodus zu wechseln.
    • Stellen Sie eine _PS0-Steuerungsmethode unter dem Sensorgerät im ACPI-Namespace bereit, um das Signal in der GPIO-Linie nach Bedarf zu wechseln, um die Sensorhardware auf den Leerlauf oder aktiven Modus zu wechseln, nachdem das Gerät zu D0 wechselt.
  • Wenn die Sensorhardware mehr als ein Milliwatt im Standby-Strommodus verbraucht:
    • Platzieren Sie alle Sensorhardware auf einer Stromschiene, die von einer GPIO-Linie aus dem SoC aktiviert und deaktiviert werden kann. Oder wenn die Plattform mehrere Sensoren enthält, die unterschiedliche Versorgungsspannungsanforderungen haben, stellen sie separate Schienen bereit, die unabhängig gewechselt werden können.
    • Beschreiben Sie die umschaltbare Power Rail als Power Resource im ACPI-Namespace.
    • Stellen Sie unter dieser Power-Ressource die Methoden _ON und _OFF Steuerungen bereit, die die Power Rail ein- und ausschalten, indem Sie eine GPIO-Linie verwenden, die als Teil einer GPIO-Betriebsregion beschrieben wird.
    • Geben Sie im ACPI-Namespace _PR3 und _PR0 Objekte an, die die Power Resource für die Sensorhardware festlegen.
    • Stellen Sie sicher, dass die methoden _ON und _OFF alle De-Bounce- oder Timinganforderungen der Sensorhardware enthalten.
  • Testen und überprüfen Sie die Laufzeitleistungsverwaltung der Sensorgeräte auf der Plattform. Arbeiten Sie eng mit dem Sensorhardwareanbieter zusammen, um die Laufzeitleistungsverwaltung zu überprüfen, wenn die Systemanzeige aktiviert ist.
  • Testen Und überprüfen Sie, ob die Sensorhardware den Standby- oder Power-Remove-Modus eingibt, wenn die Plattform moderne Standby-Geräte eingibt.
    • Wenn die Sensorhardware die HIDI2C+ HID-Sensortreiberstapel verwendet, die in Windows enthalten sind, finden Sie unter Tests und Überprüfung für Details.
    • Wenn die Sensorhardware einen Drittanbietertreiber verwendet, wenden Sie sich an den Sensortreiberanbieter für die empfohlene Testmethode.
    • Wenn der Sensortreiber einen Übergang zu D3 als Teil seines Eintrags zum Standby- oder Power-Removed-Modus ausführt, verwenden Sie das Windows Performance Toolkit wie in Test und Validierung beschrieben. Stellen Sie sicher, dass die Sensorhardware D3 eingibt, wenn die Plattform moderne Standbys eingibt, und dass die Sensorhardware D0 eingibt, nachdem das System moderne Standby- und Sensorinformationen beendet hat.
  • Messen Sie den Stromverbrauch der Sensorhardware im Standby- oder Power-Removed-Modus.
  • Initiieren Sie mehrere Übergänge in und aus dem modernen Standby-Modus, und testen Sie dann den Betrieb der Sensorgeräte und die Anwendungen, die Sensorinformationen verwenden, wenn die Anzeige aktiviert ist.