筆記本有很多臺式機沒有的有趣功能:合上蓋子帶上就走的便利性,睡眠時神秘的呼吸燈,漂亮的鍵盤燈等等。這些功能很多都可以在電腦關機的時候還在起作用,那麼是誰在控制他們呢?肯定不是CPU,這也讓Windows等作業系統失去了執行的土壤,他們也可以被排除。這個隱形的管家就是EC。
幾乎所有的筆記本的主板上都一個小傢伙:EC(Embed Controller),它是一個16位的小晶片,它與伺服器中的BMC類似,掌控筆記本電腦的方方面面。它最早脫胎於筆記本的鍵盤控制器,現在筆記本上諸多特色功能,背後都有它的身影。充電指示燈為什麼會亮?EC在合適的時間讓它亮;風扇為什麼狂轉?EC覺得你的CPU太熱了;各種功能鍵和上面的小燈也是它的功勞。甚至關機後EC還在不知疲倦的工作,它的特色功能也是筆記本廠商要發力的重點。
市面上有多種EC控制器,有ENE、ITE、Nuvoton和SMSC等玩家。它一般被焊接在筆記本主板上:
聯想Y700 EC的位置在左下角
它有自己的固件(firmware),但主板廠商一般叫這個固件EC BIOS,有點讓人困惑。於此對應,筆記本主板的原理圖是中間一般至少有一到兩頁的EC篇章:
一個簡陋的例子
我在參考資料1放了ENE的一款EC控制器晶片手冊,對細節感興趣的同學可以參考閱讀一下。
EC和BIOS的合作十分緊密。EC通過BIOS的ACPI表將它所需要報告的信息和方法報告給作業系統,並與之交互。
一個典型的信息交互通道是這樣:
它在ACPI table中的表現就是:
Device (EC0) {
Name (_HID, EISAID(「PNP0C09」))
Method (_CRS) { … }
Name (_GPE, 0 )
Method(_Q06) { … }
Method(_Q07) { … }
Method(_Q08) { … }
Method(_Q0A) { … } // EC uses GPE0
// Adapter event
// Thermal event
// Battery event
// LID event
從這個例子中看到,電池報警、AC電源插入、溫度傳感器報告和LID(筆記本蓋子)信息,先報告給EC不同的Q裡,EC再接入ACPI的GPE,GPE的觸發會產生SCI,這時候作業系統就知道了。一個Event產生,作業系統在收到SCI後,會檢查GPE,看是誰觸發了事件;在發現是GP_STS0後,就知道是EC產生的時間,接著會去檢查EC的Q0x,看看具體是EC的哪個管腳引發的,按圖索驥,最終發現Event的產生方,而對該消息作出相應處理。
看起來似乎相當難懂!好吧,我們看個case study。
1.筆記本合上,EC觸發GPE。OS收到GPE,查看GP_STS,發現是GPE0觸發,知道是EC導致。訪問EC得知是Q0A。通過_LID的關鍵字和PNP知道是蓋子信息,知道是蓋子合上了。
AC插上,開啟切換電源策略也是EC觸發。甚至有的筆記本,AC插上旁邊的小LED燈都是EC控制。
EC在筆記本電腦中如此重要,廠商為了做出自己不同的產品策略,開發花哨的功能,在EC上頻頻發力。EC不愧是筆記本中的隱形管家!
[1]: ENE datasheet
https://reservice.pro/upload/Datasheets/kb9012qf.pdf