共用方式為


感測器電源管理

行動計算機通常會納入感測器裝置,例如環境光感測器 (ALS)、3D 加速計、3D 陀螺儀或 3D 磁力計。 當操作系統或應用程式未使用感測器裝置時,電源管理軟體可以將裝置切換為低功率模式,以減少耗電量。 在支援新式待命電源模型的計算機上,感測器裝置應該會在計算機進入新式待命后不久切換到低功率模式,並維持在此模式中,直到計算機結束新式待命為止。

本文說明如何實作感測器裝置的電源管理。 此外,本文將討論選用感測器微控制器的電源管理(也稱為感測器融合中樞或感測器MCU)和匯總感測器裝置。 (例如,指南針感測器裝置可以藉由匯總加速計、陀螺儀和感測器微控制器控制下的磁力計來實作。微控制器會將這些感測器裝置公開給 Windows 作為單一邏輯感測器裝置。

感測器和感測器微控制器

感測器硬體對於新式行動裝置體驗至關重要。 從 Windows 10 開始,有豐富的系統基礎結構可用來公開和管理多個感測器裝置。 此基礎結構可簡化應用程式的開發,這些應用程式包含感測器資訊,並支援重要的內建 Windows 案例,例如螢幕自動旋轉,或根據環境光線變更顯示器亮度。

在系統運行時間期間,個別感測器在未使用時可以關閉電源。 使用特定感測器裝置的需求會透過 Windows 感測器 API 與裝置及其驅動程式進行通訊。 當操作系統或任何應用程式未使用感測器裝置時,裝置可由感測器驅動程式或感測器微控制器上執行的韌體關閉電源。

系統顯示器關閉,硬體平臺進入新式待命狀態之後,所有尚未處於低功率狀態的感測器裝置和選擇性感測器微控制器都應該在幾秒鐘內進入低功率、待命狀態,讓整個平臺可以進入低功率狀態。 不過,感測器驅動程式不會直接監視新式待命的轉換,以判斷感測器裝置何時應開啟和關閉。 相反地,感測器驅動程式應該讓裝置在一或多個客戶端主動使用時接收電源,這可以是應用程式或操作系統元件。 當沒有任何用戶端使用裝置時,驅動程式應該從裝置移除電源。

當感測器類別延伸模組要求驅動程序開始報告感測器樣本讀數時,它會呼叫感測器驅動程式的 EvtSensorStart 回呼方法。 當感測器類別延伸模組要求驅動程式停止報告感測器樣本讀數時,它會呼叫驅動程式的 EvtSensorStop 回呼方法。 如需詳細資訊,請參閱 關於感測器驅動程式事件

計算機進入新式待命,所有感測器裝置進入低功率狀態后,所有系統感測器硬體的總耗電量必須小於一千米。 感測器裝置和選擇性感測器微控制器可能會進入感測器硬體特有的低功率待命狀態。 或者,感測器裝置的硬體電源軌和選擇性感測器微控制器可以在感測器驅動程式和/或系統 ACPI 韌體的控制下關閉。

從 Windows 10 開始,針對新式待命平臺中核心晶片或系統的核心晶片或系統,提供一組有限的感測器硬體連線選項支援。 下列各節詳述支援的硬體與軟體組態,以及其新式待命期間和主動使用平臺時的電源管理行為。

電源管理模式

Windows 預期每個感測器裝置或感測器微控制器除了選用、零瓦、已移除電源模式外,還有三種裝置電源模式:主動、閑置和待命。 下表說明感測器裝置和選擇性感測器微控制器的電源模式。 下表區分使用感測器硬體但目前閑置的閑置模式,以及未使用感測器硬體的閑置模式。

[模式] 描述 平均耗電量 結束作用中延遲 轉換機制

使用中

感測器裝置和/或感測器微控制器正在主動提供或處理環境變更。

< 100 千瓦特

N/A

N/A

閒置(使用中)

感測器裝置和/或感測器微控制器正由一或多個應用程式使用,並正在等候將下一組感測器資訊提供給主要處理器。

< 50 千瓦特

感測器特定

硬體自發

閒置(未使用中)

任何應用程式都不會使用感測器裝置和/或感測器微控制器。 會維護感測器或感測器微控制器的校正數據。

< 5 千瓦特

感測器特定

人類介面裝置 (HID) 命令或感測器架構訊息,描述感測器裝置的目前使用量。

待命

任何應用程式都不會使用感測器裝置和/或感測器微控制器。 會維護感測器或感測器微控制器的校正數據。 感測器和/或感測器微控制器在主要處理器上執行的軟體要求之前,不會採取任何進一步動作。

< 1 千瓦特 (適用於所有系統感測器)

< 10 毫秒

多個選項:

  • HIDI2C 命令SET_POWER(睡眠)
  • 第三方驅動程式私人訊息
  • 從 SoC 到感測器硬體的 GPIO 線路

已移除電源

電源會從感測器裝置和/或感測器微控制器中移除,而且所有硬體內容都會遺失。

0 千瓦特

< 100 毫秒

外部實體會移除電源,或透過ACPI韌體套用電源,以回應 D3 電源 IRP。

注意

在上表中,待命一詞是指不同於新式待命的裝置電源模式,這是全平臺電源狀態。

軟體電源管理機制

感測器裝置的運行時間電源管理,感測器微控制器主要由是否使用它們所驅動。 根據一般規則,感測器驅動程式和硬體預期會在操作系統或應用程式未使用感測器時,將感測器置於閑置電源模式中。 Windows 感測器平臺提供連線至指定感測器之應用程式或作業系統客戶端數目的相關信息,以及感測器的使用週期或數據速率需求。 感測器驅動程式和/或硬體會使用這項資訊,在系統執行且顯示器開啟時,順暢地將感測器裝置轉換為閑置電源模式。

系統顯示器關閉且平台進入新式待命之後,Windows 預期所有感測器和感測器微控制器都會進入待命或移除電源模式。

選擇用於感測器裝置的軟體電源管理機制和選擇性感測器微控制器,取決於感測器硬體如何由設備驅動器向 Windows 公開,以及感測器硬體如何實際連接到 SoC 或核心晶片。 Windows 支援兩種公開和連接感測器裝置的方法。 其中一種方法會透過I2C連線使用內建感測器 HID 類別驅動程式,其中內建HIDI2C驅動程式會透過I2C連線傳輸HID資訊。 另一個則需要實作通用感測器驅動程式介面的第三方驅動程式,並在 SensorscxFunctions 數據表中呼叫 方法。

下表比較連接到感測器或感測器微控制器的兩個選項。 選擇連接到感測器硬體的兩個選項之一,會決定將感測器硬體轉換為待命或移除電源模式所需的軟體電源管理機制。

連線 ion 選項 總線連線 需要感測器驅動程式 驅動程式提供者 註解

HIDI2C

感測器硬體會透過I2C直接連線到SoC或核心晶片。

感測器 HID 類別驅動程式 + HID-over-I2C 類別驅動程式

Microsoft。 從 Windows 8 開始的收件匣元件。

優缺點

第三方感測器驅動程式

感測器硬體會透過 I2C 或 UART 直接連線到 SoC 或核心晶片。

實作 SENSOR_CONTROLLER_CONFIG的第三方驅動程式

感測器裝置廠商。

優缺點

HIDI2C

針對HIDI2C選項,選擇性感測器微控制器會透過I2C總線實際連接到SoC或核心晶片。 微控制器會公開多個最上層 HID 集合,每個邏輯感測器裝置各一個。 例如,指南針感測器可以透過 HID 公開為邏輯感測器裝置,這是感測器微控制器後方加速計、陀螺儀和磁力計感測器的匯總。 這是最簡單的實作連線和軟體,因為它不需要感測器裝置的第三方軟體。

Windows HIDI2C 堆疊類似於觸控控制器和手寫筆數位板,因為它支援兩種軟體電源管理機制:頻內 HID 命令和運行時間轉換至 D3 狀態。

頻內 HID 命令

SET_POWER(睡眠) 在顯示器關閉後傳送到裝置,平臺進入新式待命狀態。 此命令可以將裝置轉換為待命電源模式。

當平臺存在新式待命時,SET_POWER(開啟) 傳送至裝置,並再次開啟顯示器。

HID 感測器裝置堆疊的運行時間轉換至 D3 狀態

D3 IRP A IRP_MJ_POWER要求,會在 SET_POWER(Sleep) 命令之後立即傳送至裝置的驅動程式堆疊。 這會告訴裝置進入 D3 裝置電源狀態。 在轉換至 D3 時,系統 ACPI 韌體可能會執行控制方法,將裝置切換至待命或移除電源模式。

D0 IRP A IRP_MJ_POWER要求,當平臺存在新式待命且顯示器已開啟時,會傳送至裝置的驅動程式堆棧。 這會告訴裝置輸入 D0 裝置電源狀態。 如有必要,系統 ACPI 韌體可以執行控制方法,將裝置切換回閑置(未使用中)模式。

第三方感測器驅動程式

對於第三方感測器驅動程式,感測器微控制器會透過I2C 總線或UART實際連接到核心晶片。

感測器裝置廠商必須提供實 作 SENSOR_CONTROLLER_CONFIG 介面的使用者模式驅動程序架構 (UMDF) 驅動程式。 UMDF 驅動程式會透過I2C或UART與感測器裝置通訊。 這可以實作多次,每一個感測器都位於感測器微控制器後面。 第三方感測器驅動程式負責建立和協調所有電源管理。

第三方感測器驅動程序應該使用 Windows 驅動程式架構 (WDF) 來建置,並且以 Adxl354acc 範例驅動程式為基礎。 驅動程式必須使用電源管理的佇列,並透過 IWDFDevice3::AssignS0Idle 設定 Ex 方法的呼叫來設定 D3 閑置狀態。 驅動程式應該使用 IWDFDevice2::StopIdleIWDFDevice2::ResumeIdle 方法,以在裝置閑置或作用中時向 WDF 指示。 驅動程式也應該將 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 結構的 ExcludeD3Cold 成員設定WdfFalse,以啟用 D3cold。 啟用 D3cold 可讓平臺在裝置閒置並進入 D3 狀態之後,從感測器裝置移除電源。

最佳做法是將裝置特定程式代碼放在驅動程式中,並將平臺特定程序代碼放在ACPI韌體中,以在多個平台上重複使用驅動程式程序代碼。

輸入新式待命需求

第三方感測器驅動程式用於電源管理的需求是感測器硬體的待命耗電量功能。

當感測器裝置準備好進入待命或移除電源模式時,第三方感測器驅動程序應該起始轉換至 D3,即使裝置能夠使用頻內通訊機制切換至耗用小於 milliwatt 的電源模式也一樣。 這項需求的原因是,Windows 中的許多總線驅動程式會追蹤其端點裝置的裝置電源狀態,而且只有在所有端點裝置都已關閉電源時,才會關閉電源。 對於某些 SoC 設計和連接總線(尤其是通用序列總線(USB),所有端點裝置和主機控制器都必須在 D3 中,SoC 才能在新式待命期間進入最低電源狀態。 無法進入最低電源狀態,可以輕鬆地防止系統滿足電池使用時間的新式待命需求。

如果感測器硬體的所有受控制感測器硬體的待命電源耗用量少於一毫米,感測器驅動程序應該會在感測器(或微控制器上的所有感測器)不再使用時,自動將裝置切換到待命模式。

如果感測器硬體的待命耗電量大於一毫米,感測器驅動程式必須執行 D3 轉換,並允許 ACPI 控制方法從感測器裝置移除電源。 感測器驅動程式必須儲存所有必要的感測器裝置狀態,才能在 D3 期間從裝置移除電源。 感測器硬體廠商應與系統整合者密切合作,以確保感測器硬體和驅動程式能夠可靠地且快速地執行 D3 轉換。

重要

驅動程式必須在裝置進入 D3 之前儲存所有感測器裝置內容,且必須在裝置進入 D0 之後還原所有感測器裝置內容。

進入新式待命后不久,Windows 會自動停用作業系統對感測器的使用(例如環境光線和旋轉),以及暫停應用程式,來停止使用所有感測器。 感測器驅動程式應匯總所有受控制感測器硬體的狀態,並在所有感測器不再使用時,將此硬體切換至待命裝置電源模式。

將感測器裝置切換至待命模式的機制可設計成透過將裝置連線到SoC的總線使用頻內通訊。 例如,專屬待命命令可以透過總線傳送至感測器硬體。 或者,感測器硬體可能會連線到將裝置切換至待命模式的 GPIO 線路。

注意

使用 GPIO 線路將裝置切換為待命模式時,感測器驅動程式應將驅動程式堆疊轉換為 D3,並允許裝置的 ACPI 控制方法(例如,_PS3)將 GPIO 線設定為將硬體置於待命模式所需的狀態。 此配置可讓感測器驅動程式以平台無關的方式撰寫-特定 GPIO 線路、計時需求和其他平臺特定資訊會編碼在系統整合者提供的 ACPI 韌體中,而不是在裝置特定驅動程式中。

結束新式待命需求

當平台結束新式待命時,感測器驅動程式必須將感測器硬體轉換回閑置(未使用中)模式。 當系統服務繼續時,Windows 會要求使用執行系統功能所需的感測器,例如旋轉和環境光線。 當應用程式繼續時,它們可能會要求感測器資訊。 如果感測器硬體需要頻內訊息以將裝置傳回閑置模式,裝置驅動程式應該在傳送感測器資訊的第一個要求時立即傳送此訊息。 如果感測器硬體需要 GPIO 線路來向裝置發出信號以返回閑置狀態,驅動程式必須使用此 GPIO 線路,在提供感測器資訊的第一個要求時,立即執行轉換至 D0。 在此情況下,ACPI 控件方法(例如,_PS0)應該視需要切換 GPIO 行來起始轉換。 最後,如果感測器硬體先前需要轉換至已移除電源模式,因為待命模式中的耗電量超過一毫秒,感測器驅動程式必須執行轉換至 D0,並允許 ACPI 控制方法將電源還原至裝置。

支援的硬體電源設定

用於感測器裝置的硬體電源管理設定取決於感測器硬體在待命模式中的耗電量,以及選用感測器微控制器是否管理裝置。

待命電源 < 一千瓦特

如果待命電源模式中感測器裝置的耗電量不超過一千瓦特,則平臺設計工具不需要將感測器硬體連接到可透過ACPI控制方法開啟和關閉的電源軌。 下列其中一種機制可用來將感測器切換至待命電源模式:

  • HID SET_POWER(Sleep) 命令。
  • SoC 中的 GPIO 行。
  • 由第三方感測器驅動程式傳送至感測器硬體的專屬命令。

如果平臺包含感測器微控制器,則微控制器晶元可能包含一或多個整合式感測器裝置,或可能連接到一或多個外部感測器裝置。 無論哪種情況,這些感測器裝置都是從軟體的觀點來看,隱藏在微控制器後面,而且對 Windows 而言是看不見的。 如果感測器微控制器及其匯總感測器裝置在微控制器和感測器硬體處於待命電源模式時一起耗用不到一毫米,則平臺設計工具不需要將微控制器或感測器硬體連接到可由ACPI控制方法開啟和關閉的電源軌。 感測器微控制器會使用下列其中一種機制來轉換本身,以及它管理自待命模式的所有感測器:

  • 透過通訊總線傳送的HIDI2C SET_POWER (或類似) 命令。
  • SoC 中的 GPIO 行。

如果感測器需要SoC的 GPIO 線來起始轉換到待命模式,平臺韌體必須同時提供感測器硬體裝置下 ACPI 命名空間中的_PS3物件和_PS0物件。 ACPI 韌體也必須包含 GPIO 作業區域,其描述從 SoC 到感測器硬體的 GPIO 線路。 _PS3控制方法會將 GPIO 線切換為待命模式,而_PS0控制方法會將 GPIO 線切換為將感測器硬體切換為閑置模式。

下圖顯示獨立感測器的電源管理選項,該感測器在待命電源模式中耗用不到一千米瓦特。

其中一個選項是使用 Windows HIDI2C 堆疊,如上圖左側所示。 在此情況下,感測器的轉換至待命電源模式可以由頻內 HID SET_POWER(Sleep) 命令或 ACPI 驅動程式藉由執行感測器的_PS3控制方法來處理的 D3 IRP 來起始。

另一個選項是使用第三方感測器驅動程式,如上圖右側所示。 第三方感測器驅動程式可以使用專屬的頻內命令或傳送ACPI驅動程式所處理的 D3 IRP,藉由執行感測器的_PS3控制方法,起始轉換至待命電源模式。

無論感測器裝置是整合式還是微控制器晶元外部,平台設計工具都可以選擇任一機制。

待命電源 > 一千瓦特

如果平臺包含感測器硬體和/或感測器微控制器,在待命電源模式中一起耗用多個 milliwatt,當系統處於新式待命狀態時,感測器硬體和微控制器必須轉換為已移除電源模式。 在此設定中,感測器、選擇性感測器微控制器和微控制器後面的任何感測器都應該放在單一電源軌上,在SoC的 GPIO 線路控制下開啟和關閉。

此設定需要平台設計工具將所有感測器硬體放在可切換電源軌上,由SoC的 GPIO 線路控制。 如果感測器硬體需要多個輸入電壓,可以使用由相同 GPIO 線路控制的多個交換器。 除了可切換的電源軌之外,平臺 ACPI 韌體還必須在命名空間中定義電源資源。 此 Power Resource 描述感測器硬體,並包含負責使用 GPIO 作業區域從 SoC 切換 GPIO 線路的_ON和_OFF方法。

平臺韌體必須包含可切換電源軌上 ACPI 命名空間中每個感測器裝置下的電源資源的參考,包括_PR0和_PR3物件。

下圖顯示感測器硬體和/或感測器微控制器的電源管理選項,這些感測器硬體和/或感測器微控制器一起在待命電源模式中耗用了一個以上的千瓦特。 這兩個選項是使用 Windows HIDI2C 堆疊,如圖表左側所示,或使用第三方感測器驅動程式,如右側所示。

在使用內建HIDI2C驅動程式堆疊的組態中,如上圖左側所示,HIDI2C驅動程式會在顯示器關閉且平臺進入新式待命之後起始 D3 轉換。 當 D3 IRP 流經 ACPI 驅動程式時,將會評估_PR3物件,而 Windows 會執行 _OFF 方法來關閉指定的 Power Resource。 如果多個感測器共用Power Resource,Windows 會自動參考所有感測器,並在所有感測器都輸入 D3 之後,才執行_OFF方法。

如果感測器硬體使用第三方感測器驅動程式,如上圖右側所示,控制流程會與之前相同,不同之處在於感測器驅動程式負責起始轉換至 D3。

在平臺從新式待命恢復,應用程式或操作系統要求使用感測器之後,驅動程式會轉換為 D0。 D0 IRP 會流經 ACPI 驅動程式,並評估_PR0物件,讓 ACPI 驅動程式執行相關聯 Power Resource 的_ON方法。 _ON方法會切換 GPIO 線路以開啟可切換電源軌。 如果系統使用第三方感測器驅動程式,驅動程式必須要求 D0 IRP,並在操作系統或應用程式要求感測器數據之後立即起始轉換至 D0。

喚醒考慮

感測器或選用感測器微控制器沒有喚醒考慮。 感測器裝置預計將在新式待命期間處於待命或移除電源模式,而且在平臺處於新式待命狀態時,不會喚醒 SoC。

測試和驗證

當顯示器已關閉新式待命時,系統設計工具必須確認感測器硬體進入待命或已移除電源模式。 用來測試和驗證裝置電源管理的方法取決於感測器裝置的連線方式。

HIDI2C 連接的感測器

如果系統使用 Windows HIDI2C 堆疊,系統整合者應該連絡感測器驅動程式廠商,以取得如何最好地驗證驅動程式是否正確執行電源管理的資訊。 建議感測器驅動程式廠商針對裝置驅動程式中的所有電源管理決策使用事件追蹤(ETW)追蹤,並提供範例檔給系統整合者,以說明如何使用 ETW 事件和 Windows Performance Toolkit (WPT) 驗證正確的電源管理作業。

第三方感測器驅動程式

如果系統使用第三方感測器驅動程式,系統整合者應該連絡感測器驅動程式廠商,以取得如何最好地驗證驅動程式是否正確執行電源管理的資訊。 建議感測器驅動程式廠商針對裝置驅動程式中的所有電源管理決策使用事件追蹤(ETW)追蹤,並提供範例檔給系統整合者,以說明如何使用 ETW 事件和 Windows Performance Toolkit (WPT) 驗證正確的電源管理作業。

如果驅動程式在不再使用所有感測器裝置時起始轉換至 D3,您可以遵循下列清單中的指示,確認此轉換是否如預期般發生,而且當應用程式或操作系統需要再次使用裝置時,感測器裝置會返回 D0。

軟體焦點方法會使用 Windows 檢測來驗證 D3 IRP 是否通過感測器裝置的裝置驅動程式堆疊。 Windows 電源管理員具有內建的 ETW 檢測,其中包括用於偵測 Dx IRP 的檢測(裝置電源要求)。 若要以手動模式檢視這項資訊,請下載 Windows Performance Toolkit,並將其安裝在受測的系統上。

安裝 Windows Performance Toolkit 之後,請遵循下列指示來啟動使用者模式 XPerf 追蹤:

  1. 以 管理員 istrator 開啟命令提示字元視窗。

  2. 流覽至 \%ProgramFiles%\Windows Kits\8.0\Windows Performance Toolkit\ 資料夾。

  3. 若要啟動 Xperf,請執行下列命令: xperf.exe -start power_session -on Microsoft-Windows-Kernel-Power

  4. 按下電源按鈕,將系統轉換為新式待命。

  5. 等候 30 秒。

  6. 按下電源按鈕,將系統從新式待命中移出。

  7. 執行下列命令來停止事件記錄: xperf.exe -stop power_session

  8. 將二進位追蹤檔案轉換為 .csv 和人類可讀取的格式: xperf.exe –i \user.etl > power.txt

  9. 在文本編輯器中開啟Power.txt檔案,並搜尋感測器裝置的硬體識別碼。 您可以在 [裝置實例路徑] 底下的 [裝置屬性詳細數據] 索引卷 裝置管理員標中,查閱感測器裝置的硬體標識符。 在下列範例中,感測器裝置的裝置實例路徑是ACPI\MST0731\2&daba3ff&0。

  10. 感測器裝置的 D3 IRP 起始是由類型為 Microsoft-Windows-Kernel-Power/IRP/Stop 的事件來表示,該事件具有感測器裝置的裝置實例路徑,最後一個事件值為 3,表示目標狀態為 D3。 Power.txt 檔案中的下列輸出事件會顯示 D3 IRP 的開頭。 這個事件的最後兩個參數值(顯示在最右邊)表示裝置實例路徑和目標狀態。

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

  11. 此事件應該會在Power.txt輸出檔案的開頭附近記錄。 上述輸出事件中的參數值 0x868e2728 是 D3 IRP 之 IRP 結構的指標。 藉由在追蹤檔案中搜尋具有相同 IRP 指標的後續事件,您可以追蹤 D3 IRP 的進度,因為它會流經感測器裝置的驅動程式堆疊。

  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"

當 Windows ACPI 驅動程式 Acpi.sys 處理 D3 IRP 時,Acpi.sys 會執行對應的_PR3控件方法。 系統韌體設計工具提供這個控件方法,指出感測器裝置必須關閉哪些電源資源才能進入 D3 狀態。 Acpi.sys 也會在 Power Resource 下執行_OFF控件方法。

您可以使用類似的程式來確認當平台結束新式待命且顯示器開啟時,感測器裝置會返回 D0。 感測器裝置的 Microsoft-Windows-Kernel-Power/IRP/Start 事件會在按下電源按鈕以喚醒系統之後立即記錄目標狀態為 0(表示 D0),而操作系統或繼續的應用程式會要求感測器數據。

感測器和感測器微控制器電源管理檢查清單

系統整合者和感測器裝置廠商應該使用下列檢查清單,以確保其系統電源管理設計與 Windows 8 和更新版本相容。

  • 選取與內建HIDI2C驅動程式和HIDSensor驅動程式堆疊相容的感測器硬體。
  • 選取具有小於一千米瓦特待命耗電量的感測器硬體。
  • 確認感測器硬體和第三方驅動程式 (如有需要)支援開啟顯示器時的運行時間閑置電源管理:
    • 感測器應該關閉電源,並在應用程式或操作系統未使用感測器時自動輸入 D3。
    • 當應用程式或作業系統要求感測器數據時,感測器應該開啟並自動輸入 D0。
    • 第三方感測器驅動程式應實作為 WDF 驅動程式,而且可以根據 SpbAccelerometer 範例驅動程式。
    • 輪詢感測器信息應該受限,並盡可能在最低的耗電量層級啟用。 例如,輪詢模擬感測器應該發生在微控制器或其他低功率控制硬體後面,當新的感測器數據超過某些閾值偵測值時,可能會中斷SoC。 避免在SoC上定期執行的驅動程式中輪詢感測器,這可大幅增加整體系統耗電量。
  • 如果感測器硬體使用第三方驅動程式:
    • 系統整合者應該與感測器裝置廠商通訊,以瞭解如何實作感測器硬體的電源管理。
    • 如果感測器硬體在待命電源模式中耗用一個以上的 milliwatt,請將感測器硬體放在由 SoC 之 GPIO 線路控制的獨立電源軌上。 提供 ACPI 命名空間中感測器裝置下所需 ACPI 電源資源的參考、_ON/_OFF控制方法,以及電源資源(如下所述)。
    • 如果感測器硬體使用SoC的 GPIO 線路將裝置切換為待命電源模式,請確定系統ACPI韌體包含適當的_PS3和_PS0控制方法(如下所述)。
  • 如果感測器硬體包含感測器微控制器,其後方已連接感測器裝置,感測器微控制器必須有辦法關閉感測器裝置。 裝置可以透過將微控制器連接到裝置的總線使用頻內通訊,或從微控制器到裝置的 GPIO 線路來關閉電源。
  • 如果感測器硬體需要SoC的 GPIO 線路,才能將裝置切換到待命電源模式:
    • 請確定 SoC 中的 GPIO 行符合感測器硬體廠商所設定的層級和觸發程式需求。
    • 在 ACPI 命名空間中,將 SoC GPIO 針腳描述為 GPIO 作業區域的一部分。
    • 在 ACPI 命名空間中的感測器裝置下提供_PS3控制方法,視需要切換 GPIO 線路上的訊號,以將感測器硬體切換至待命電源模式。
    • 在 ACPI 命名空間中的感測器裝置下提供_PS0控制方法,視需要切換 GPIO 線路上的訊號,以在裝置切換至 D0 之後,將感測器硬體切換至閑置或作用中模式。
  • 如果感測器硬體在待命電源模式中耗用一個以上的 milliwatt:
    • 將所有感測器硬體放在電源軌上,可透過SOC的 GPIO 線路來開啟和關閉。 或者,如果平臺包含多個具有不同供電電壓需求的感測器,請提供可獨立切換的個別滑軌。
    • 將可切換電源軌描述為 ACPI 命名空間中的電源資源。
    • 在此電源資源下,使用 GPIO 作業區域的一部分描述的 GPIO 線路,提供_ON和_OFF控制方法,以開啟和關閉電源軌。
    • 在 ACPI 命名空間中,提供指定感測器硬體電源資源的_PR3和_PR0物件。
    • 請確定_ON和_OFF方法包含感測器硬體的任何退彈或計時需求。
  • 測試及驗證平臺中感測器裝置的運行時間電源管理。 與感測器硬體廠商密切合作,在系統顯示時驗證運行時間電源管理。
  • 當平臺進入新式待命時,測試並確認感測器硬體進入待命或移除電源模式。
    • 如果感測器硬體使用 Windows 隨附的 HIDI2C + HID 感測器驅動程式堆疊,請參閱測試和驗證以取得詳細數據。
    • 如果感測器硬體使用第三方驅動程式,請連絡感測器驅動程式廠商以取得建議的測試方法。
    • 如果感測器驅動程式在其進入待命或電源移除模式時執行轉換至 D3,請使用 Windows Performance Toolkit,如測試和驗證中所述。 確認當平台進入新式待命時,感測器硬體進入 D3,並在系統結束新式待命後進入 D0,並再次要求感測器資訊。
  • 以待命或移除電源模式測量感測器硬體的耗電量。
  • 在現代待命中起始多個轉換,然後在開啟顯示器時對感測器裝置和使用感測器資訊的應用程式進行壓力測試。