共用方式為


新式待命平臺的近域鄰近性 (NFP) 電源管理

近場鄰近性 (NFP) 裝置是一種短範圍的無線電傳輸器/接收者裝置,可讓 Windows 電腦與其他 NFP 配備的電腦產生關聯並配對。

NFP 裝置會透過 GUID_DEVINTERFACE_NFP 隨插即用 (PnP) 介面向 Windows 作業系統公開。 NFP 裝置廠商提供的協力廠商驅動程式負責實作GUI_DEVINTERFACE_NFP介面,以及管理實體 NFP 裝置的電源。 NFP 裝置通常會連線到晶片 (SoC) 或核心晶片上系統的 I2C 介面針腳。

一般而言,NFP 裝置可以在沒有軟體用戶端具有鄰近發行集或訂閱,或是停用所有發行集和訂閱時,進入低電源模式 (待命) 模式或電源移除模式。 從驅動程式開發的觀點來看,當裝置上沒有未處理的控制碼時,就會發生此狀況。 當未開啟並啟用裝置的控制碼時,NFP 裝置應置於待命模式或電源移除模式中。

當平臺進入新式待命且顯示器關閉時,NFP 裝置必須進入待命模式或已移除電源模式。 如果 NFP 裝置在待命模式中的耗電量平均大於一個 milliwatt,則裝置必須進入 0-power-removed 模式。

當平臺進入並結束新式待命時,不會直接通知 NFP 設備磁碟機。 相反地,Windows 會在新式待命專案上停用驅動程式的控制碼,並在離開新式待命時啟用這些相同的控制碼,以間接通知驅動程式。 平臺進入新式待命之後,Windows 會將停用通知傳送給尚未停用的每個開啟控制碼。 當平臺結束新式待命時,Windows 會將啟用通知傳送給先前停用的每個控制碼。 在新式待命進入之前已停用的開啟控制碼,會在新式待命結束之後保持停用狀態。

裝置電源管理模式

從Windows 8開始,新式待命平臺的 NFP 裝置預期會有三種電源模式:作用中、置和待命,除了電源移除模式 (,NFP 裝置的所有電源輸入都已由裝置外部的硬體機制關閉) 。 如需裝置所支援電源管理模式的詳細資訊,請連絡 NFP 裝置的硬體廠商。

下表說明 NFP 裝置的裝置電源模式。

裝置電源模式 描述 平均功率耗用量 結束作用中延遲 轉換機制

使用中

NFP 裝置正主動與鄰近電腦上的另一部 NFP 裝置通訊。

< 50 毫秒

N/A

N/A

閒置

NFP 裝置正在等候另一部具有 NFP 的電腦靠近。 NFP 裝置的驅動程式具有開啟的發行集和訂閱。

< 5 毫秒

< 10 毫秒 (一般)

硬體自發性

待命

NFP 裝置已套用電源,但沒有未完成的發行集或訂閱, (沒有開啟的控制碼) 。

< 1 milliwatt (裝置相依)

