USB 裝置電源狀態
本文說明通用序列總線 2.0 規格第 9.1 節中所指定用於 USB 裝置電源狀態的 Windows 驅動程式模型 (WDM) 裝置狀態。
USB 裝置電源狀態(如通用序列總線 2.0 規格的第 9.1 節所指定)可以分成三個一般類別:
- 已連結:裝置已連接,但未完全供電。
- 電源:裝置處於其中一個完整電源狀態:預設、位址或已設定。
- 已暫停:裝置是閑置狀態,且在低電源上運作。
WDM 電源模型中定義的裝置電源狀態與 USB 標準中定義的裝置電源狀態之間沒有直接關聯。 例如,暫停和閑置的字詞在USB規格中具有特定意義;不過,WDM 電源模型中通常會以不同的方式使用這些詞彙。 Windows 用戶端驅動程式可以將 USB 裝置置於暫停狀態。 如需詳細資訊,請參閱 USB選擇性暫停。 當客戶端驅動程式準備好暫停其裝置時,它會指示總線驅動程式將其閑置。 如需閑置要求的討論,請參閱 USB選擇性暫停。
WDM 模型中的裝置電源狀態摘要如下:
- D0 - 工作狀態。 裝置已完全供電。
- D1/D2 - 中繼睡眠狀態。 這些狀態可讓裝置攜帶遠端喚醒。
- D3 - 最深的睡眠狀態。 處於狀態 D3 的裝置無法進行遠端喚醒。
如需WDM電源模型中裝置電源狀態的完整討論,請參閱 裝置電源狀態。
WDM 電源模型會使用裝置的武裝一詞進行遠端喚醒。 Arming 是一種軟體作業,通常但不一定會導致在USB裝置上啟用遠端喚醒功能的硬體作業。 支援裝置進行遠端喚醒的 WDM 軟體作業是等候喚醒 IRP(IRP_MN_WAIT_WAKE)。 如需此 IRP 的詳細資訊,請參閱 支援具有喚醒功能的裝置。
如需此軟體作業與啟用USB遠端喚醒功能之間關聯性的說明,請參閱 USB裝置的遠端喚醒。
本節包含下列子區段:
變更非公司裝置的電源狀態
USB 裝置的電源原則管理員負責設定裝置的電源狀態。 電源原則管理員會發出 WDM 電源 (IRP_MN_SET_POWER) IRP 來設定電源狀態。 如需電源原則管理員的詳細資訊,請參閱 Power Policy Ownership。
總線驅動程式所採取的動作取決於電源原則管理員要求的裝置電源等級。 下列列出總線驅動程式針對每個集合電源要求層級採取的動作:
D0
總線驅動程式會執行下列工作:
- 確定所有上游 USB 中樞都已提供電源,並準備好接收要求。
- 如果裝置的 USB 埠暫停,請清除PORT_SUSPEND功能以繼續埠。
- 如果裝置處於擱置狀態,請使用 STATUS_SUCCESS 完成裝置的閑置 IRP。
- 如果裝置是武裝的,請解除裝置的遠端喚醒。
D1/D2
總線驅動程式會執行下列工作:
- 如果等待喚醒 IRP (IRP_MN_WAIT_WAKE) 擱置中,則為裝置提供遠端喚醒。
- 藉由設定PORT_SUSPEND功能來暫停裝置的 USB 埠。
D3
總線驅動程式會執行下列工作:
- 藉由設定PORT_SUSPEND功能來暫停裝置的 USB 埠。
- 如果裝置處於擱置狀態,請使用STATUS_POWER_STATE_INVALID完成裝置的等候喚醒 IRP。
- 如果裝置處於擱置狀態,請使用 STATUS_POWER_STATE_INVALID 完成裝置的閑置 IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION)。
變更複合裝置的電源狀態
複合裝置上介面的用戶端驅動程式必須與裝置上其他介面的用戶端驅動程式共用複合裝置的電源狀態。 因此,介面的用戶端驅動程式無法讓複合裝置進入較低的電源狀態,而不會影響裝置上的其他介面。 當介面的用戶端驅動程式傳送IRP_MN_SET_POWER要求時,USB 泛型父驅動程式 (Usbccgp.sys) 會採取下列動作。
D0
總線驅動程式會執行下列工作:
- 確定所有上游 USB 中樞都已提供電源,並準備好接收要求。
- 如果裝置的 USB 埠暫停,請清除PORT_SUSPEND功能以繼續埠。
- 如果客戶端驅動程式處於擱置狀態,請使用 STATUS_SUCCESS完成用戶端驅動程序的閑置 IRP。
D1/D2
公共汽車司機沒有採取任何動作。
D3
總線驅動程式會執行下列工作:
- 如果客戶端驅動程式擱置中,請使用 STATUS_POWER_STATE_INVALID 完成用戶端驅動程式的等候喚醒 IRP (IRP_MN_WAIT_WAKE)。
- 如果客戶端驅動程式處於擱置狀態,請使用 STATUS_POWER_STATE_INVALID 完成用戶端驅動程序的閑置 IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION)。
當下列其中一個條件成立時,一般父驅動程式會暫停裝置的USB埠:
- 系統正在轉換為較低的電源狀態。
- 複合裝置上所有函式的用戶端驅動程式起始選擇性暫停。