王再躍 顧長利 王娟
(安徽合肥聯(lián)寶信息技術(shù)有限公司 安徽省合肥市 230091)
計(jì)算機(jī)在出現(xiàn)的前幾十年,研究的重點(diǎn)一直是如何提高機(jī)器性能,而不是在降低功耗上。便攜式筆記本被發(fā)明后,業(yè)界才開始考慮如何省電以延長電池的供電時間。由Intel,Microsoft,Toshiba等公司共同制定的提供操作系統(tǒng)應(yīng)用程序管理電源接口的spec-ACPI 中規(guī)定了各種省電狀態(tài),就系統(tǒng)而言有S0,S1..S5 等,對于CPU 來說有C0,C1..C10,對于各種外部設(shè)備則有D0,D1,D2,D3。當(dāng)筆記本暫時不使用時,用戶可以通過在系統(tǒng)下發(fā)送睡眠的指令,也可以直接合上蓋子,進(jìn)入S3 狀態(tài)。需要使用時只需要輕觸鼠標(biāo)或者打開上蓋,一秒鐘以后就進(jìn)入操作系統(tǒng)。但是,隨著智能手機(jī)的普及,人們對于電子設(shè)備即拿即用,隨時響應(yīng)的要求越來越高。計(jì)算機(jī)在傳統(tǒng)的睡眠模式S3 時所有的通訊設(shè)備都被關(guān)閉,用戶無法收到即時的通訊信息和郵件,不能夠滿足人們對于實(shí)時性,低功耗的需求,現(xiàn)代待機(jī)(ModernStandby)的誕生解決了這一困擾。Microsoft 在Win10 引入了ModernStandby 的電源模式,設(shè)備可以立即使能或者關(guān)閉,以極低的功耗模式在后臺運(yùn)行,為用戶提供了更快的開/關(guān)體驗(yàn),同時也擴(kuò)展了對硬件的支持。對于臺式機(jī)系統(tǒng)來說,是從外部到內(nèi)部一步一步進(jìn)入低功耗的狀態(tài)。在這個過程中,如果有任何設(shè)備拒絕進(jìn)入這一狀態(tài),整個鏈路就會中斷,回到普通的運(yùn)行模式。比如一個接有USB 設(shè)備的邊緣計(jì)算微小化主機(jī)系統(tǒng),如果有任何一個外設(shè)沒有能夠進(jìn)入D3 低功耗狀態(tài),那么從SoC 到USBController 都會在帶電的狀態(tài),無法進(jìn)入現(xiàn)代待機(jī)。除了硬件之外,軟件也需要配合,不能有任何的軟件拒絕進(jìn)入這一狀態(tài),如果要讓這個過程順利完成,僅有操作系和CPU 的支持是不夠的,現(xiàn)代待機(jī)是一個系統(tǒng)的工程,要求主板,外圍設(shè)備和BIOS都支持這一模式,并且還要對各種系統(tǒng)配置進(jìn)行參數(shù)的調(diào)試才能順利進(jìn)入。正因如此,這一電源模式對計(jì)算機(jī)的硬件和軟件的要求都非常高,實(shí)現(xiàn)起來也很復(fù)雜,也是造成該功能暫未普及的原因之一,而臺式機(jī)由于其可擴(kuò)展性強(qiáng),支持的外部設(shè)備眾多,留給用戶自己DIY 的空間也很大,對現(xiàn)代待機(jī)的支持就更加困難。傳統(tǒng)的S3 睡眠狀態(tài)是將當(dāng)前的系統(tǒng)狀態(tài)和內(nèi)容全部存到Memory 中,僅有內(nèi)存帶電,其他所有的設(shè)備都停止供電,風(fēng)扇也會停轉(zhuǎn),對于用戶和開發(fā)人員來說可以直觀感知到的是睡眠指示燈的閃爍,對于支持ModernStandby 的系統(tǒng),如何判斷系統(tǒng)已經(jīng)進(jìn)入了現(xiàn)代待機(jī)的狀態(tài),讓用戶體會到它與傳統(tǒng)S3 睡眠的不同,給研發(fā)工程師們帶來了挑戰(zhàn)。
傳統(tǒng)臺式機(jī)實(shí)現(xiàn)睡眠的LED 燈閃爍一般是通過板端的超級輸入輸出芯片SIO 來完成,當(dāng)用戶在系統(tǒng)下通過控制選項(xiàng)選擇要讓機(jī)器進(jìn)入睡眠狀態(tài)或者手動點(diǎn)擊睡眠按鈕時,會觸發(fā)系統(tǒng)管理中斷信號進(jìn)而調(diào)用相應(yīng)的中斷處理函數(shù)來實(shí)現(xiàn)LED 燈的閃爍。SIO 對于LED 燈的控制寄存器定義如下,只需要在屏幕熄滅時填寫對應(yīng)的寄存器地址來控制bit 位的使能即可。如圖1所示。
圖1
工程師們需要思考如何利用燈效讓用戶區(qū)別現(xiàn)代待機(jī)和傳統(tǒng)睡眠,廣泛應(yīng)用于手機(jī)等便攜設(shè)備的呼吸燈是個不錯的選擇。呼吸燈是指燈光在控制器的作用下完成由亮到暗的逐漸變化,給人的感覺像在呼吸,可以用來達(dá)到提醒用戶的功能。本文提供的方法可以將該功能應(yīng)用在支持現(xiàn)代待機(jī)的臺式機(jī)上,屬于業(yè)界首創(chuàng),也是第一次將現(xiàn)代待機(jī)的功能應(yīng)用于臺式機(jī)上。開發(fā)工程師和用戶都可以通過呼吸燈的變化直觀的了解系統(tǒng)是否有進(jìn)入到現(xiàn)代待機(jī)的狀態(tài),該方法簡單易用,效果明顯,可以推廣到筆記本和臺式機(jī)等支持現(xiàn)代待機(jī)的平臺上。
控制LED 燈的亮度主要有兩種方法,一種是給LED 燈上施加模擬信號(可以串接可調(diào)電阻或DAC 輸出模擬信號),通過改變流經(jīng)LED 上的電流控制LED 燈的亮度;另一種是使用PWM,給LED 燈上施加數(shù)字信號,通過調(diào)整數(shù)字信號的占空比(調(diào)整占空比= 調(diào)整有效值)來控制。這里我們的呼吸燈就是采用第二種PWM的方法。在邊緣計(jì)算微小化臺式機(jī)主板上我們利用SIO 芯片控制呼吸燈的占空比來實(shí)現(xiàn),可以通過SIO 芯片開放出來的寄存器來調(diào)節(jié)不同的占空比實(shí)現(xiàn)燈的明亮變化。
圖2 是完整的一次呼吸過程中Duty 的變化值,橫坐標(biāo)是時間的變化,縱坐標(biāo)代表著占空比的變化,B8h 是指延長最暗的時間,是根據(jù)人眼的視覺暫留來設(shè)定的,B9h 對應(yīng)的每一格亮度占用的時長,單位是以10ms 來計(jì)算,亮度的變化總共有40 格,從0x90-0xB7。通過這一設(shè)定可以很好的實(shí)現(xiàn)呼吸的效果。
圖2
圖3
實(shí)現(xiàn)燈效控制的方法已經(jīng)找到,但是對于終端用戶和系統(tǒng)工程師來說,判斷是否進(jìn)入現(xiàn)代待機(jī)狀態(tài)的標(biāo)準(zhǔn)是不一樣的,如背景部分所述,現(xiàn)代待機(jī)是一個系統(tǒng)的工程,主板上任何設(shè)備的功耗狀態(tài)都會影響到系統(tǒng)最終的待機(jī)深度。對于終端使用的用戶來說最直觀的判斷機(jī)器是否進(jìn)入現(xiàn)代待機(jī)的方法是通過屏幕的亮滅,可以以此作為觸發(fā)LED 燈呼吸的條件,利用SIO 芯片來實(shí)現(xiàn)LED 燈效的控制,要求屏幕熄滅和點(diǎn)亮?xí)rSIO 做出相應(yīng)動作,但是在臺式機(jī)上實(shí)現(xiàn)較于筆記本而言更有難度。使用臺式機(jī)的用戶可以外接各種顯示接口的顯示器,很難掌握用戶對于外接顯示器的使用,SIO 無法像在筆記本電腦上控制內(nèi)置屏一樣掌握屏幕的亮滅狀態(tài)。通過綜合分析臺式機(jī)上系統(tǒng)的圖形顯示驅(qū)動和底層軟件的交互,我們發(fā)現(xiàn)可以利用BIOS 來通知SIO 對LED 進(jìn)行控制。在Intel 平臺上,當(dāng)屏幕熄滅時,系統(tǒng)自帶的inbox 驅(qū)動會通知到ACPI 下的ASLcode,只需要在這段代碼中添加對SIO 的通知即可。
對于在項(xiàng)目開發(fā)階段的工程師來說,這一判斷方法并不適用,硬件工程師需要掌握各個設(shè)備的功耗狀態(tài)以了解其是否真正實(shí)現(xiàn)了深度待機(jī),單純通過屏幕的亮滅遠(yuǎn)遠(yuǎn)不夠。下圖是在支持現(xiàn)代待機(jī)的設(shè)備上調(diào)試的日志,顯示了板端的哪些設(shè)備影響了現(xiàn)代待機(jī)的深度,從左側(cè)的設(shè)備列表上可以看到網(wǎng)卡,顯卡的驅(qū)動,USB 的controller 都有影響到這一待機(jī)狀態(tài)的進(jìn)入。
因此,硬件工程師需要實(shí)際的量測#SLP_S0 的信號,如果其狀態(tài)為low 并且維持5s 以上,才認(rèn)為系統(tǒng)進(jìn)入了現(xiàn)代待機(jī)的模式,進(jìn)而去使能呼吸燈的燈效,通過這一方法的實(shí)現(xiàn)可以幫助系統(tǒng)工程師準(zhǔn)確的掌握板端設(shè)備的現(xiàn)代待機(jī)狀態(tài),防止出現(xiàn)誤判的場景。
以上是針對不同的使用者提出的現(xiàn)代待機(jī)場景的呼吸燈解決方案,可以成功的在邊緣計(jì)算微小化主機(jī)上實(shí)現(xiàn)深度待機(jī)燈效的控制,并且區(qū)別于傳統(tǒng)的睡眠模式給用戶新的使用體驗(yàn);另一方面也考慮到了在開發(fā)過程中工程師對于設(shè)備功耗情況的調(diào)試,對于判斷系統(tǒng)是否進(jìn)入現(xiàn)代待機(jī)模式提供了新的思路。隨著現(xiàn)代待機(jī)技術(shù)的普及,該方案也可以移植到其他使用該功能的設(shè)備上。