USB 2.0介面史上省電大戰略

2004-02-03
由於USB介面具備了容易使用與方便性,外接式裝置的使用,已經成為資訊產品文化中的一環。Sony的新一代遊戲機PSP,確定會納入USB 2.0。而3GIO的兄弟規範「Mini PCI Express」以及PCMCIA的接棒使者「NEWCARD」,USB 2.0更是必備的要素。爾後,沒有使用USB周邊的機率很小很小。
由於USB介面具備了容易使用與方便性,外接式裝置的使用,已經成為資訊產品文化中的一環。Sony的新一代遊戲機PSP,確定會納入USB 2.0。而3GIO的兄弟規範「Mini PCI Express」以及PCMCIA的接棒使者「NEWCARD」,USB 2.0更是必備的要素。爾後,沒有使用USB周邊的機率很小很小。  

尤其,所謂「游牧族」的使用人口,隨著筆記型電腦、個人數位助理的風行,日漸蔓延。馬路上,大家都在默默地進行「釋放無線動力」的場景。但是,好用科技的身後,也有難以述說的難題。畢竟,這些可攜帶式的裝置,電池的使用絕對是跑不掉。如何讓裝置可以更節省地消耗電力,加長電池的使用時間,是工程人員日暮思索的話題。當然,更是消費者的美夢。  

晶片組(Chipset)對於USB 2.0連接埠的支援數目,少則不是6個就是8個,如果再加上1394介面,整個運算平台的輸出入介面數量,可說是不少。  

而筆記型電腦有機會是所有資訊裝置整合度最高的產品,因此以其為範例來探索這個人人關心的課題。  

用一把放大鏡來看,筆記型電腦內建、整合的周邊還頗為可觀呢?好比說,視訊相機(Video Camera)、記憶卡的連接、無線通信裝置的使用等等,往往都是仰賴USB介面。USB 2.0的480Mbps高度頻寬,讓很多的開發者都想將以往產品移植到USB介面上,應用空間無遠弗屆。基於這個緣故,晶片組與作業系統大頭頭與小嘍囉,無不傾盡全力,找出解決問題的好辦法。  

首先,當然必須對於電力耗費的狀況,要有初步的認知與瞭解。若是從定性與定量上的衡量來論述,要涉及的層面不外乎有底下4個範疇:  

‧系統電力消費的逐項分析。  

‧ACPI省電技術概念的掌握。  

‧USB Selective Suspend的概念。  

‧視窗XP對於USB Selective Suspend的支援。  

先從第1個項目來說起。系統電力消費的逐項分析,是探討省電的超基本知識。而一台可以完整運作的筆記型電腦,內部必然會包括有CPU中央處理器、晶片組 (Chipset)、硬碟、LCD液晶顯示螢幕、記憶體、可供選擇的配件選項,如無線網路、藍芽模組等,指出各個部位所用掉電力的比例。  

圖1中的PSL為「Power Supply Loss」的簡稱。相信閣下可以輕易地看穿,光是中央處理器與晶片組,兩者加起來的耗電量,差不多就佔掉整個系統電力耗費20%的水平。而USB介面,其實就是內藏於晶片組的南橋之中。因此,談USB介面的省電議題,其實是可以先專注在中央處理器與晶片組身上。  

其次來簡單描述行之有年的ACPI圖2。ACPI是「Advanced Configuration and Power Interface」的簡稱縮寫。該軟體介面是Compaq、Intel、Microsoft、Phoenix與Toshiba等公司所開發的開放性標準。該標準定義了很多種組態與電源管理(Power Management)的標準介面。其中的「G狀態」是系統電源狀態。「G0」代表系統開機,並在正常工作的狀態。而在此狀態下,英特爾藉由其處理器的架構,可以將處理器再切分成C0,C1,C2,C3,C4等細部狀態。C0是全馬力的狀態,C1//2/3/4分別是往下更為省電的狀態,也就是說C4是電源最低的狀態。同樣的思維模式,在「G0」的狀態之下,連接至平台上的周邊裝置,依然也可以切割成D0,D1,D2,D3,D4等狀態,D0也是全馬力的狀態。  

