Freigeben über


Energieverwaltung für Bluetooth für moderne Standbyplattformen

Ein Bluetooth-Radiogerät ermöglicht die kurzweite RF-Kommunikation zwischen einem PC und einem Eingabegerät, einem Audiogerät oder einem anderen Bluetooth-angefügten Benutzer-Peripheriegerät. In einem modernen Standby-PC sollte der Treiber für ein Bluetooth-Radio die Leistungszustände dieses Geräts gemäß den in diesem Artikel dargestellten Richtlinien verwalten.

Bluetooth

In einem Windows-System hängt die Verwaltung des Stromversorgungsstatus des Bluetooth-Funkgeräts von dem Bus ab, an den das Funkgerät angeschlossen ist. Auf Hardware-Plattformen, die das moderne Standby-Strommodell unterstützen, unterstützt Windows Bluetooth-Funkgeräte, die an UARTs oder an den Universal Serial Bus (USB) angeschlossen sind. (Theoretisch sollte das Bluetooth-Transportbustreibermodell, das in Windows 8 eingeführt wurde, jeden zugrunde liegenden Kommunikationsbus unterstützen. Derzeit prüft Microsoft die moderne Standbymodus-Kompatibilität nur für Bluetooth-Funkgeräte, die an UARTs oder USB angeschlossen oder in ein System on a Chip (SoC) integriert sind.)

Genau wie in typischen Windows-Treiberstapeln wird die Stromversorgungsrichtlinie für Bluetooth-Funkgeräte von einem einzigen Power Policy Owner (PPO) verwaltet, nämlich BthPort (bthport.sys). BthPort arbeitet in Verbindung mit einem entsprechenden transportspezifischen Treiber (UART oder USB), um das Funkgerät entsprechend in den gewünschten Stromversorgungszustand zu versetzen. Im Falle von USB geschieht dies durch USB Selective Suspend über den USB-Host-Controller. Im Falle von UART koordiniert ein zusätzlicher, vom Hersteller bereitgestellter Transportbustreiber die Anfragen von BthPort an das Bluetooth-Funkgerät über die systemspezifische Busverbindung. Zur Steuerung der Hardware verwendet der Treiber eine Kombination aus bandinterner Buskommunikation, Koordination mit dem Power-Engine-Plug-in (PEP) und/oder bandexterner Signalisierung über GPIO-Pins.

Bluetooth-Funkgeräte unterstützen in der Regel mehrere Stromsparmodi, von denen einige dem Gerät selbst vorbehalten sein können. Der Windows-Bluetooth-Treiberstapel erfordert, dass ein Bluetooth-Funkgerät die folgenden drei Stromversorgungszustände des Geräts unterstützt:

  • Aktiv (D0)
  • Ruhezustand (D2)
  • Aus (D3)

Es wird erwartet, dass die Energieverwaltung eines Bluetooth-Funkgeräts in allen Energiezuständen des Systems einheitlich funktioniert. Das Bluetooth-Funkgerät wechselt nicht in einen speziellen Energieverwaltungsmodus, wenn das System in den modernen Standbymodus wechselt. Stattdessen wird das Bluetooth-Funkgerät auf der Grundlage von Leerlaufzeitüberschreitungen, die von BthPort verwaltet werden, in den und aus dem Ruhezustand (D2) versetzt. Zur Unterstützung des Aufweckens aus dem modernen Standbymodus bei mit Bluetooth verbundenen HID-Eingabegeräten bleibt das Funkgerät im Ruhezustand (D2) und wird für das Aufwecken aktiviert. Nur gekoppelte Bluetooth-HID-Geräte können das System im modernen Standbymodus aufwecken. Es wird erwartet, dass das Bluetooth-Funkgerät im Ruhezustand (D2) einen sehr geringen Stromverbrauch hat – weniger als ein Milliwatt –, wenn keine Geräte über HF-Verbindungen angeschlossen sind. Es ist davon auszugehen, dass der Stromverbrauch je nach Anzahl der angeschlossenen Geräte, der Art dieser Geräte und ihrer Aktivitätsmuster variiert.

Das Bluetooth-Funkgerät muss auch die Möglichkeit bieten, das Funkgerät über die Benutzeroberfläche der Funkgeräteverwaltung auszuschalten. Diese Steuerung der Benutzeroberfläche ist in Windows integriert. Nach dem Ausschalten des Bluetooth-Funkgeräts über diese Benutzerschnittstelle geht das Gerät in den Aus-Zustand (D3) über, in dem es voraussichtlich nahezu keine Watt verbraucht.

