裝置電源狀態 D1、D2 和 D3 是裝置低電源狀態。 從 Windows 8 開始,D3 分為兩個子狀態, D3hot 和 D3cold。
D1 和 D2 是中間低功耗狀態。 許多類別的裝置未定義這些狀態。 所有裝置都必須定義 D3hot。
下列各節說明 D1、D2 和 D3:
裝置電源狀態 D1
裝置電源狀態 D1 是功率最高的裝置低電源狀態。 其具有下列特性:
耗電量
消耗小於 D0 狀態,但大於或等於 D2 狀態。 通常,D1 是時鐘門控狀態,在這種狀態下,裝置接收的電力足夠保存裝置的硬體狀態。 一般而言,支援 D1 之匯流排或裝置類別的規格會更詳細地描述此狀態。
裝置內容
一般而言,裝置內容會由硬體保留,而且不需要由驅動程式還原。 支援 D1 的匯流排或裝置類別規格通常會提供保留此上下文的詳細要求。
裝置驅動程式行為
驅動程式必須儲存並還原或重新初始化硬體遺失的任何內容。 不過,通常而言,裝置在進入此狀態時幾乎不會遺失內容。
還原時間
一般而言,將裝置從 D1 還原至 D0 所需的時間應該小於從 D2 還原至 D0。
喚醒功能
D1 中的裝置可能能夠要求喚醒。 若要提供此狀態是否可以支援喚醒訊號的相關資訊,匯流排驅動程式會使用 DEVICE_CAPABILITIES 結構,或者,從 Windows 8 開始,使用 GUID_D3COLD_SUPPORT_INTERFACE 驅動程式介面。
一般而言,使用 D1 的裝置會採用此方法,因為從此狀態恢復不需要驅動程式還原裝置的完整硬體上下文。 若要將使用者對延遲的感知降到最低,將裝置從 D1 還原至 D0 應該會產生盡可能少的延遲。 最大限度地減少狀態轉換中的延遲比降低功耗更重要。
裝置電源狀態 D2
D2 是中間設備低功耗狀態,具有以下特性:
耗電量
消耗小於或等於 D1 狀態下的消耗。
裝置內容
一般而言,大部分的裝置內容都會由硬體遺失。 通常,此狀態會保留用於標示喚醒事件的內容部分。 支援 D2 的匯流排或裝置類別的規格通常會提供保留此情境的詳細需求。
裝置驅動程式行為
裝置驅動程式必須儲存並還原或重新初始化硬體遺失的任何內容。 一般裝置在進入 D2 時會遺失大部分內容。
還原時間
將裝置從 D2 還原至 D0 所花費的時間至少與將裝置從 D1 還原至 D0 的時間相同。 具有大型畫面緩衝區的圖形介面卡是裝置的範例,其在從 D2 轉換至 D0 之後,具有大量硬體內容要還原。 對於這類裝置,從 D2 還原的時間可能遠大於從 D1 還原的時間。
喚醒功能
D2 中的裝置可能能夠要求喚醒。 若要提供此狀態是否可以支援喚醒訊號的相關資訊,匯流排驅動程式會使用 DEVICE_CAPABILITIES 結構,或者,從 Windows 8 開始,使用 GUID_D3COLD_SUPPORT_INTERFACE 驅動程式介面。
一般而言,支援 D2 的驅動程式會這樣做,因為其裝置無法支援從 D3 喚醒。 對於這些裝置,D2 狀態下的耗電量會降至裝置可以回應喚醒訊號的最低層級。 與為了減少使用者感知到的延遲而實作的 D1 狀態相反,實作 D2 狀態的目標是節省電力。 因此,從 D2 到 D0 的還原時間通常超過從 D1 到 D0 的時間。 例如,在 D2 狀態下,匯流排上的電源減少可能會導致裝置關閉其某些功能,因此需要額外的時間來重新啟動和還原裝置。
許多類別的裝置未定義此狀態。
裝置電源狀態 D3
D3 是功率最低的裝置,處於低功率狀態。 所有裝置都必須支援此狀態。
從 Windows 8 開始,作業系統將 D3 細分為兩個獨立且不同的子狀態,D3hot 和 D3cold。 舊版 Windows 會定義 D3 狀態,但不會定義 D3hot 和 D3cold 子狀態。 不過, PCI 匯流排電源管理介面規格 的所有版本都會定義個別的 D3hot 和 D3cold 子狀態,而 進階組態和電源介面規格 的版本 4 和更新版本會定義 D3hot 和 D3cold 子狀態。
雖然 Windows 8 之前的 Windows 版本未明確定義 D3 的 D3hot 和 D3cold 子狀態,但這些子狀態隱含地存在於這些舊版 Windows 中。 如果裝置明確處於 D3 狀態,且電腦處於 S0 系統電源狀態,則裝置會隱含地處於 D3hot 子狀態。 在 D3hot 中,裝置連接到電源(雖然裝置可能被設定為消耗低電流),並且可以偵測到匯流排上裝置的存在。 如果裝置明確處於 D3 狀態,且電腦處於低電源 Sx 狀態 (S0 以外的狀態) ,則裝置會隱含地處於 D3cold 子狀態。 在此隱含的 D3cold 子狀態中,裝置可能會收到涓流電流,但裝置和電腦會有效地關閉,直到發生喚醒事件為止。
從 Windows 8 開始,裝置可以進入和離開 D3cold 子狀態,而電腦仍處於 S0 狀態。 為了支援這項新行為,D3hot 和 D3cold 必須明確定義為 D3 的不同子狀態。
D3hot 是裝置可以直接從 D0 進入的唯一 D3 子狀態。 裝置會在裝置驅動程式的軟體控制下,從 D0 轉換成 D3hot。 在 D3hot 狀態下,裝置可以被偵測到於其連接的匯流排上。 當裝置處於 D3hot 子狀態時,匯流排必須保持在 D0 狀態。 從 D3hot 中,裝置可以返回 D0 或進入 D3cold。 D3cold 只能從 D3hot 輸入。
D3cold 是 D3 的子狀態,其中裝置以實體方式連線至匯流排,但無法偵測到匯流排上裝置的存在 (也就是說,直到裝置再次開啟為止)。 在 D3cold 中,下列其中一項或兩項都成立:
- 該設備所連接的匯流排處於低功耗狀態。
- 裝置處於低電源狀態,當匯流排驅動程式嘗試偵測其在匯流排上的存在時,裝置不會回應。
從 D3hot 轉換至 D3cold 發生於在沒有裝置驅動程式互動的情況下。 相反地,裝置驅動程式會在起始從 D0 轉換至 D3hot 之前,指出是否已準備好進行 D3cold 轉換。 隨後,從 D3hot 到 D3cold 的轉換可能會發生,也可能不會發生,具體取決於是否所有條件都適合啟用此轉換。
兩個這樣的條件是,使用相同電源的所有裝置都處於 D3hot 中,並已準備好進行 D3cold 轉換。 當這些裝置中的最後一個進入 D3hot 時,父匯流排驅動程式或 ACPI 篩選驅動程式會關閉這些裝置的電源,也就是說裝置進入 D3cold。
處於 D3cold 的裝置只能透過輸入 D0 來離開此子狀態。 沒有從 D3cold 到 D3hot 的直接轉換。
當電腦處於 S0 狀態,且裝置進入 D3hot 子狀態時,裝置驅動程式通常無法事先判斷裝置的下一個轉換是 D3cold 還是 D0。 一個例外是當計算機準備離開 S0 狀態時。 在此情況下,下一個轉換是 D3cold。
下列章節將說明 D3hot 及 D3cold:
如需詳細資訊,請參閱 在驅動程序中支援 D3cold。
D3hot 子狀態
D3hot具有以下特點:
耗電量 電源主要從設備中移除,但不會從整個電腦中移除。 處於 S0 狀態的電腦可能會繼續在此狀態下執行,或可能準備從 S0 移至低電源 Sx 狀態。
裝置內容
裝置驅動程式全權負責還原裝置內容。 驅動程式必須保留,然後還原所有裝置內容,或必須在轉換至 D0 狀態時重新初始化裝置。
裝置驅動程式行為
裝置驅動程式全權負責還原裝置內容,通常是從最新的工作設定。
還原時間
除了 D3cold 之外,還原時間總計是任何裝置電源狀態中最高的,但通常不會比 D2 的還原時間大多少。
喚醒功能
D3hot 子狀態中的裝置可能能要求喚醒,也可能無法要求喚醒。 為了提供此子狀態是否能夠支援喚醒信號的資訊,匯流排驅動程式會使用 DEVICE_CAPABILITIES 結構,或者在 Windows 8 及之後,使用 GUID_D3COLD_SUPPORT_INTERFACE 驅動程式介面。
在 D3hot 中,只有最小的涓流電流可用。 驅動程式和硬體必須為斷電做好準備。 支援 D3hot 的匯流排規格通常會針對可在此狀態下使用的電源提供詳細需求。 若要將裝置恢復到工作狀態,裝置的驅動程式必須能夠還原和重新初始化裝置,而不需要依賴 BIOS 來執行選項 ROM 中可能可供裝置使用的任何程式代碼。
所有類別的裝置都會定義 D3hot 子狀態。
D3cold 子狀態
D3cold具有以下特點:
耗電量
電源已從設備中完全移除,可能從整個系統中移除。 該設備可能能夠從邊帶源汲取電流,具體取決於其結構。
裝置內容
裝置驅動程式全權負責還原裝置內容。 驅動程式必須保留並還原裝置內容,或必須在轉換至 D0 狀態時重新初始化裝置。
裝置驅動程式行為
裝置驅動程式全權負責還原裝置內容,通常是從最新的工作設定。
還原時間
還原時間總計是任何裝置電源狀態中最高的。
喚醒功能
在 D3cold 子狀態下,裝置可能能夠觸發喚醒訊號來喚醒睡眠電腦。 這項功能會在 DEVICE_CAPABILITIES 結構中報告,並從 Windows 8 開始,由 GUID_D3COLD_SUPPORT_INTERFACE 驅動程式介面中的 GetIdleWakeInfo 常式報告。 訊號喚醒電腦之後,裝置驅動程式會起始裝置從 D3cold 轉換至 D0。 如需詳細資訊,請參閱下列備註。
從 Windows 8 開始,處於 D3cold 子狀態的裝置可能能夠觸發喚醒信號至處於 S0 系統電源狀態的電腦。 這項功能是由 GetIdleWakeInfo 常式報告。 DEVICE_CAPABILITIES結構不包含此功能的相關資訊。 喚醒訊號到達之後,裝置驅動程式會起始裝置從 D3cold 轉換至 D0。 在這種情況下,當訊號到達時,電腦是喚醒的,只需要設備喚醒。
在許多現有的硬體平臺中,處於低功率 Dx 狀態的裝置可以觸發喚醒訊號來喚醒睡眠電腦。 不過,如果電腦在 S0 狀態下執行,同一裝置可能無法觸發喚醒訊號。 因此,當電腦處於 S0 狀態時,此裝置的驅動程式不得起始裝置從 D0 轉換至低電源 Dx 狀態。 否則,裝置離開 D0 之後,直到電腦離開 S0 狀態為止,才無法使用。 只有在電腦準備離開 S0 狀態時,此裝置才應該離開 D0 狀態。
如果處於低電源 Dx 狀態的裝置可以觸發喚醒訊號至以 S0 狀態執行的電腦,則當電腦處於 S0 時,裝置不需要保持在 D0 中。 如果電腦位於 S0 中,而裝置位於 D0 中,但處於閒置狀態,驅動程式可以設定裝置以觸發喚醒信號,然後將裝置從 D0 轉換至 Dx 低功耗狀態。
某些裝置類別會定義 D3cold 子狀態。
如需詳細資訊,請參閱 在驅動程序中支援 D3cold。