而「G1」狀態則是意味著睡眠狀態(Sleeping state),依據層次的類別,也可以切割成細部狀態。「S0」也是馬力全開,而S1,S2,S3則是代表著重所熟悉的中止或暫停狀態(Suspend state),也是節省電力的要訣。在中止狀態的情況下,處理器會停止手中的工作,將系統狀態的資訊儲存在記憶體裡頭。當系統回復(Resume)時,可以繼續正確又正常的工作。請特別留意「S4」狀態,以「休眠狀態 - Hibernation」來稱呼。其基本內涵是系統停止,並將其系統狀態的資訊儲存在硬碟裡面。由此可知,每一個不同的電源狀態,相呼應的節省電力範圍就有差異。  

站在USB介面的立場,會去關心的主要電源狀態,是匯聚在處理器之「C3/C4」狀態。畢竟,該狀態是處理器跳躍至低電力的狀態情況,可以延伸電池使用時間大約10%的效果。「C3/C4」狀態的身份是如此來規劃的。當系統處於閒置(Idle)的時候,包含輸出入介面,處理器僅需一些時間,約幾個毫秒的光景,就進入了該狀態。任何匯流排主控器(Bus Master)的運作,皆可以防止處理器跳入「C3/C4」狀態。  

而USB介面規格也定義有低電源模式。其中有一個特徵,就叫做「USB Selective Suspend」。這個機能的主要特徵是可以允許支援該項功能的裝置驅動程式(Device Driver),當裝置處於「閒置的狀態」下關閉該控制裝置。理所當然地,當裝置不再閒置時,系統可以喚醒裝置,做正常資訊傳輸。同時USB介面規格也定義有另一項低電源模式,稱之為「遠端喚醒 - Remote Wakeup」。望文生義,就是裝置可以從在「USB Selective Suspend」的狀態下,喚醒主機端USB控制器。如此的機制就可以省卻系統來喚醒裝置的動作了。  

圖3顯示乃是利用所謂的協定分析儀來抓取介面上的活動狀態,並加以解析之後再展現出來的。根據圖3,第一個傳送是藉由介面規範「Set_Feature」命令來致能、啟動裝置的遠端喚醒功能。理所當然地,裝置也必須支援該項功能才有意義。爾後,裝置進入了中止或暫停狀態(Suspend)達約26秒鐘。裝置喚醒主機,自行回復(Resume),然後會利用另一個「Clear_Feature」的USB介面命令來清除裝置的遠端喚醒功能。以圖3的解說範例而言,回復(Resume)的時間大約是在138毫秒附近。當然,這個時間數值隨著裝置的不同會有差異的數值。  

而且USB介面裝置在電源供應方面,可以採用兩種選擇。其一,是從介面上擷取電源來供應裝置用,專用術語稱做「Bus-powered」。另一種方案則是自己提供電源,以「Self-powered」來呼喚。USB介面規格中清楚地指出,一個吃介面電源供應的裝置,在中止或暫停狀態(Suspend)之下,電流最多可以耗費500μA,如果支援遠端喚醒功能的話,該電流數值最多可以耗費2.5mA。該電流限制也就解釋了為何內建於可攜帶式平台之中的裝置,幾乎都是採用自行提供電源的策略。  

從最上層的OS來俯瞰,視窗XP完全支援USB 1.1與USB 2.0,同時支援部分裝置的「USB Selective Suspend」機能。該項新的功能允許主機端控制器(Host Controller)所有的連接埠(Port)處於中止或暫停狀態之際,可以不用去做輪尋(Polling)的動作。換句話說,處理器就可以理直氣壯、安心地跳進C3/C4省電力狀態。微軟視窗XP對於USB省電力的解決之道,是藉由提供了2個驅動程式來支援USB,USB Hub(Bus)與USB Host Controller的驅動程式圖4。而且,微軟也提供了標準的API,允許客戶端寫的驅動程式,可以來支援「USB Selective Suspend以及遠端喚醒」的功能。扼要地說,視窗XP對於「USB Selective Suspend」的處理有兩大要項:之一,假設所有的HC連接埠,通通處於「USB Selective Suspend」的狀態,就會停止HC的輪尋(polling)動作。之二,允許讓OS使得處理器(Mobile Processor),跳入C3或C4的省電狀態。  