Bei früheren Versionen von Windows, einschließlich Windows 8 und Windows 8 RT, muss der Hersteller des Bluetooth-Geräts eine DLL zur Funksteuerung bereitstellen. Ab Windows 8.1 und Windows RT 8.1 sollten jedoch alle Bluetooth-Funkgeräte in modernen Standby-Plattformen die Bluetooth Core Specification Version 4.0 unterstützen. Die Hersteller müssen also keine Software-DLL mehr bereitstellen, um die Funkein- und -ausschaltfunktion zu implementieren. Windows handhabt diese Funktion jetzt und ignoriert eine solche DLL, selbst wenn sie vorhanden ist.

Energieverwaltungsmodi

Softwareseitig unterstützt das Bluetooth-Funkgerät drei Energieverwaltungsmodi, unabhängig von dem Bus, an den das Gerät angeschlossen ist. Der Windows Bluetooth-Treiber besitzt die Definition der drei Modi und verwaltet die Übergänge in und aus diesen Modi. In der folgenden Tabelle werden die drei Bluetooth-Funkkraftmodi beschrieben.

Mode BESCHREIBUNG Energiezustand Gerät (Dx) Durchschnittlicher Stromverbrauch Beenden der Latenz für aktiv Übergangsmechanismus

Aktiv

Das Bluetooth-Funkgerät kommuniziert aktiv mit einem zugeordneten Gerät im Auftrag einer Anwendung im Betriebssystem.

D0

Unterschiedlich, je nach Szenario und zugehörigen Geräten.

Ruhezustand (meist Leerlauf mit niedrigem Tastverhältnis)

Das Bluetooth-Funkgerät befindet sich im Energiesparmodus. Das System wurde mit einem entfernten Bluetooth-Gerät gekoppelt, aber es besteht keine Verbindung zwischen den beiden Geräten. Das heißt, das Gerät wurde getrennt. Der Bluetooth-Controller muss in der Lage sein, ein Wecksignal zu erzeugen (an den SoC, wenn das Funkgerät nicht integriert ist), wenn neue Daten von dem gekoppelten Gerät eintreffen.

Oder das Bluetooth-Funkgerät hat keine Zuordnungen.

Oder das Bluetooth-Funkgerät hat eine aktive Verbindung, die im Leerlauf ist (es werden keine Daten gesendet/empfangen) und die Verbindung ist im Sniff-Modus.

D2

< 4 Milliwatt

< 100 Millisekunden

Der Windows-Bluetooth-Treiber leitet einen D2-Übergang mit Hilfe eines D2-Power-IRP ein.

Der Windows-Bluetooth-Treiber initiiert ein ausstehendes Wait-Wake-IRP im zugrunde liegenden Transportbustreiber. Wenn das Bluetooth-Gerät über USB angeschlossen ist, entspricht dieser Zustand dem selektiven Suspendieren. (Die selektive Bluetooth-Aussetzung setzt voraus, dass das Gerät im USB-Gerätedeskriptor als fernsteuerbar und selbstversorgend gekennzeichnet ist).

Aus

Das Bluetooth-Funkgerät ist vollständig ausgeschaltet (null Watt) oder befindet sich in einem stromsparenden Zustand, in dem kein Funkstatus beibehalten wird. Das Bluetooth-Funkgerät ist in diesem Zustand nicht in der Lage, ein Wecksignal an den SoC zu senden. Das Bluetooth-Funkgerät kann auch keine Funksignale aussenden oder empfangen - alle HF-Komponenten sind ausgeschaltet.

D3

0 Watt

< 2 Sekunden

Der Windows-Bluetooth-Treiber leitet einen D3-Übergang mit Hilfe eines D3-Power-IRP ein.

Der Transportbustreiber oder die ACPI-Firmware des Systems kann die Stromversorgung unterbrechen oder die GPIO-Leitungen umschalten, um die Bluetooth-Funkhardware in den Zustand Aus (D3) zu versetzen.

Das Bluetooth-Funkgerät unterstützt auch einen zugehörigen Modus, in dem der Funksender auf Anforderung des Benutzers per Software ausgeschaltet werden kann. Wenn der Funk für das Bluetooth-Gerät aktiviert ist, befindet sich dieses Gerät im Zustand Aktiv (D0) oder Ruhezustand (D2). Wenn das Funkgerät für das Bluetooth-Gerät vom Benutzer deaktiviert wird, stoppt Windows die Bluetooth-Aktivität, indem es die Protokolltreiber und ihre untergeordneten Komponenten entfernt und dann den Funkgerätestapel in den Zustand Aus (D3) versetzt.

Software-Energieverwaltungs-Mechanismen

Die Energieverwaltung eines Bluetooth-Funkgeräts wird durch Dx-Zustandsübergänge des Geräts gesteuert, die von BthPort als Eigentümer der Energierichtlinie (PPO) eingeleitet werden. Der PPO entscheidet, wann das Gerät zwischen den Zuständen Aktiv (D0), Ruhezustand (D2) und Aus (D3) übergeht.

