我所知道的EC.doc

上传人:wj 文档编号:653475 上传时间:2023-04-29 格式:DOC 页数:65 大小:1.13MB
下载 相关 举报
我所知道的EC.doc_第1页
第1页 / 共65页
我所知道的EC.doc_第2页
第2页 / 共65页
我所知道的EC.doc_第3页
第3页 / 共65页
我所知道的EC.doc_第4页
第4页 / 共65页
我所知道的EC.doc_第5页
第5页 / 共65页
我所知道的EC.doc_第6页
第6页 / 共65页
我所知道的EC.doc_第7页
第7页 / 共65页
我所知道的EC.doc_第8页
第8页 / 共65页
我所知道的EC.doc_第9页
第9页 / 共65页
我所知道的EC.doc_第10页
第10页 / 共65页
我所知道的EC.doc_第11页
第11页 / 共65页
我所知道的EC.doc_第12页
第12页 / 共65页
我所知道的EC.doc_第13页
第13页 / 共65页
我所知道的EC.doc_第14页
第14页 / 共65页
我所知道的EC.doc_第15页
第15页 / 共65页
我所知道的EC.doc_第16页
第16页 / 共65页
我所知道的EC.doc_第17页
第17页 / 共65页
我所知道的EC.doc_第18页
第18页 / 共65页
我所知道的EC.doc_第19页
第19页 / 共65页
我所知道的EC.doc_第20页
第20页 / 共65页
亲,该文档总共65页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

我所知道的EC.doc

《我所知道的EC.doc》由会员分享,可在线阅读,更多相关《我所知道的EC.doc(65页珍藏版)》请在冰点文库上搜索。

我所知道的EC.doc

我所知道的EC====>owerSequence

1.What’sPowerSequence?

+w8f*m,\4K9Y0{4H3x

PowerSequence是指HWDevice上电的顺序,它的大致顺序如下:

/v+s#G&{:

Z'J4~,S3o

1)ALWAYS!

}P6m*[2h!

U,v%u2)SUS_ON3)DIMM_ON6h"W*^']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%Q"bC7J

:

l/f,I9r@

2.WhyPowerSequence?

I.Whyneedsequence?

(个人猜测,欢迎指教J)

为什么需要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\7OJ9m

II.S4和S5共用一个信号?

#M3H3M6v,F(A3_#S"]%G6y

做过EC的同志可能会发现,线路图上S4,S5的信号只会有一个。

根据我们的使用经验S4和S5有很大的差异。

原因其实是因为S4,S5都只有ALWAYS电,从EC的角度,根本没有必要区分S4,S5所以SB只有一个信号拉到EC。

.m;W0B:

q+{)我所知道的EC====>SystemArchitecture

1.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:

M1Y

2.常见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^

那么为什么会有两种架构呢?

他们有什么区别呢?

听我慢慢道来Jzzz。

这其实是个多方原因导致的结果。

1.出于成本的考虑。

大家都知道现在NB的价格战是愈演愈烈,大家都在拼成本。

所以低端机种都在拼命的costdown.很明显第一种架构也就是图1左边的架构会省掉一颗IC的成本。

那么大家可能又会问既然这么economic为什么还要导入第二种架构呢?

2.出于性能的考虑“有所得就有所失”没有完美的方案,第一种架构存在一个致命得缺陷,就是BIOS和EC跑code时会抢总线,也就是说有可能某一段时间BIOS狂飙得时候,EC就卡住了,反之亦然。

于是就发现POST时间过长,S3、S4Resume时间过长的问题了。

于是乎第二种架构应运而生;所以在新机种以及那些高性能的game系列中就会采用这种架构。

(PS:

现在应该以第二种架构为主了)#Y+{(}1q:

r

3.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通信的部分如下图所示:

"S"E6@$w'c(d9\&h"o*h