根據目前的資料顯示,最頂端的OS僅有視窗XP,對於USB介面所用的滑鼠,有支援「USB Selective Suspend」的機能。而USB介面視訊相機卻沒有支援。因此,設計HID(Human Interface Device)裝置的周邊,最好是通過微軟「HID Selective Suspend WHQL」測試,賣相會比較好。  

而已經被驗證認可的HID裝置名單,則是摘列在<windows\inf\input.inf>之中。有人戲稱為USB Selective Suspend的通關名單(Good list)。比如說,Aspire USB Mouse、Cypress USB Mouse、Genius USB Net Mouse Pro、Evolution USB Mouse-Trak by ITAC、Qtronix USB Mouse等等。  

為了確保加長電池的使用時間維持在最佳的情況,一個基本動作就是務必要確保所有的內部連接裝置,其相對應的驅動軟體皆能夠支援USB Selective Suspend的機能。可想而知,這項機能對於筆記型電腦或PDA等攜帶式裝置來說是極為重要的一個環節。原因很簡單,處理器能夠一舉躍進C3/C4狀態的大前提是所有連接在USB介面上的裝置必須處於「USB Selective Suspend」的狀態。否則,USB主機端控制器每隔一段時間必須進行IO讀取系統記體中的輪尋名單(Polling List)。若是不能夠如此,處理器最低的電力狀態也僅能走到C2的境地罷了。  

圖5是利用微軟的「Microsoft Windows XP Performance Monitor」程式,來追蹤裝置插進去之際,C3狀態時間的百分比。以此範例來說,一旦沒有支援USB Selective Suspend的裝置,插入介面之後,C3狀態時間的百分比成為0%,而且持久不會改變。除非移除、拔離這個裝置。理由如同前面所言,當裝置即使是在閒置的狀態,也不會有USB Selective Suspend發生,處理器就沒有機會進入C3狀態。至於前頭未能有100%的緣故是系統其他的動作,好比說網路等。  

反之我們來觀察有支援USB Selective Suspend的狀況,又是為何?圖6依然是利用微軟的「Microsoft Windows XP Performance Monitor」程式來追蹤裝置插進去之際,C3狀態時間的百分比。當裝置插入介面之後,C3狀態時間的百分比成為0%,但是其相呼應的驅動軟體,查知裝置處於閒置狀態一段時間,就讓裝置進入USB Selective Suspend狀態。C3狀態時間的百分比就躍升到100%,直到裝置有活動喚醒主機。  

這裡頭有一點小小的玄機存在,以上所舉範例所提及的「閒置狀態」,其確實定義或含意有可能會因為裝置的差異,系統對其解讀有所不同。以滑鼠而言,可以定義成一段時間沒有移動任何指標時的情況。而對於視訊相機來說,當鏡頭關閉時也可以視為在閒置狀態。「閒置狀態」的定義與偵測方式,隨著裝置類別,要花點心思多加思量。  

一旦USB裝置的驅動軟體認為裝置已經是落在閒置狀態的情況下,就會藉由「IoCallDriver」向HUB HUB驅動軟體發出「閒置告知 - Idle Notification」的IRP(I/O Request Packet)。然後,HUB HUB驅動軟體才會將裝置驅動軟體對應之周邊,鞭策進入「USB Selective Suspend」狀態。這個歷程裡頭其實可能又有些小動作,裝置驅動軟體可以透過命令將周邊導入低電力模式之下。至於裝置是否支援「遠端喚醒 - Remote Wakeup」也是裡頭要處理的另外一件事情。細節流程大致如下。具體來說,「閒置告知 - Idle Notification」的處理有4大步驟圖7:  

‧驅動軟體必須配置記憶體空間以及傳遞的起始參數。  

‧驅動軟體會配置IRP(I/O Request Packet)並初始化。  

‧遞送IRP至USBHUB驅動程式。  