Wenn dem Funkgerät keine Geräte zugeordnet sind, schaltet Windows das Gerät auf D2 um und belässt es in diesem Zustand, bis der Benutzer den Kopplungsvorgang beginnt. Wenn das Funkgerät mit einem oder mehreren Geräten verbunden ist, verwendet der Windows-Bluetooth-Treiber eine Leerlaufzeit, um zu entscheiden, wann das Bluetooth-Funkgerät von D0 auf D2 umgeschaltet wird. Dieser Algorithmus verwendet das Muster der Bluetooth-Nutzung durch das Betriebssystem und die Anwendungen, um zu bestimmen, wann das Funkgerät in den D2-Status übergehen soll. So schaltet das Funkgerät beispielsweise einige Sekunden nach dem letzten Tastendruck auf einer Bluetooth-Tastatur auf D2 um, wenn keine andere Aktivität auf dem Bluetooth-Funkgerät stattfindet.

Der Windows-Bluetooth-Treiber schaltet das Gerät auf D0 um, wenn einer der folgenden Punkte zutrifft:

  • Der Benutzer beginnt einen Kopplungsprozess.
  • Eine Anwendung fordert die Nutzung der Bluetooth-Funktionalität an.
  • Das Bluetooth-Funkgerät hat eine Aufweckanforderung auf der Grundlage einer Eingabe von einem zugehörigen Gerät erzeugt.

Im Gegensatz zu anderen Geräten folgt das Bluetooth-Funkgerät während des modernen Standby-Modus (Systemanzeige aus) demselben Energieverwaltungsmuster wie bei normalem Betrieb des Systems und eingeschalteter Anzeige. Das liegt daran, dass das Bluetooth-Funkgerät voraussichtlich zur Verfügung steht, um den SoC aufzuwecken, wenn während des modernen Standby-Modus jederzeit Eingaben von einem verbundenen Gerät empfangen werden. Wenn ein Benutzer beispielsweise eine Bluetooth-Tastatur mit einem Windows-Computer verbunden hat, sollte das Drücken einer beliebigen Taste auf der Tastatur den Computer aus dem Standby-Modus aufwecken und das Display einschalten.

Wenn keine Geräte mit dem Funkgerät verbunden sind, sollte das Funkgerät so konfiguriert werden, dass es weniger als ein Milliwatt verbraucht, wenn es sich im Ruhezustand (D2) befindet.

Wenn das Bluetooth-Funkgerät ausgeschaltet ist (D3), dürfte es fast keine Watt verbrauchen.

Hinweise zur Implementierung des Treibers

Wenn das Bluetooth-Funkgerät über einen UART angeschlossen oder in das SoC selbst integriert ist, muss der Hersteller des Bluetooth-Geräts einen Transportbustreiber implementieren und bereitstellen. Der Transportbustreiber ist für folgendes verantwortlich:

  • Übersetzung von Bluetooth-HCI-Paketanforderungen vom Windows-Bluetooth-Treiber (Bthmini.sys) in Befehle, die über den Transportbus an das Bluetooth-Funkgerät gesendet werden.
  • Übergang des Bluetooth-Funkgeräts in verschiedene Energieverwaltungsmodi, die den Geräteenergiezuständen Aktiv (D0), Ruhezustand (D2) und Aus (D3) entsprechen. Der Treiber implementiert auch Routinen, die Ereignisse der Energieverwaltung behandeln.
  • Konfigurieren des Bluetooth-Funkgeräts, um das SoC aufzuwecken, wenn ein Gerät Eingaben generiert, und Ändern des Zustands aller optionalen GPIO-Leitungen vom SoC zum Bluetooth-Funkgerät, die für die Energieverwaltung verwendet werden.
  • Auflistung und Verwaltung der Stromversorgung anderer Geräte (z. B. FM-Transmitter oder GPS-Geräte), die denselben Bus wie das Bluetooth-Funkgerät nutzen. Wenn andere Geräte physisch mit dem gemeinsamen Bus verbunden sind, aber nicht dem Betriebssystem ausgesetzt sind, muss der Transportbustreiber diese Geräte vollständig abschalten.

Einzelheiten zur Implementierung eines Transportbustreibers finden Sie unter „Richtlinien zur Handhabung des Transportbustreibers für die Bluetooth-Leistungssteuerung“. Transportbustreiber müssen unter Verwendung des Windows Driver Framework (WDF) geschrieben werden. Ein Beispieltreiber ist unter Seriellen HCI-Bustreiber für Bluetooth verfügbar.

