笔记本电脑中的隐形管家:EC
笔记本有很多台式机没有的有趣功能:合上盖子带上就走的便利性,睡眠时神秘的呼吸灯,漂亮的键盘灯等等。这些功能很多都可以在电脑关机的时候还在起作用,那么是谁在控制他们呢?肯定不是CPU,这也让Windows等操作系统失去了执行的土壤,他们也可以被排除。这个隐形的管家就是EC。
EC简介
几乎所有的笔记本的主板上都一个小家伙:EC(Embedded Controller),它是一个16位的小芯片,它与服务器中的BMC类似,掌控笔记本电脑的方方面面。它最早脱胎于笔记本的键盘控制器,现在笔记本上诸多特色功能,背后都有它的身影。充电指示灯为什么会亮?EC在合适的时间让它亮;风扇为什么狂转?EC觉得你的CPU太热了;各种功能键和上面的小灯也是它的功劳。甚至关机后EC还在不知疲倦的工作,它的特色功能也是笔记本厂商要发力的重点。
市面上有多种EC控制器,有ENE、ITE、Nuvoton和SMSC等玩家。它一般被焊接在笔记本主板上:
它有自己的固件(firmware),但主板厂商一般叫这个固件EC BIOS,有点让人困惑。于此对应,笔记本主板的原理图是中间一般至少有一到两页的EC篇章:
我在参考资料1[1]放了ENE的一款EC控制器芯片手册,对细节感兴趣的同学可以参考阅读一下。
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。
笔记本盖子开启/合上case study
我们来简化一下上面那个图:
- 笔记本合上,EC触发GPE。OS收到GPE,查看GP_STS,发现是GPE0触发,知道是EC导致。访问EC得知是Q0A。通过_LID的关键字和PNP知道是盖子信息,知道是盖子合上了。
然后检查用户的电源管理策略作出相应处理:
具体细节参考我的这篇文章:
2.盖子开启,GPEB会触发wake up相关动作。
结论
不但是LID,各种温度传感器也是先过EC的:
AC插上,开启切换电源策略也是EC触发。甚至有的笔记本,AC插上旁边的小LED灯都是EC控制。
EC在笔记本电脑中如此重要,厂商为了作出自己不同的产品策略,开发花哨的功能,在EC上频频发力。EC不愧是笔记本中的隐形管家!
BIOS培训云课堂:
其他相关文章:
欢迎大家关注本专栏和用微信扫描下方二维码加入微信公众号"UEFIBlog",在那里有最新的文章。同时欢迎大家给本专栏和公众号投稿!
参考
- ^ENE datasheet https://reservice.pro/upload/Datasheets/kb9012qf.pdf