‧「Idle Notification Completion Routine」會釋放剛才準備的記憶體空間資源。  

而USB HUB驅動程式在處理裝置進入暫停的過程之中,會呼叫驅動軟體「Idle Notification Callback」圖8,而該常式也會執行幾樣動作:  

‧準備裝置進入低電力模式。  

‧呈遞WaitWake IRP。  

‧為低電力狀態(D1/D2/D3)請求「Power IRP」。  

‧等待直至Power IRP執行完成。  

而裝置進入電源中斷,箇中也引含了兩件事情。其一,視窗「WDM Power Manager」將送出「Power IRP」到USB裝置驅動程式。其二,USB裝置驅動程式中的「WDM Power Handler」就是負責處理從D0狀態進入D1~D3狀態的一些瑣事。  

如果裝置本身支援有遠端喚醒(Remote Wakeup)的機能,USB裝置驅動程式會傳達一個「WaitWake IRP」到「USB Hub Driver」。當裝置回復(Resume)過來,「USB Hub Driver」完成「WaitWake IRP」,告知裝置驅動程式此種情況,裝置驅動程式自然要被組態在全馬力的狀況下圖9。  

裝置喚醒,一言以蔽之就是裝置電源開啟(Power Up),其細節的層次,也有4道過程。  

‧完成「WaitWake IRP」,回到「WakeCallback」 。  

‧從「WakeCallback」回來,並請求D0電源狀態。  

‧視窗之「WDM Power Manager」將送出「Set Power IRP」至USB裝置驅動軟體。  

‧USB裝置驅動軟體的「WDM Power Handler」就是負責處理從D1~D3狀態進入D0狀態的事情處理。  

畢竟作業系統(OS)每隔一段時間就會去檢視處理器的運作情況圖10,微軟的視窗是10ms左右,只要情況許可的條件之下,常常會將處理器切換至低電力的狀態,也就是「C State」是也。在「C3」狀態下,處理器的快取記憶體是難以存取的。而USB裝置插入之際,主機端控制器(HC-Host Controller)週期性地讀取HC命令。USB 1.1的UHCI是1ms,USB 2.0的EHCI則是每一個125us,該主機端控制器即是從快取記憶體中拿取命令。但是,拿取快取記憶體中命令必須被監視。  

ACPI中對於攜帶式電腦用處理器的C3/C4狀態是如此規劃:  

‧C3狀態:Deep Sleep clock control state  

‧C4狀態:Deeper Sleep clock control state  

一路執筆至此,相信大家心中多少有數才對,由於筆記型電腦之類的裝置通常整合內建了不少機能的東西,比如說記憶卡讀寫器、無線網路或無線通信、Smart card等安全性裝置、視訊相機等,很明顯地,「USB Selective Suspend」的運用圖11即是朝向該類可攜帶式裝置而來。而涉及的技術層次跨及軟硬體雙方。如果,閣下看到此地依然搞不清楚「USB Selective Suspend」究竟是什麼?唯有使用「Port Suspend」這個名詞來闡釋。USB裝置驅動程式可以透過命令使用「Port Suspend」來停止連結。同時,對於外部連接裝置來說,也有一點要注意。若是其中止或暫停狀態下會吃掉2.5mA以上的電流,必須採行自行提供電源的方式。  

文章結束之前,也要責任義務向閣下說一件事情,此篇文章的完成,很多地方是參考2003年IDF的簡報資料與英特爾公司網站上可以下載的技術文獻「Power saving of using USB Selective Suspend Support White paper」,其版本是「Version 0.6, May 20, 2003」。爾後,會有怎樣的變更,我也不知道。反正三不五時多留意一下官方網站的更新訊息,也算是一種因應不確定年代的對策。微軟的Microsoft Windows XP DDK,也要多參考。  

對於裝置的設計工程來說,如何來善用視窗XP已經提供的資源,讓自己親手造出的寶貝可以支援「USB Selective Suspend」以及「遠端喚醒-Remote Wakeup」。當然,裝置驅動軟體的發展是必要的。  

(作者E-Mail:nt_chen.tw@yahoo.com.tw)  

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!