Um die Energieverwaltung für Bluetooth-Funkgeräte zu aktivieren, muss der Transportbustreiber die folgenden Aktionen durchführen:

  • Aktivieren Sie die Unterstützung für die Leerlauf-Energieverwaltung während der Laufzeit und stellen Sie die Unterstützung für die Geräte-Energiezustände Aktiv (D0), Ruhezustand (D2) und Aus (D3) bereit.
  • Zeigt dem Windows-Bluetooth-Treiber an, dass das Bluetooth-Funkgerät in der Lage ist, Weck-Ereignisse aus dem D2-Zustand zu signalisieren.
  • Unterstützt das Aktivieren des Bluetooth-Funkgeräts zum Aufwecken des SoC und das Deaktivieren des Wecksignals des Bluetooth-Geräts für den SoC. Diese Unterstützung kann die Verarbeitung eines oder mehrerer GPIO-Interrupts und die Ausführung von Wake-Methoden innerhalb von WDF erfordern.
  • Ändern Sie den Zustand aller optionalen GPIO-Leitungen vom SoC zum Bluetooth-Funkgerät, wenn das Gerät zwischen den Zuständen Aktiv (D0), Ruhezustand (D2) und Aus (D3) wechselt.

Wenn das Bluetooth-Funkgerät in das SoC selbst integriert ist, kann sich der Transportbustreiber beim Windows-Energieverwaltungsrahmen registrieren, um den Energiestatus des Bluetooth-Funkgeräts an ein SoC-spezifisches Power-Engine-Plug-in (PEP) zu übermitteln. Dies wird erreicht, indem das IdleTimeoutType-Mitglied der Struktur WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS auf den Wert SystemManagedIdleTimeout gesetzt wird.

Wenn das Bluetooth-Funkgerät über USB angeschlossen ist, muss der in Windows integrierte USB-Bluetooth-Treiberstapel verwendet werden. Der Stack verwaltet alle Vorgänge der Energieverwaltung.

Funkverwaltung

Der Zustand des Bluetooth-Funksenders ist direkt an den Betriebszustand des Geräts gebunden. Es wird erwartet, dass der Funksender eingeschaltet ist, wenn sich das Funkgerät im aktiven (D0) oder Ruhezustand (D2) befindet. Der Funksender muss ausgeschaltet werden, wenn das Funkgerät in den Zustand Aus (D3) übergeht.

Wenn der Benutzer das Bluetooth-Funkgerät ausschaltet, beendet Windows die Bluetooth-Aktivität, indem anstehende E/A-Vorgänge abgebrochen und die Protokolltreiber und ihre untergeordneten Komponenten entladen werden. Der Windows-Bluetooth-Treiberstapel gibt dann den Befehl HCI_Reset an den Controller aus, um das Funkgerät in seinen Standardzustand zurückzusetzen. In der Grundeinstellung darf das Kontrollgerät keine Funksignale senden oder empfangen können. Schließlich geht der Controller in den Aus-Zustand (D3) über.

Als Reaktion auf den Übergang in den Aus-Zustand (D3) muss der Transportbustreiber das Bluetooth-Gerät mit gerätespezifischen Methoden in den niedrigsten Energiezustand abschalten. Eine typische Implementierung besteht darin, den Zustand einer GPIO-Leitung vom SoC zum Bluetooth-Funkgerät zu ändern, um die Stromversorgung des Bluetooth-Moduls zu deaktivieren. Eine alternative Implementierung besteht darin, von der ACPI-Firmware zu verlangen, dass sie die Stromversorgung des Bluetooth-Moduls mit den Steuermethoden _PS0 und _PS3 unterbricht.

Wenn der Benutzer das Bluetooth-Funkgerät einschaltet, versetzt Windows das Funkgerät in den Zustand Aktiv (D0), initialisiert das Funkgerät neu und listet dann die untergeordneten Protokolltreiber neu auf. Wenn das Funkgerät in den aktiven Zustand (D0) übergeht, müssen alle erforderlichen GPIO-Leitungen als Teil der normalen D0-Sequenz für das Bluetooth-Funkgerät umgeschaltet werden. Wenn die ACPI-Firmware zum Ausschalten des Funkgeräts verwendet wurde, muss sie die Stromversorgung mit der _PS0-Steuerungsmethode wiederherstellen.

Als Teil dieser normalen Sequenz muss der Transportbustreiber das Gerät als intern angeschlossenes Gerät markieren, indem er die ContainerId des Bluetooth-Funkgeräts auf einen bestimmten GUID-Wert setzt, {00000000-0000-000-ffff-ffffffffffff}. Dadurch können die Elemente der Windows-Funkbenutzeroberfläche erkennen, dass es sich bei dem vom Transportbustreiber angezeigten Bluetooth-Funkgerät um ein internes Gerät des Computers handelt und nicht um ein extern angeschlossenes Funkgerät, für das die Funksteuerung nicht geeignet ist.

Energiekonfiguration für unterstützte Hardware

