笔记本电脑中的隐形管家:EC

笔记本电脑中的隐形管家:EC

笔记本有很多台式机没有的有趣功能:合上盖子带上就走的便利性,睡眠时神秘的呼吸灯,漂亮的键盘灯等等。这些功能很多都可以在电脑关机的时候还在起作用,那么是谁在控制他们呢?肯定不是CPU,这也让Windows等操作系统失去了执行的土壤,他们也可以被排除。这个隐形的管家就是EC。

EC简介

几乎所有的笔记本的主板上都一个小家伙:EC(Embedded Controller),它是一个16位的小芯片,它与服务器中的BMC类似,掌控笔记本电脑的方方面面。它最早脱胎于笔记本的键盘控制器,现在笔记本上诸多特色功能,背后都有它的身影。充电指示灯为什么会亮?EC在合适的时间让它亮;风扇为什么狂转?EC觉得你的CPU太热了;各种功能键和上面的小灯也是它的功劳。甚至关机后EC还在不知疲倦的工作,它的特色功能也是笔记本厂商要发力的重点。

市面上有多种EC控制器,有ENE、ITE、Nuvoton和SMSC等玩家。它一般被焊接在笔记本主板上:

联想Y700 EC的位置在左下角

它有自己的固件(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

我们来简化一下上面那个图:

  1. 笔记本合上,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",在那里有最新的文章。同时欢迎大家给本专栏和公众号投稿!

用微信扫描二维码加入UEFIBlog公众号

参考

  1. ^ENE datasheet https://reservice.pro/upload/Datasheets/kb9012qf.pdf
编辑于 2021-05-06 15:53