您好,欢迎访问三七文档
浅谈EC技术Daway整理2010-11-8转自:=1291写在前面我是在NB系统厂商工作的一名EC;从事EC工作也已经接近两年的时间,陆续做了几个Project我发现网络上关于EC方面的资料很少,所以出于让更多想了解EC的人,有些资料可供参考,也为了总结学习经验(KnowledgesharingisthebestreuseJ)所以撰写此文。另外该系列文章是小弟参考网络上非常好的撰文【我所知道的EC】,并结合自己的工作实际,发表自己的观点,见解,希望各位前辈多多指教、批评纠正我的错误的认识。据我所知目前市场上的NB经常使用的ECChip主要有以下三家:1.EnE2.ITE3.Winbond当然我们公司就是使用上述其中一种,后续的文章我会以我所使用的Chip为基准去描述EC的工作流程,当然防止泄露公司的机密,所以我会介绍介绍EC工作的原理,不会涉及到实现的细节。下面的文章就会切入正题,讨论我所知道的EC的方方面面,请大家多多支持、指正。2在系统中EC的架构2.1EC功能概述EC是NB独有的组成部分。它将MB上面的keyboard、PointingDevice集中于一体,在EC内部提供了KBC控制器统一控制它们,这样大大节省了空间,实现了便携。NB的另一个特点是它需要电池供电,这样省电是一个重要的问题。EC配合Chipset在S3、S4、S5分别提供不同的电源策略以达到节省的目的,另外EC也会控制电池的充放电的过程,检测电池电量用于决定是否待机or紧急关机orWakeup等。另外由于NB集成度高、空间受限,散热非常重要但同时还要兼顾噪音的问题,EC会通过thermalsensor获得当前的CPU和VGA温度,根据不同的温度自动调节风扇的转速。这些都是EC提供的功能。2.2常见HW架构现在NBHW线路系统中EC的常见架构有两种,比较旧一点的案子会将BIOS和EC的code放在一起挂在EC的X-BUS下面。而新一些的做法会将BIOS和EC分开;BIOS挂在SB(目前主流的是PCH,亦可理解为PCH)LPC或者SPI下面而EC挂在EC的SPI下面。如下图所示(采用老的架构图,其实和新的大同小异):那么为什么会有两种架构呢?他们有什么区别呢?听我慢慢道来。这其实是个多方原因导致的结果。(1)出于成本的考虑。大家都知道现在NB的价格战是愈演愈烈,大家都在拼成本。所以低端机种都在拼命的costdown.很明显第一种架构也就是图1左边的架构会省掉一颗IC的成本。那么大家可能又会问既然这么economic为什么还要导入第二种架构呢?(2)出于性能的考虑。“有所得就有所失”没有完美的方案,第一种架构存在一个致命得缺陷,就是BIOS和EC跑code时会抢总线,也就是说有可能某一段时间BIOS狂飙得时候,EC就卡住了,反之亦然。于是就发现POST时间过长,S3、S4Resume时间过长的问题了。于是乎第二种架构应运而生;所以在新机种以及那些高性能的game系列中就会采用这种架构。(PS:现在应该以第二种架构为主了)2.3EC如何与HOST通信由图1可以看出EC与SB通过LPC相连,所以EC与HOST端的通信主要是通过LPCBUS进行的,除此之外EC还会有SMI,SCI的pin拉到SB上也就是说EC也可以通过发SCI,SMI的中断通知Chipset,Chipset再从LPCBUS获得相关的EVENT(PS:后续的会详细讨论这部分)。LPCBUS通信的部分如下图所示:总之EC是NB系统中最为底层的部件,只要有电EC就会工作,检测各种输入信息,同时它还负责提供powersequence和host通信等重要的工作。3PowerSequence3.1What’sPowerSequence?PowerSequence是指HWDevice上电的顺序,它的大致顺序如下(当然叫法可能不尽相同,终究大同小异):1)ALWAYS2)SUS_ON3)DIMM_ON4)RUN_ON5)VR_ON这基本上是NB工作需要的所有POWER。插入AC或者DC后,机器内部的开启的电为ALWAYS电,主要用以保证EC的正常运行;系统正常工作进入S0以后,所有的Power都开启。完整的过程其实是这样的:AC或者DC插入以后,ECReset开始跑code,用户按下PowerSwitch时,EC拉SUS_ON送给一颗POWERIC,+3VSUS,+5VSUS起来后,POWERIC回ECSUS_OK。接下来EC发给南桥一个称为‘RSMRST#’的信号。这时候南桥的部分功能开始初始化并等待开机信号。这时候的南桥并没有打开全部电源,只有很少一部分的功能可用,比如供检测开机信号的PWRBTN#信号。在用户按下Power键的时候,EC检测到一个中断,然后duplicate一个开机信号(PWRBTN#)给南桥,南桥收到PWRBTN#信号后依次拉高SLP_S5#,SLP_S4#,SLP_S3#信号,开启了所有的POWER,在V_CORE电起来后,IC会发送ALLSYSPWOK信号给EC这信号表明外围电源正常开启。南桥会发出PCIRST#信号到PCI总线,于是总线上的设备都被初始化(包括北桥),然后CPURST#信号送出,HOST正式接手并开始工作。/至此,上电时序完成。3.2WhyPowerSequence?3.2.1Whyneedsequence?为什么需要PowerSequence呢?没有PowerSequence直接把所有的电压都供上可以开机吗?答案是YES。直接上电开机是没有问题的,可是没有办法达成省电的功能;另外S3/S4,LongRun也会有问题。系统计入待机的时候(S3),机器内部的电只有SUS&DIMM电,主要是提供DDR的电压,以保证RAM内部的资料不丢失(S3是将数据StoretoRam,在Resume之后OS从RAM中获得数据,所以DDR的电一定要留着),而S4和关机(S5)的电是一样的,都是Always电(当AC在的时候其实SUS电建议留着,目的是加速Resume或者PowerOn的速度)。3.2.2S4和S5共用一个信号?做过EC的同志可能会发现,线路图上S4,S5的信号只会有一个。根据我们的使用经验S4和S5有很大的差异。原因其实是因为S4,S5都只有ALWAYS电,从EC的角度来说,根本没有必要区分S4,S5所以南桥只有一个信号拉到EC。4Thermal4.1ThermalIntroductionNB体积都非常小,空间受限,但是NB又需要具有良好的散热功能,较低的风扇噪声,同时又要达到很好的系统性能。这些看似矛盾的目标在NB上都要通过EC去实现。4.2SystemTemperatureNB中根据机器需要探测的温度主要有CPU和GPU两组:1)CPUTemperature2)VGATemperature3)PCHTemperature(Option)如果NB是UMA的,那么VGA的Temperature就不用去探测了。EC会在initial时load一个Thermaltable和FanTable。Thermaltable中定义了不同level温度所对应的FanTable的index;Fantable则定义Fan不同level的speed。EC会在“S0”时通过smbus读取CPU、VGA(如果NB是非UMA)和PCHTemperature,然后比较前两者的FanTable,Fanspeed较大者送给Fan,驱动Fan工作。新的做法是制定FanTable可能也会参照PCHTemperature,但一般PCH温度变化不大。4.3Active&PassiveThermalPolicyACPI定义了两种降温的方式,主动与被动降温。主动降温是指EC通过侦测CPU,VGA的温度,主动调整风扇的转速进行降温。被动则是指系统通过降低IC内部的性能,减少发热量达到降温的目的。一个是通过增加能量消耗,噪声降低系统温度,最大限度的发挥系统性能,另一个则是通过降低系统功耗,性能达到降低系统温度的目的。这其实是完全相反的两种策略,是OSPM提供给用户的选择,让用户根据喜好去决定。Example:1).ActiveThermalPolicy,EC检测系统温度然后根据不同的TriggerPoint调整风扇的转速level,降低系统温度。2).PassiveThermalPolicy,EC检测到系统温度达到ThrottleTriggerPoint,ECSendStartThrottleSCI给系统,然后系统开始降频,降低能耗。4.4CriticalShutdown(Option)当系统温度到了规定的threshold时,系统需要系统CriticalShutdown完整的过程是:EC检测到温度达到threshold,然后EC发CriticalTemperateEvent,系统端收到该SCIEvent后需要进行Shutdown动作,而且如果系统端在规定的时间内没有完成Shutdown动作,EC将会模拟一个四秒关机的过程;还有其他家做法是当温度顶到ECshutdown点时,直接去拉PCH的RSMRST#信号强制关机。4.5CPUThermalTripPoint当CPU的温度到达CPUThermalTrip点时,CPU自身会去拉整个系统的Reset信号,其中包括ECReset点。这是一个HW的动作,当然这一个和EC本身的主动动作没有太大关系,只是属于Thermal的范畴,故而简单提出,望熟知此项的大侠不吝赐教。5Battery5.1BatteryInformation探测Battery的信息是EC一个重要的工作,OS也要通过读取ECRAM中的内容获取电池电量、温度、电压、充、放电电流、Battery是否存在的信息。那么EC如何获得这些信息呢?Battery通常是一个smbusdevice所以它会接在EC的一组smbus上,而Battery的spec上会给出Battery的smbus的地址以及读取Battery信息相关的命令。EC通过向smbus上送Battery的address,cmd然后就会取得相应的信息了。5.2BatteryCharge&DischargeAlgorithm5.2.1Charge充电的过程是这样的,ACin的状态下Battery插入,这时EC会进入prechargemode进行小电流充电。如果precharge时间过长(通常是指超过一个小时)EC就会停止充电并且认为Batterydead,送给host一个BatteryFail的Event。在prechargemode如果充电电流增大到特定的数值后EC就会进入fastchargemode快速充电。Battery充满后停止充电。在这个过程中如果电池温度异常EC也会进行一些处理。这就充电的简单过程。5.2.2DischargeACout&Batteryin这时Battery开始放电,在放电过程中如果电量小CriticalLow,系统处于S0,EC会发CriticalEvent给host,然后OS紧急关机。系统处S3,EC将会唤醒OS。如果电量小于BattLowLowled将会被点亮(BatteryLowPolicy会详述)。另外放电温度也会被检测,如果温度过高将会做降频动作等。5.3LowLedPolicy经常使用NB的话,大家可能会发现有一个led很有趣。插入AC充电时会看到一个黄色(或者白色等其他颜色)的led被点亮,电池没电了会看到一个红色(或者绿色等其他颜色)的led亮,有时还会一闪一闪的。其实这就是EC导入的一个Function。黄色的led其实跟这个Function无关,它是充电指示灯,不过它和LowLed摆在一个位置。那么这个红色的LowLed什么时候会恒亮,什么时候会闪烁呢?当Battery的电量很低的时候也就是小于BattLow时,LowLed就会恒亮。当BatteryDead时LowLed就会闪烁,导致BatteryDead的原
本文标题:浅谈EC技术
链接地址:https://www.777doc.com/doc-5200714 .html