Die Hardware-Konfiguration der Energieverwaltung für ein Bluetooth-Funkgerät hängt vom Kommunikationsbus ab. Im Allgemeinen wird erwartet, dass alle Bluetooth-Funkgeräte die folgenden Hardware-Energieverwaltungsfunktionen gemeinsam haben:

  • Unterstützung für den Zustand Aus (D3) als Mittel zum Ausschalten des Funkgeräts auf Benutzeranforderung. Durch das Ausschalten des Funkgeräts wird das Bluetooth-Funkgerät in einen Niedrigverbrauchszustand versetzt, der nahezu null Watt beträgt.
  • Ein Mechanismus, um in einen energiesparenden Ruhezustand (D2) einzutreten, in dem die Verbindungen zu den zugehörigen Geräten aufrechterhalten werden, aber keine aktiven Übertragungen stattfinden.
  • Ein Mechanismus zur Erzeugung eines Weck-Interrupts, wenn ein zugehöriges Gerät Daten für den SoC hat und der SoC sich in einem stromsparenden Zustand befindet, in dem der Bus, an den das Bluetooth-Funkgerät angeschlossen ist, gerade nicht aktiv ist.

Jeder der unterstützten Busse (USB, UART und Integration in den SoC) für das Bluetooth-Funkgerät unterstützt alle drei grundlegenden Hardware-Energieverwaltungsfunktionen in der vorangegangenen Liste. Darüber hinaus kann jedes Bluetooth-Funkgerät über hersteller- oder gerätespezifische Energieverwaltungsfunktionen verfügen, die jedoch nicht Gegenstand dieses Themas sind.

Die Hersteller von Bluetooth-Funkgeräten werden aufgefordert, zusätzliche Energieverwaltungsfunktionen in einer Weise zu implementieren, die in der Hardware autonom ist und keine zusätzliche Treibersoftware des Herstellers auf dem Windows-System erfordert. Die Hersteller von Bluetooth-Funkgeräten werden außerdem aufgefordert, ihre Treiber und ihre Energieverwaltungssoftware so zu implementieren, dass plattformspezifische Unterschiede in die ACPI-Firmware des Systems und nicht in den Code des Gerätetreibers oder die INF-Datei des Treibers aufgenommen werden. Dieser Ansatz ermöglicht die Wiederverwendung eines Treiberpakets für ein Bluetooth-Gerät auf weiteren Plattformen, ohne dass eine Aktualisierung der Treiberquelle, der Binärdatei oder des signierten Installationspakets erforderlich ist.

Bluetooth-Funk, der über einen UART außerhalb des SoC angeschlossen ist

Wenn das Bluetooth-Funkgerät über einen UART angeschlossen ist und sich physisch außerhalb des SoC befindet, muss der Hersteller des Bluetooth-Funkgeräts einen Transportbustreiber bereitstellen, der das Bluetooth-Funkgerät und alle anderen Gerätefunktionen (z. B. ein UKW-Radio), die sich denselben Kommunikationspfad über den UART teilen, zugänglich macht. Der Bustreiber ist auch für die Verwaltung der GPIO-Ressourcen verantwortlich, die den Stromverbrauch und die Aufwachfunktion des Bluetooth-Funkgeräts steuern.

Im Gegensatz zu anderen Geräteklassen werden die GPIO-Leitungen, die die Stromversorgung und das Aufwachen von Bluetooth steuern, direkt vom Transportbustreiber verwaltet und nicht durch ACPI-Steuerungsmethoden abstrahiert. Dieses Kontrollschema ergibt sich aus dem Design des Multifunktions-Bustreibers, der das Bluetooth-Funkgerät und andere Funktionen auflistet, die sich denselben UART-Port teilen. In diesem Entwurf ist der Windows ACPI-Treiber, Acpi.sys, nicht in den Treiberstapeln für Bluetooth und das FM-Radio geladen, so dass es nicht möglich ist, die ACPI-Steuermethode auszuführen, um auf einen Dx-Zustandswechsel des Geräts zu reagieren.

Wenn das Bluetooth-Funkgerät an den UART-Port des SoC angeschlossen ist, muss der Systemintegrator einen Pin des GPIO-Controllers auf dem SoC verwenden, um die Stromversorgung des Funkgeräts zu steuern. In der ACPI-Firmware muss dieser Pin als GPIO-E/A-Ressource dem Geräteobjekt zugewiesen werden, das das Stammgerät des Transportbustreibers darstellt. Der GPIO-Pin kann direkt mit dem Bluetooth-Funkgerät verbunden werden, wenn das Funkgerät das Ausschalten des Geräts mit internem Power-Gating unterstützt.

Wenn das Bluetooth-Funkgerät Power-Gating unterstützt, kann die Stromquelle für das Bluetooth-Funkgerät an eine beliebige Systemstromschiene angeschlossen werden.