< 一般) (50 毫秒

來自 SoC 或核心晶片的驅動程式命令或 GPIO 針腳。

已移除電源

NFP 裝置沒有電源,因為平臺未開啟電源,或外部實體已關閉電源。

0 瓦特

< 100 毫秒

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

注意

  • 在上表中,待命一詞是指與待命不同的裝置電源模式,這是全平臺電源狀態。
  • 在上表中, D3 IRP 一詞是指 DevicePowerState類型的IRP_MN_SET_POWER要求。

待命模式中 NFP 裝置的指定耗電量會因元件號碼和製造商而異。 系統設計工具應該與裝置廠商合作,以瞭解裝置特定的待命電源耗用量。 如果待命模式中的電源耗用量超過一個 milliwatt,則 NFP 裝置應該連結至可切換的電源軌,讓裝置可以在新式待命期間放入電源移除模式。

軟體電源管理機制

Windows 依賴 NFP 裝置廠商來提供協力廠商驅動程式,以電源管理 NFP 裝置。 Windows 預期此驅動程式會監視 NFP 裝置驅動程式目前開啟的控制碼數目,以及這些控點的狀態,以判斷何時將 NFP 裝置置於低電源模式。

我們建議 NFP 驅動程式開發人員使用 User-Mode Driver Framework (UMDF) 來開發其驅動程式。 UMDF 包含許多功能,可讓裝置執行時間電源管理更容易開發。

D3 支援

當裝置的所有控制碼已關閉或裝置的所有開啟控制碼都收到 IOCTL_NFP_DISABLE 通知時,鼓勵 NFP 驅動程式開發人員將 NFP 裝置置於 D3 狀態。 所有開啟的控制碼都會在平臺進入新式待命並鎖定使用者桌面之後收到 IOCTL_NFP_DISABLE 通知。

即使 NFP 裝置在閒置電源模式中可以達到小於一毫秒的耗電量,仍建議在所有控制碼關閉或收到 IOCTL_NFP_DISABLE 通知時轉換至 D3。 執行轉換至 D3 可讓 NFP 裝置在驅動程式堆疊中的所有驅動程式收到硬體進入低電源模式的通知。 此外,Windows 內建的檢測可以偵測轉換至 D3。 Windows Performance Toolkit和其他效能診斷工具可用來觀察此轉換。 此內建診斷支援可降低系統整合者的成本,以確認 NFP 裝置IOCTL_NFP_DISABLE正確執行電源管理。

對於某些匯流排,匯流排上的裝置必須轉換至 D3,匯流排控制器才能進入低電源狀態。 針對 I2C 連線的 NFP 裝置,在進入 D3 的端點 NFP 裝置上沒有這類相依性,I2C 匯流排控制器才能關閉電源。

不過,如果未來的新式待命平臺使用通用序列匯流排 (USB) 連線到 NFP 裝置,NFP 裝置必須能夠進入 D3,讓 USB 主機控制器可以關閉電源,SoC 或核心晶片可以在新式待命期間進入低電源閒置狀態。 無論基礎匯流排為何,都鼓勵 NFP 設備磁碟機開發人員在準備好進入低電源模式時將其裝置轉換為 D3,以啟用未來的驅動程式重複使用和輕鬆的電源管理診斷。

如果若要進入待命電源模式,NFP 裝置需要從 NFP 設備磁碟機透過通訊匯流排傳送命令,此命令應該在轉換至驅動程式中的 D3 時傳送。

如果 NFP 裝置需要從 SoC 切換 GPIO 針腳以進入待命電源模式,則需要轉換至 D3。 起始轉換成 D3 的轉換會通知 Windows ACPI 驅動程式Acpi.sys,這會在 ACPI 命名空間的 NFP 裝置下執行實作的_PS3控制方法。 _PS3方法可以透過 GPIO 作業區域切換 GPIO 行。 若要讓 NFP 設備磁碟機更容易移植,任何平臺特定延遲或其他計時條件約束都應該在平臺韌體中實作,讓 NFP 設備磁碟機不需要針對特定平臺自訂。

若要在裝置閒置且平臺處於 S0 (運作) 系統電源狀態時,啟用 NFP 裝置轉換為 D3,UMDF 驅動程式會呼叫 IWDFDevice2::AssignS0IdleSettingsEx 方法。 在此呼叫中,驅動程式會提供WUDF_DEVICE_POWER_POLICY_IDLE_SETTINGS結構的指標做為輸入參數,並將這個結構的 DxState 成員設定為 PowerDeviceD3。

如果處於待命模式的 NFP 裝置耗電量大於一個 milliwatt,則在關閉所有控制碼或所有控制碼都已傳送 IOCTL_NFP_DISABLE 通知時,裝置必須處於電源移除模式。 為了讓基礎韌體和硬體從 NFP 裝置移除電源,裝置必須已輸入 D3 (,也就是 D3hot) ,且 NFP 裝置驅動程式先前必須啟用轉換至 D3cold。 啟用 D3cold 表示 NFP 裝置的驅動程式會在轉換至 D3 之前儲存裝置的硬體狀態,以便從裝置移除所有電源。 裝置必須在裝置電源開啟 (之後繼續正常運作,也就是裝置結束 D3cold) ,而驅動程式會還原裝置的硬體狀態。 若要啟用 D3cold,UMDF 驅動程式會呼叫 IWDFDevice2::AssignS0IdleSettingsEx 方法。 在此呼叫中,驅動程式會提供WUDF_DEVICE_POWER_POLICY_IDLE_SETTINGS結構的指標,並將這個結構的 ExcludeD3Cold 成員設定為 WdfFalse。

如需詳細資訊,請參閱 驅動程式中的支援 D3cold

無線電管理員

如果 NFP 裝置使用 RF (無線電) 機制來偵測鄰近事件,則 NFP 裝置廠商除了 NFP 裝置驅動程式之外,還必須提供 無線電管理員 。 無線電管理員是一種 COM DLL,可實作無線電管理使用者介面 API,並與 NFP 設備磁碟機私下通訊。 當使用者在 Windows 設定應用程式中變更 NFP 裝置的無線電開啟/關閉狀態時,NFP 裝置驅動程式會透過無線電管理員收到變更的通知。 驅動程式開發人員必須定義私人介面,才能在無線電管理員 COM 物件與 NFP 裝置驅動程式之間通訊無線電管理狀態。 當 NFP 設備磁碟機收到來自無線電管理員物件的命令,將裝置的無線電開啟/關閉狀態設定為關閉時,驅動程式必須儲存裝置的硬體狀態、關閉與 NFP 裝置相關聯的任何 RF 元件,並將裝置轉換為 D3。 請注意,當裝置進入 D3 時,必須保留裝置進入 D3 時,GUID_DEVINTERFACE_NFP介面中所有控制碼的數量和狀態。

在無線電管理員指出 NFP 裝置中的 RF 元件應該啟用並開啟電源之後,NFP 裝置必須在發生下列其中一項時立即轉換回 D0:

  • 用戶端會開啟 NFP 裝置驅動程式的新控制碼。
  • 任何已開啟的控制碼都會收到 IOCTL_NFP_ENABLE 通知。

當平臺結束 Modern Standby 且使用者輸入密碼時,Windows 會傳送 IOCTL_NFP_ENABLE 通知給 NFP 裝置驅動程式。

如果無線電管理員指出 NFP 裝置中的 RF 元件應該停用並關閉電源,則 NFP 裝置必須維持在 D3 中,即使開啟新的控制碼或啟用現有的控制碼,直到無線電管理員指出應該啟用並開啟 RF 元件。

如果 NFP 裝置需要傳送命令以將 NFP 裝置傳回閒置模式,則此命令可以透過通訊匯流排傳送, (通常是 I2C) ,而且應該在 NFP 裝置驅動程式中完成轉換至 D0 時發生。

將 NFP 裝置轉換為 D0 可讓 ACPI 命名空間中裝置下的_PS0控制方法執行。 如有需要,這個控制方法可以將 GPIO 行從 SoC 切換至 NFP 裝置,以將裝置傳回閒置模式。

支援的硬體電源設定

NFP 裝置應該平均耗用一個以上的電源,而硬體平臺處於新式待命狀態。 如果裝置在待命模式時不會耗用一個以上的電源,NFP 設備磁碟機可以在裝置未使用時將裝置置於待命模式。 否則,系統設計工具必須將裝置連結至專用電源軌,該滑軌可在未使用裝置時關閉。

待命電源小於一個 milliwatt

如果 NFP 裝置在待命模式中耗用不到一毫秒的電源,則 NFP 裝置可以放在任何系統電源軌上,並與任意數目的其他裝置共用此滑軌。 裝置轉換成待命電源模式會在轉換至 D3 時發生。

NFP 裝置進入待命模式可以透過通訊匯流排傳送命令, (通常是 I2C) ,或切換路由傳送至 NFP 裝置的 SoC GPIO 線路來起始。

如果 NFP 裝置需要從 SoC 切換 GPIO 線路進入待命模式,則必須在 ACPI 命名空間的 GPIO 作業區域中描述 GPIO 行。 系統整合者必須在 ACPI 命名空間的 NFP 裝置下實作_PS3和_PS0方法。 _PS3 方法的實作應該將 GPIO 行切換為將 NFP 裝置切換為待命模式。 實作 _PS0 方法應該將 GPIO 行切換為將 NFP 裝置從待命模式切換為閒置模式。 這一行的切換可能會受限於平臺特定或裝置特定的計時條件約束。

如先前所述,NFP 設備磁碟機必須在關閉所有控制碼時起始轉換至 D3,或所有控制碼都收到 IOCTL_NFP_DISABLE 通知,或無線電管理員要求關閉 NFP 裝置中的 RF 元件。

待命電源超過一個 milliwatt

如果待命模式中的 NFP 裝置耗電量超過一個 milliwatt,則 NFP 裝置必須放在專用電源軌上,才能獨立開啟和關閉 SoC 的 GPIO。 關閉所有控制碼,或所有控制碼都收到 IOCTL_NFP_DISABLE 通知,或無線電管理員要求關閉 RF 元件時,NFP 裝置會先轉換為 D3,然後在關閉電源滑軌時轉換為已移除電源模式。

可切換電源軌必須由 SoC 或核心晶片的 GPIO 線路控制。 GPIO 行應該描述為 ACPI 命名空間中 GPIO 作業區域的一部分。 此外,ACPI 命名空間必須包含描述可切換電源軌的 Power Resource,以及實作_ON和_OFF控制方法。 _ON和_OFF控制方法會切換 GPIO 作業區域中所述的 GPIO 行,以開啟和關閉電源軌。 _PR3和_PR0套件必須放置在 ACPI 命名空間的 NFP 裝置底下,而且必須連結到描述電源軌的電源資源。

如先前所述,NFP 設備磁碟機必須啟用 D3cold。 此外,當關閉所有控制碼,或所有控制碼都收到 IOCTL_NFP_DISABLE 通知,或無線電管理員要求關閉 RF 元件時,驅動程式必須起始轉換至 D3。 當 ACPI 驅動程式收到 D3 IRP 時,它會在 _PR3 套件所指示的 Power Resource 上執行 _OFF 方法。 這個方法會切換 GPIO 線路,控制電源切換硬體以從 NFP 裝置移除電源。

如果無線電管理員指出應該啟用 RF 元件,NFP 設備磁碟機必須在開啟新控制碼或現有控制碼收到 IOCTL_NFP_ENABLE 通知時,執行轉換至 D0。 當 ACPI 驅動程式收到 D0 IRP (DevicePowerState) 類型的IRP_MN_SET_POWER要求時,它會在 _PR0 套件所指示的 Power Resource 上執行 _ON 方法。 這個方法會切換 GPIO 線路,控制電源切換硬體以將電源重新套用至 NFP 裝置。

喚醒考慮

NFP 裝置沒有喚醒疑慮。 當平臺處於新式待命狀態時,不允許 NFP 裝置支援喚醒 SoC。

測試和驗證

當顯示器為新式待命電源關閉時,系統設計工具必須確認 NFP 裝置確實進入待命模式或已移除電源模式。 NFP 裝置的電源管理解決方案高度相依于協力廠商驅動程式的實作。 因此,鼓勵系統整合者討論測試及驗證 NFP 裝置與 NFP 裝置廠商功能的最佳方法。

如果 NFP 設備磁碟機在關閉或停用驅動程式的所有控制碼時起始轉換至 D3, 則可以使用 XPerf 工具 來觀察此轉換。 這個驗證方法類似于觸控控制器和感應器裝置的其他位置描述。

如果驅動程式透過通訊匯流排傳送命令,以將裝置轉換成待命模式,驅動程式應該支援事件追蹤,讓系統整合者可以輕鬆地驗證電源管理作業。 您可以使用 Windows (ETW 事件的事件追蹤) 事件,輕鬆地將檢測新增至 Windows 驅動程式。 如需詳細資訊,請參閱 將事件追蹤新增至 Kernel-Mode 驅動程式。 ETW 追蹤的優點是可以使用包含 XPerf 的 Windows Performance Toolkit 工具組來檢視。

NFP 裝置電源管理檢查清單

系統整合者和 NFP 廠商應該檢閱下列檢查清單,以確認其系統電源管理設計與Windows 8和更新版本相容。

  • 選取具有待命模式的 NFP 裝置,其耗用平均小於一毫秒的電源。
  • 確認 NFP 設備磁碟機會在關閉裝置的所有控制碼時起始轉換至 D3,或者所有開啟的控制碼都收到IOCTL_NFP_DISABLE通知,或無線電管理員要求 NFP 裝置中的 RF 元件已停用並關閉電源。
  • 如果無線電管理員指出應該啟用 RF 元件,然後第一個控制碼會開啟到裝置,或第一個開啟的控制碼收到IOCTL_NFP_ENABLE通知,請確認 NFP 設備磁碟機會起始轉換至 D0。
  • 如果 NFP 設備磁碟機透過通訊匯流排傳送自訂命令,告知 NFP 裝置進入待命模式,請與 NFP 裝置廠商合作,以判斷 NFP 裝置進入待命電源模式以回應此命令的最佳方式。
  • 如果 NFP 裝置的耗電量大於一個 milliwatt,請確定裝置位於可切換的電源軌上。
  • 如果 NFP 裝置位於可切換電源軌上:
    • 確認裝置在未使用時完全移除裝置的電源,且還原電源會自動重新啟用並重新初始化裝置。
    • 確認電源軌是由 SoC 或核心晶片的 GPIO 線路所控制。
    • 將 GPIO 行對應至系統 ACPI 韌體中實作的 GPIO 作業區域。
    • 提供電源資源來描述電源軌,並在此 Power Resource 中包含_ON、_OFF和_STA控制方法。
    • 在系統 ACPI 韌體中的 NFP 裝置下提供_PR0和_PR3套件,並確保它們參考電源資源。
    • 如果 NFP 裝置需要電源開啟延遲,驅動程式才能存取它,請在實作_ON控制方法中編碼此延遲。
  • 在新式待命中起始多個轉換,然後在開啟顯示器時,對 NFP 裝置的作業進行壓力測試。