1U&hB1d9W9T(t&~0i!

y

总之EC是NB系统中最为底层的部件,只要有电EC就会工作,检测各种输入信息,同时它还负责提供powersequence和host通信等重要的工作。

我所知道的EC====>LID

1.What’slid?

Lid是盖子的意思,在NB上其实就是指Panel打开和关闭的过程。

不知道有没有人试过用磁石去碰NB的底边缘,试过就会发现一碰NB就会进S3、S4当然也可能什么动作都没有(取决于OS的配置)。

其实这部分是因为大多NB都是通过一颗magnetswitchIC控制lid。

Lid有两种状态Open和CloseHW的线路通常还会将它们用作背光的始能信号8q8{:

`;|(B8M

2.LidOpen

LidOpen就是通常上讲的开盖,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[(Q

LidClose指的是合盖,EC处理的过程和LidOpen基本一致,区别之处在于EC记录Lid的状态有变化。

另外在OS下有一个选项可以设置LidClose时OS可以进行的动作。

如下图所示

如上图1所示closelid可以选择的action有三种"y2F0u%Y+_,D$i9

1.Donothing

)n3V$S&W'cA;f1{.t'^

2.Standby]0d3P)I9m#P#?

*w(A+I"E

3.HibernatX;i)l!

i!

s!

K2y

这些功能是怎么实现的呢?

完整的流程如下图所示:

*d4}%T8{+{(

图2就是完整的工作过程,步骤5是猜的。

要知道真正的做法恐怕只有问了微软才知道J。

窗体顶端

我所知道的EC====>Keyboard-B-u(W$E0]%B#f8j

1.KeyboardIntroduction

Keyboard是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所示:

Akey

Makecode

Breakcode

Set1

1Eh

$F"a+ax6}"@2T

9Eh

Set2

1Ch

F0h,1Ch

Set3

1Ch

F0h,1Ch

$g6D;U5K,T6]9R图2

3.HowDoesKeyboardWork?

Keyboard功能虽然比较简单,只是让用户可以输入一些字符而已,可是它的工作原理却不简单。

从一个键被按下到操作系统识别它并送给其他的driver或者AP,中间经历了很多道工序。

键盘是一种矩阵结构,每一个键都有一个行地址和列地址,用户按下键以后,EC获得该按键的matrixaddress,EC将该address转化为matrixvalue然后判断该键的类型是特殊功能键还是标准按键,然后采用不同的方法将matrixvalue转成Set2,最后在转成Set1value送给host,host收到就可以送给其它需要的程序了。

其完整的工作流程如下图3所示:

4.Customized-Q2|-?

6N.h!

x,s)S

HotKey

NB上有一些被称为HotKey(热键)的东东,比如用户可以按Fn+F4/F5调整亮度等。

这些是如何实现的呢?

既然keyboard部分是由ECFW处理,那定制这些特殊功能键就不是什么难事了。

Fn没有scancode但是它有matrixaddress所以EC收到该键按下后置一个flag,后续检测到F1-F12被按下后,EC发一个Q_EVENT(什么是Q_EVENT?

后续会详细描述J)给Host,Host就可以和EC通信了。

如此便可以定制出各种各样的功能了。

+k-e&z&N9G8}+n

%u9c/H)I5Y

5.6N,t*BK.S!

j4^IOPortCommand

Host通过60h,64h这两个ports和Keyboard进行通信,其中60h被称为数据端口,64h为命令端口。

Host对EC发命令是通过64hport实现的命令分别为:

Command

Description

EDh

设置LED。

Keyboard收到此命令后,一个LED设置会话开始。

Keyboard首先回复一个ACK(FAh),然后等待从60h端口写入的LED设置字节,如果等到一个,则再次回复一个ACK,然后根据此字节设置LED。

然后接着等待。

直到等到一个非LED设置字节(高位被设置),此时LED设置会话结束。

EEh

诊断Echo。

此命令纯粹为了检测Keyboard是否正常,如果正常,当Keyboard收到此命令后,将会回复一个EEh字节。

F0h

选择Scancodeset。

Keyboard系统共可能有3个Scancodeset。

当Keyboard收到此命令后,将回复一个ACK,然后等待一个来自于60h端口的Scancodeset代码。

系统必须在此命令之后发送给Keyboard一个Scancodeset代码。

当Keyboard收到此代码后,将再次回复一个ACK,然后将Scancodeset设置为收到的Scancodeset代码所要求的。

F2h

读取KeyboardID。

由于EC芯片后不仅仅能够接Keyboard。

此命令是为了读取后所接的设备ID。

设备ID为2个字节,KeyboardID为83ABh。

当键盘收到此命令后,会首先回复一个ACK,然后,将2字节的KeyboardID一个一个回复回去。

F3h

设置TypematicRate/Delay。

当Keyboard收到此命令后,将回复一个ACK。

然后等待来自于60h的设置字节。

一旦收到,将回复一个ACK,然后将KeyboardRate/Delay设置为相应的值。

/V%h7p3R'O!

C"}

F4h

清理键盘的OutputBuffer。

一旦Keyboard收到此命令,将会将Outputbuffer清空,然后回复一个ACK。

然后继续接受Keyboard的击键。

F5h

设置默认状态(w/Disable)。

一旦Keyboard收到此命令,将会将Keyboard完全初始化成默认状态。

之前所有对它的设置都将失效——Outputbuffer被清空,TypematicRate/Delay被设置成默认值。

然后回复一个ACK,接着等待下一个命令。

需要注意的是,这个命令被执行后,键盘的击键接受是禁止的。

如果想让键盘接受击键输入,必须EnableKeyboard。

F6h

设置默认状态。

和F5命令唯一不同的是,当此命令被执行之后,键盘的击键接收是允许的。

FEh

Resend。

如果Keyboard收到此命令,则必须将刚才发送到OutputRegister中的数据重新发送一遍。

当系统检测到一个来自于Keyboard的错误之后,可以使用自命令让Keyboard重新发送刚才发送的字节。

FFh

ResetKeyboard。

如果Keyboard收到此命令,则首先回复一个ACK,然后启动自身的Reset程序,并进行自身基本正确性检测(BAT-BasicAssuranceTest)。

等这一切结束之后,将返回给系统一个单字节的结束码(AAh=Success,FCh=Failed),并将键盘的Scancodeset设置为2。

20h

准备读取芯片的CommandByte;其行为是将当前CommandByte的内容放置于OutputRegister中,下一个从60H端口的读操作将会将其读取出来。

60h

准备写入EC芯片的CommandByte;下一个通过60h写入的字节将会被放入CommandByte。

A4h

测试一下键盘密码是否被设置;测试结果放置在OutputRegister,然后可以通过60h读取出来。

测试结果可以有两种值:

FAh=密码被设置;F1h=没有密码。

A5h

设置键盘密码。

其结果被按照顺序通过60h端口一个一个被放置在InputRegister中。

密码的最后是一个空字节(内容为0)。

A6h

让密码生效。

在发布这个命令之前,必须首先使用A5h命令设置密码。

AAh

自检。

诊断结果放置在OutputRegister中,可以通过60h读取。

55h=OK。

ADh

禁止键盘接口。

CommandByte的bit-4被设置。

当此命令被发布后,Keyboard将被禁止发送数据到OutputRegister。

AEh

打开键盘接口。

CommandByte的bit-4被清除。

当此命令被发布后,Keyboard将被允许发送数据到OutputRegister。

C0h

准备读取InputPort。

InputPort的内容被放置于OutputRegister中,随后可以通过60h端口读取。

D0h

准备读取Outport端口。

结果被放在OutputRegister中,随后通过60h端口读取出来。

D1h

准备写Output端口。

随后通过60h端口写入的字节,会被放置在OutputPort中。

D2h

准备写数据到OutputRegister中。

随后通过60h写入到InputRegister的字节会被放入到OutputRegister中,此功能被用来模拟来自于Keyboard发送的数据。

如果中断被允许,则会触发一个中断。

%Y8f1Q0X'O3c

.

上面的表格就是EC支持的全部的command。

那么如何向EC发一个命令呢?

在向端口60h,64h写任何信息之前,EC输入缓冲区必须为空。

读取64h获得状态,然后检查bit1,如果是0表示buffer为空可写,否则为满不能写入。

Example:

+H#P(U*Q-^9q/h2Yin2\8y5J5Q-P

al,64h

"P1l'H1F;o!

Y9l;]#e,K

test

al,2

*N$s5c5M'_/UR

jz(n1W2X1?

)TH$i9G.m;N

send_cmd

1X,L,{#p3h5Q2U(f'W/e

ret

send_cmd:

mov

bl,adh

3a$v3b7^/Ha0w0d8Q

out64h,bl

如何从EC端读取数据呢?

读取任何信息之前,必须检查控制器输出缓冲区状态,以确定可以读取一个字节。

读取64hbit0如果是1表示buffer为满可读,否则为空不能读取。

Example:

1k;]6h+s"A0c

in/U&o0Q.t"z#g3L

al,64h

4m/p1O;j(O

test"}/D)f2e,x8O"d

al,1

s6],\5M"y"g/A3L2Q.f

jnz

read_key_ready

9r4h#N5]7[$[;M)d!

P

ret

4e"z*X#U8V;Q\,t

read_key_ready:

!

C8F9]!

\:

a-L'~

in%P*Z$b9X1g#`+J

al,60h

(i7\4X&h:

v5_

StatusRegister(状态寄存器)的状态位如下所述:

Bit7:

PARITY-EVEN(P_E):

从键盘获得的数据奇偶校验错误

Bit6:

RCV-TMOUT(R_T):

接收超时,置1)M:

ci0d*p-z&O'i*R2v6v

Bit5:

TRANS_TMOUT(T_T):

发送超时,置14Y's!

]&O.L6QK9P

Bit4:

KYBD_INH(K_I):

为1键盘没有被禁止。

为0键盘被禁止。

!

C5`1f(M+@%s1~2O)U5v

Bit3:

CMD_DATA(C_D):

为1输入缓冲器中的内容为命令,0输入缓冲器中的内容为数据。

Bit2:

SYS_FLAG(S_F):

系统标志,加电启动置0,自检通过后置1

Bit1:

INPUT_BUF_FULL(I_B_F):

输入缓冲器满置1,i8042取走后置0'q'g/X4~G'F

BitO:

OUT_BUF_FULL(O_B_F):

输出缓冲器满置1,CPU读取后置0

6.Co-WorkWithUSBKeyboard

$I,E&\1D&j#a$f

大家可能会觉得Usbkeyboard好像和EC没什么关系,其实不然。

Usbkeyboard在Legacymode需要将数据送给EC,由EC在送给Host。

(借腹生子哈哈)。

完整的流程如图4所示:

当usbkeyboard有数据输入,BIOS将数据转化并通过D2command将数据送给EC,

EC通过IRQ1通知Host,Host再下来读取

我所知道的EC====>Battery

1.BatteryInformationw#c#g)[8X

探测Battery的信息是EC一个重要的工作,OS也要通过读取ECRAM中的内容获取电池电量、温度、电压、充、放电电流、Battery是否存在的信息。

那么EC如何获得这些信息呢?

Battery通常是一个smbusdevice所以它会接在EC的一组smbus上,而Battery的spec上会给出Battery的smbus的地址以及读取Battery信息相关的命令。

EC通过向smbus上送Battery的address,cmd然后就会取得相应的信息了。

2.BatteryCharge&DischargeAlgorithm

1)Charge

充电的过程是这样的,ACin的状态下Battery插入,这时EC会进入prechargemode进行小电流充电。

如果precharge时间过长(通常是指超过一个小时)EC就会停止充电并且认为Batterydead,送给host一个BatteryFail的Event。

在prechargemode如果充电电流增大到特定的数值后EC就会进入fastchargemode快速充电。

Battery充满后停止充电。

在这个过程中如果电池温度异常EC也会进行一些处理。

这就充电的简单过程。

2)Discharge

ACout&Batteryin这时Battery开始放电,在放电过程中如果电量小CriticalLow,系统处于S0,EC会发CriticalEvent给host,然后OS紧急关机。

系统处S3,EC将会唤醒OS。

如果电量小于BattLowLowled将会被点亮(BatteryLowPolicy会详述)。

另外放电温度也会被检测,如果温度过高将会做降频动作等。

~H.Y6f"G,O

3.LowLedPolicy

经常使用NB的话,大家可能会发现有一个led很有趣。

插入AC充电时会看到一个黄色的led被点亮,电池没电了会看到一

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2