Wenn das Funkgerät kein internes Power-Gating unterstützt, das über einen GPIO-Pin gesteuert wird, muss der Systemintegrator das Bluetooth-Funkgerät an eine schaltbare Stromschiene anschließen. Der GPIO-Pin des SoC wird dann mit der Hardware für die Stromschaltung verbunden. In diesem Konzept können ACPI-Steuermethoden nicht verwendet werden, um Referenzwerte zu verfolgen oder den Stromversorgungszustand mehrerer Geräte, die sich dieselbe Stromschiene teilen, zusammenzufassen, so dass das Bluetooth-Funkgerät auf seiner eigenen schaltbaren Stromschiene isoliert werden muss.

Der Systemintegrator muss einen zusätzlichen Pin am GPIO-Controller auf dem SoC verwenden, um Wake-Interrupts vom Bluetooth-Funkgerät zu empfangen. Interrupts an diesem Pin müssen in der Lage sein, den SoC aus seinem niedrigsten Energiezustand aufzuwecken. In einigen SoC-Konzepten wird ein solcher Pin als "Permanent eingeschalteter GPIO-Pin“ bezeichnet, da der GPIO-Controller jederzeit Interrupts an diesem Pin erkennen kann, unabhängig vom Stromversorgungszustand des SoCs. Die Always-on-Fähigkeit kann in der Hardware auf einen bestimmten Satz von GPIO-Pins auf dem SoC beschränkt sein oder in der Firmware konfiguriert werden. Es ist von entscheidender Bedeutung, dass der Systemintegrator dieses Design mit dem SoC-Anbieter überprüft, um sicherzustellen, dass der Wake-Interrupt des Bluetooth-Funkgeräts den SoC aus seinem tiefsten Ruhezustand herausführt. (Während des modernen Standby-Modus befindet sich das System immer in S0. Moderne Standby-Systeme unterstützen S3 nicht).

Wenn alle vom Transportbustreiber aufgezählten Funktionen abgeschaltet wurden und das vom ACPI aufgezählte Transportbusgerät in den Zustand D3 übergeht, kann der immer eingeschaltete GPIO-Pin abgeschaltet werden. Dies geschieht, wenn die Funkgeräte für alle vom Transportbustreiber aufgezählten Gerätefunktionen vom Benutzer ausgeschaltet wurden.

Bluetooth-Funk über USB

Wenn das Bluetooth-Funkgerät über den USB-Bus mit dem SoC oder Core-Silizium verbunden ist, muss das Funkgerät über eine andere Quelle als den USB-Bus mit Strom versorgt werden. In der USB-Spezifikation wird ein solches Funkgerät als selbstversorgend beschrieben, und diese Fähigkeit muss in den USB-Deskriptoren des Bluetooth-Geräts angegeben werden.

In ähnlicher Weise muss die Hardware des USB-Geräts die Unterstützung für das ferngesteuerte Aufwecken ankündigen, d. h. die Fähigkeit des Bluetooth-Funkgeräts, In-Band-USB-Resume-Signale zu erzeugen, um den USB-Host-Controller aufzuwecken. Die Funktion des ferngesteuerten Weckens muss auch in den USB-Deskriptoren des Bluetooth-Funkgeräts angegeben werden.

Das Bluetooth-Funkgerät muss sowohl die Selbstversorgungs- als auch die Fernweckfunktion unterstützen, damit es in den Ruhezustand (D2) übergehen und die selektive Aussetzung aktivieren kann.

Wenn sich das Bluetooth-Funkgerät im Ruhezustand (D2) befindet und Daten von einem zugehörigen Gerät für den Host verfügbar sind, muss das Bluetooth-Funkgerät das Signal zum Wiederaufwachen aus der Ferne erzeugen, um den Host aufzuwecken. Ein bandexternes Fortsetzungssignal über eine GPIO-Leitung zum Kernsilizium wird nicht unterstützt. Es wird erwartet, dass das Bluetooth-Funkgerät, einschließlich seiner USB-Verbindungsschaltung, im Ruhezustand (D2) weniger als ein Milliwatt verbraucht.

Aktivierungsbedenken

Es wird erwartet, dass das Bluetooth-Funkgerät in der Lage ist, im Ruhezustand (D2) einen Weckalarm zu erzeugen. Der Weck-Interrupt muss dazu führen, dass der SoC eingeschaltet wird, auch wenn er sich in seinem niedrigsten Energiezustand befindet. Die folgende Tabelle fasst die beiden Bluetooth-Wecksignalisierungsmechanismen zusammen.

Verbindungsbus Hardwaresignalpfad Kommentare und Notizen

UART (mit vom Anbieter bereitgestellter Transportbustreiber)

GPIO vom Bluetooth-Funkgerät zum SoC.

Das Funkgerät muss mit einem GPIO-Pin verbunden sein, der den SoC aus seinem niedrigsten Stromversorgungszustand aufwecken kann.

USB

Bandinterne USB-Wiederaufnahme-Signalisierung nach selektiver Unterbrechung.

Bandexternes GPIO-Wecken wird nicht unterstützt.

