您好,欢迎访问三七文档
我所知道的EC====owerSequence1.What’sPowerSequence?+w8f*m,\4K9Y0{4H3xPowerSequence是指HWDevice上电的顺序,它的大致顺序如下:/v+s#G&{:Z'J4~,S3o1)ALWAYS!}P6m*[2h!U,v%u2)SUS_ON3)DIMM_ON6hW*^']0a4)RUN_ON-R#g9U:p!t(k5)VR_ON)Z3W(k2S'v8k/I,{'C这基本上是NB工作需要的所有POWER。插入AC或者DC后,机器内部的开启的电为ALWAYS电,主要用以保证EC的正常运行;系统正常工作进入os以后,所有的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正式接手并开始工作。/至此,上电时序完成。4t-O&f%QbC7J:l/f,I9r@2.WhyPowerSequence?I.Whyneedsequence?(个人猜测,欢迎指教)为什么需要PowerSequence呢?没有PowerSequence直接把所有的电压都供上可以开机吗?答案是YES。直接上电开机是没有问题的,可是没有办法达成省电的功能;另外S3/S4,LongRun也会有问题。系统進入待机的时候(S3),机器内部的电只有SUS&DIMM电,主要是提供DDR的电压,以保证RAM内部的资料不丢失(S3是将数据StoretoRam,在Resume之后OS从RAM中获得数据,所以DDR的电一定要留着),而S4和关机(S5)的电是一样的,都是Always电(当AC在的时候其实SUS电要留着,目的是加速Resume或者PowerOn的速度)。0_-e)Q6\7OJ9mII.S4和S5共用一个信号?#M3H3M6v,F(A3_#S]%G6y做过EC的同志可能会发现,线路图上S4,S5的信号只会有一个。根据我们的使用经验S4和S5有很大的差异。原因其实是因为S4,S5都只有ALWAYS电,从EC的角度,根本没有必要区分S4,S5所以SB只有一个信号拉到EC。.m;W0B:q+{)我所知道的EC====SystemArchitecture1.EC功能概述EC是NB独有的组成部分。它将MB上面的keyboard、mouse集中于一体在,EC内部提供了KBC控制器统一控制它们,这样大大节省了空间实现了便携。NB的另一个特点是它需要电池供电,这样省电是一个重要的问题。EC配合chipset在S3、S4、S5分别供不同的电源策略以达到节省的目的,另外EC也会控制电池的冲放电的过程,检测电池电量用于决定是否待机or紧急关机orWakeup等。另外由于NB集成度高、空间受限,散热非常重要但同时还要兼顾噪音的问题,EC会通过thermalsensor获得当前的CPU和VGA温度,根据不同的温度自动调节风扇的转速。这些都是EC提供的功能。7T0F-D:M1Y2.常见HW架构b6l9`5l3D%Y;o现在NBHW线路系统中EC的常见架构有两种,比较旧一点的案子会将BIOS和EC的code放在一起挂在EC的X-BUS下面。而新一些的做法会将BIOS和EC分开;BIOS挂在SBLPC或者SPI下面而EC挂在EC的SPI下面。如下图所示:0A5R%c/g6c0l%R2^那么为什么会有两种架构呢?他们有什么区别呢?听我慢慢道来zzz。这其实是个多方原因导致的结果。1.出于成本的考虑。大家都知道现在NB的价格战是愈演愈烈,大家都在拼成本。所以低端机种都在拼命的costdown.很明显第一种架构也就是图1左边的架构会省掉一颗IC的成本。那么大家可能又会问既然这么economic为什么还要导入第二种架构呢?2.出于性能的考虑“有所得就有所失”没有完美的方案,第一种架构存在一个致命得缺陷,就是BIOS和EC跑code时会抢总线,也就是说有可能某一段时间BIOS狂飙得时候,EC就卡住了,反之亦然。于是就发现POST时间过长,S3、S4Resume时间过长的问题了。于是乎第二种架构应运而生;所以在新机种以及那些高性能的game系列中就会采用这种架构。(PS:现在应该以第二种架构为主了)#Y+{(}1q:r3.EC如何与HOST通信\#d-[)s5y*C由图1可以看出EC与SB通过LPC相连,所以EC与HOST端的通信主要是通过LPCBUS进行的,除此之外EC还会有SMI,SCI的pin拉到SB上也就是说EC也可以通过发SCI,SMI的中断通知Chipset,Chipset再从LPCBUS获得相关的EVENT(PS:后续的会详细讨论这部分)。LPCBUS通信的部分如下图所示:SE6@$w'c(d9\&ho*h1U&hB1d9W9T(t&~0i!y总之EC是NB系统中最为底层的部件,只要有电EC就会工作,检测各种输入信息,同时它还负责提供powersequence和host通信等重要的工作。(我所知道的EC====LID1.What’slid?Lid是盖子的意思,在NB上其实就是指Panel打开和关闭的过程。不知道有没有人试过用磁石去碰NB的底边缘,试过就会发现一碰NB就会进S3、S4当然也可能什么动作都没有(取决于OS的配置)。其实这部分是因为大多NB都是通过一颗magnetswitchIC控制lid。Lid有两种状态Open和CloseHW的线路通常还会将它们用作背光的始能信号8q8{:`;|(B8M2.LidOpenLidOpen就是通常上讲的开盖,HW会将这支信号拉到EC一根GPIOpin上,也就是说一旦Lid状态有变化EC这端就会收到中断,EC收到中断后会发SCI通知host,host再去做其他的动作。可是通常第一次开机的时候Panel是打开的,NB并没有供电所以EC没法更新lid的状态,这时EC就会在进入S0的时候根据lid这根GPIO的状态(H&L)去更新lid的状态。在OS装载的过程中会主动去callBIOS中的aslcode去更新Lid的状态。3.LidClose4z2z9{C3[(QLidClose指的是合盖,EC处理的过程和LidOpen基本一致,区别之处在于EC记录Lid的状态有变化。另外在OS下有一个选项可以设置LidClose时OS可以进行的动作。如下图所示如上图1所示closelid可以选择的action有三种y2F0u%Y+_,D$i91.Donothing)n3V$S&W'cA;f1{.t'^2.Standby]0d3P)I9m#P#?*w(A+IE3.HibernatX;i)l!i!s!K2y这些功能是怎么实现的呢?完整的流程如下图所示:*d4}%T8{+{(图2就是完整的工作过程,步骤5是猜的。要知道真正的做法恐怕只有问了微软才知道。我所知道的EC====Keyboard-B-u(W$E0]%B#f8j1.KeyboardIntroductionKeyboard是PC架构中的一个重要组成部分。在常见的PC系统中主板上都有一颗专用的8042接口芯片去处理(现在被集成进了SB中),8042控制keyboard的整个工作过程,包括加电自检键盘扫描码的缓冲以及与chipset沟通。在NB上这部分工作都有EC负责,它有一个keyboardcontroller,它扮演8042相似的角色。NB都有一个内置Keyboard,这个keyboard是由EC控制的。Keyboard和touchpad都是EC内置的一个部分,它们按照ps2协议工作,最终的数据通过EC送给host。常见的102key的键盘如下图1所示:2.3\0Y8A4f.c6p1NScancodeandMake&Break1[)H.{:`*S(D0R&v-m1h-}5f8r#e当键盘上有键被按下,键盘将产生扫描码(scancode),scancode有两种Makecode和Breakcode,也就是通常所说的通码和断码。每一个按键都有一个唯一的Makecode和Breakcode。当一个键被按下就会产生Makecode,松开时就会产生一个Breakcode。Scancode一共有三套称之为set1、set2、set3,PS2接口键盘默认使用set2。EC收到set2scancode以后会将它转化为set1送给host。Set1的scancode中标准按键的ScancodeMakecode和Breakcode都只有一个字节,Makecode和BreakCode的差别就在最高位。Makecode最高位为0,Breakcode最高位为1。A的scancode如下图1所示:AkeyMakecodeBreakcodeSet11Eh$Fa+ax6}@2T9EhSet21ChF0h,1ChSet31ChF0h,1Ch$g6D;U5K,T6]9R图23.HowDoesKeyboardWork?Keyboard功能虽然比较简单,只是让用户可以输入一些字符而已,可是它的工作原理却不简单。从一个键被按下到操作系统识别它并送给其他的driver或者AP,中间经历了很多道工序。键盘是一种矩阵结构,每一个键都有一个行地址和列地址,用户按下键以后,EC获得该按键的matrixaddress,EC将该address转化为matrixvalue然后判断该键的类型是特殊功能键还是标准按键,然后采用不同的方法将matrixvalue转成Set2,最后在转成Set1value送给host,host收到就可以送给其它需要的程序了。其完整的工作流程如下图3所示:4.Customized-Q2|-?6N.h!x,s)SHotKeyNB上有一些被称为HotKey(热键)的东东,比如用户可以按Fn+F4/F5调整亮度等。这些是如何实现的呢?既然keyboard部分是由ECFW处理,那定制这些特殊功能键就不是什么难事了。Fn没有scancode但是它有matrixaddress所以EC收到该键按下后置一个flag,后续检测到F1-F12被按下后,EC发一个Q_EVENT(什么是Q_EVENT?后续会详细描述)给Host,Host就可以和EC通信了。如此便可以定制出各种各样的功能了。+k-e&z&N9G8}+n%u9c/H)I5Y5.6N,t*BK.S!j4^IOPortCommandHost通过60h,64h这两个ports和Keyboard进行通信,其中60h被称为数据端口,64h为命令端口。Host对EC发命令是通过64hport实现的命令分别为:CommandDescriptionEDh设置LED。Keyboard收到此命令后,一个LED设置会话开始。Keyboard首先回复一个ACK(FAh),然后等待从60h端口写入的LED设置字节,如果等到一个,则再次回复一个ACK,然后根据此字节设置LED。然后接着等待。。。直到等到一个非LED设置字节(高位被设置),此时LED设置会话结束。EEh诊断Echo。此命令纯粹为了检测Keyboard是否正常,如果正常,当Keyboard收到此命令后,将会回复一个EEh字节。F0h选择Scancodeset。Keyboard系统共可能有3
本文标题:我所知道的EC
链接地址:https://www.777doc.com/doc-3336771 .html