Testen und Validieren

Die Hersteller von Bluetooth-Geräten werden aufgefordert, die Energieverwaltung des Bluetooth-Funkgeräts zu testen und zu validieren.

Die Übergänge zwischen den Zuständen Aktiv (D0), Ruhezustand (D2) und Aus (D3) können mit dem Xperf-Tool, wie in anderen Abschnitten beschrieben, leicht beobachtet werden.

Die Aktivitäten von Bluetooth-Treibern können mit Hilfe der in Windows integrierten ETW-Instrumente überwacht werden. Dem Treiberentwickler wird empfohlen, die ETW-Instrumentierung (Event Tracing for Windows) zu verwenden, um signifikante Änderungen des Energieverwaltungszustands im Treiber aufzudecken und diese mit Hilfe des Xperf-Tools oder der integrierten Windows-Ereignisanzeige zu beobachten.

Wenn das Bluetooth-Funkgerät über USB angeschlossen ist, kann das integrierte Dienstprogramm Powercfg.exe zusammen mit der Befehlszeilenoption /energy verwendet werden, um zu überprüfen, ob das Funkgerät in den Ruhezustand (D2) übergeht und angehalten wird. So verwenden Sie das Dienstprogramm Powercfg.exe:

  • Öffnen Sie ein Eingabeaufforderungsfenster als Administrator.
  • Wechseln Sie zum Stammverzeichnis des Laufwerks (cd \).
  • Geben Sie den Befehl powercfg.exe /energie ein.
  • Warten Sie die vorgegebenen 60 Sekunden ab.
  • Das Dienstprogramm Powercfg.exe gibt die Anzahl der Fehler und Warnungen auf dem System aus, wie in der folgenden Abbildung dargestellt.
  • Nachdem das Tool die zusammenfassenden Informationen in das Fenster der Eingabeaufforderung geschrieben hat, erzeugt es eine HTML-Datei mit dem Namen Energiebericht.html. Öffnen Sie die Datei und suchen Sie nach Fehler- oder Warnbedingungen des USB-Bluetooth-Geräts. Die folgende Beispielzusammenfassung meldet, dass ein USB-Bluetooth-Gerät nicht in den Ruhezustand (D2) übergegangen ist, wenn es sich im Leerlauf befindet.

Hersteller von Bluetooth-Geräten, die zusätzliche Bluetooth-Profiltreiber und -Anwendungen von Drittanbietern zur Verfügung stellen, müssen sicherstellen, dass ihre Software das überraschende Entfernen unterstützt und es der Funkverwaltungsinfrastruktur ermöglicht, das Bluetooth-Funkgerät ordnungsgemäß und rechtzeitig abzuschalten. Diese Szenarien sollten validiert werden, während das Profil oder die Anwendung in Gebrauch ist. Für Audiotreiber sollte zum Beispiel Bluetooth-Audiostreaming möglich sein, wenn das Radio ausgeschaltet ist. Dann sollte das Radio wieder eingeschaltet und der Audio-Stream neu gestartet werden, um zu überprüfen, ob er noch funktioniert.

Prüfliste zur Bluetooth-Energieverwaltung

Systemintegratoren, Bluetooth-Funkgerätehersteller und Sensorgerätehersteller sollten die folgende Checkliste verwenden, um sicherzustellen, dass ihr System-Energieverwaltungsdesign mit Windows 8 und Windows 8.1 kompatibel ist.

  • Bestimmen Sie den Kommunikationsbus für den Bluetooth-Funkgerät im Systementwurf. Das Bluetooth-Funkgerät wird entweder über UART oder über USB angeschlossen.

  • Stellen Sie sicher, dass das Bluetooth-Funkgerät einen energiesparenden Ruhemodus unterstützt, der weniger als ein Milliwatt verbraucht, wenn keine Geräte verbunden sind.

    Der Stromverbrauch des Bluetooth-Funkgeräts im Ruhezustand kann je nach Anzahl der derzeit verbundenen Geräte variieren, sollte aber im Allgemeinen fünf Milliwatt zu keinem Zeitpunkt überschreiten.

  • Stellen Sie sicher, dass das Bluetooth-Funkgerät die folgenden grundlegenden Energieverwaltungsfunktionen unterstützt:

    • Unterstützung für den Zustand Aus (D3), um dem Benutzer das Ausschalten des Funkgeräts zu ermöglichen.
    • Ein Mechanismus, um in einen energiesparenden Ruhezustand (D2) einzutreten, in dem die Verbindungen zu den zugehörigen Geräten aufrechterhalten werden, aber keine aktiven Übertragungen stattfinden.
    • Ein Mechanismus zum Aufwecken des SoC, wenn ein zugehöriges Gerät Daten generiert und der SoC sich in einem Zustand niedriger Leistungsaufnahme befindet.
  • Wenn das Bluetooth-Funkgerät über einen Nicht-USB-Bus (UART oder in das SoC integriert) angeschlossen ist, muss der Bluetooth-Funkgerätehersteller einen Transportbustreiber entwickeln. Der Transportbustreiber muss Folgendes tun:

    • Die Funktionen und Anforderungen, die in den Richtlinien zur Handhabung des Transportbustreibers für die Bluetooth-Leistungssteuerung beschrieben sind, unterstützen.
    • Bluetooth-Anfragen vom Windows-Bluetooth-Treiber (Bthmini.sys) in Befehle an das Bluetooth-Funkgerät über den UART-Bus oder einen proprietären internen SoC-Bus umwandeln.
    • Das Bluetooth-Funkgerät in verschiedene Energieverwaltungsmodi, die den Geräteenergiezuständen Aktiv (D0), Ruhezustand (D2) und Aus (D3) entsprechen, versetzen. Der Treiber muss auch Routinen implementieren, die IRPs für die Geräteenergieverwaltung (Dx) verarbeiten.
    • Konfigurieren Sie das Bluetooth-Funkgerät so, dass das SoC aufgeweckt wird, wenn ein Gerät Eingaben generiert, und ändern Sie den Status aller optionalen GPIO-Leitungen, die das SoC zu Zwecken der Energieverwaltung mit dem Bluetooth-Funkgerät verbinden.
    • Geben Sie andere Geräte (z. B. einen FM-Transmitter) an, die gemeinsam mit dem Bluetooth-Funkgerät genutzt werden können.
    • Verwenden Sie das Windows Driver Framework (WDF) für die Treiberentwicklung.
    • Auf der Grundlage des Bluetooth Serial HCI Bus Driver implementiert werden.
  • Wenn das Bluetooth-Funkgerät über USB angeschlossen ist, muss der Hersteller des Bluetooth-Funkgeräts die Verbindung herstellen:

    • Aktivieren Sie die Unterstützung für selektives Aussetzen im Funkgerät.
    • Vergewissern Sie sich, dass das Funkgerät über die im USB-Gerätedeskriptor eingestellte Fernweckfunktion und Eigenstromversorgung verfügt.
    • Stellen Sie sicher, dass das Funkgerät (einschließlich USB-Komponenten) weniger als ein Milliwatt verbraucht.
  • Unabhängig vom Verbindungsbus muss das Bluetooth-Funkgerät für ein intern verbundenes Funkgerät folgende Schritte ausführen:

    • Stellen Sie sicher, dass alle HF-Komponenten als Reaktion auf einen HCI_Reset-Befehl, der an das Funkgerät gesendet wird, ausgeschaltet werden, um das Funkgerät auszuschalten. Das Funkgerät darf weder Funksignale aussenden noch empfangen können.
    • In den niedrigsten Stromverbrauchsmodus wechseln, wenn er auf Aus (D3) gestellt ist.
  • Wenn das Bluetooth-Funkgerät über UART angeschlossen ist, muss der Systemintegrator das Wake-Signal des Bluetooth-Funkgeräts mit einem GPIO-Pin auf dem SoC verbinden, der das SoC aus dem niedrigsten Energiezustand aufwecken kann.

    • Der SoC kann verlangen, dass Wecksignale an eine begrenzte Anzahl von GPIO-Pins geleitet werden, die so vorkonfiguriert sind, dass sie immer eingeschaltet sind.
    • Oder der SoC kann die Konfiguration eines GPIO-Pins zu einem Always-on-Pin in der Systemfirmware während des Starts unterstützen.
  • Der Systemintegrator muss testen und überprüfen, ob das Bluetooth-Funkgerät in den Ruhezustand (D2) übergeht, wenn keine verbundenen Geräte vorhanden sind.

  • Der Systemintegrator muss prüfen und sicherstellen, dass das Bluetooth-Funkgerät in den Ruhezustand (D2) übergeht, wenn alle verbundenen Geräte keine aktiven Übertragungen vornehmen.

  • Der Systemintegrator muss testen und verifizieren, dass das Bluetooth-Funkgerät den SoC aus dem niedrigsten Energiezustand aufwecken kann, wenn sich das Funkgerät im Ruhezustand (D2) befindet.

  • Der Systemintegrator muss prüfen und sicherstellen, dass das Bluetooth-Funkgerät im Ruhezustand (D2) keine störenden Wecksignale erzeugt.

  • Der Systemintegrator muss testen und überprüfen, ob zusätzliche Software von Drittanbietern, wie z. B. Profiltreiber und Anwendungen, ordnungsgemäß mit dem Bluetooth-Funkmanagement funktioniert. Das Funkgerät sollte aus- und eingeschaltet werden, während die Software eines Drittanbieters aktiv genutzt wird (z. B. beim Abspielen von Audiodaten oder beim Übertragen einer Datei).