stdlf
分类:
2011-05-23 12:07:31
BIOS EC 电源管理之间的关系
我们常会听到某些高手说“改一下COMS设置”云云,我们现在就来谈谈BIOS(CMOS)。
BIOS(Basic Input/Output System,基本输入输出系统)在整个系统中的地位是非常重要的,它实现了底层硬件和上层操作系统的桥梁。比如你现在从光盘拷贝一个文件到硬盘,您只需知道“复制、粘贴”的指令就行了,您不必知道它具体是如何从光盘读取,然后如何写入硬盘。对于操作系统来说也只需要向BIOS发出指令即可,而不必知道光盘是如何读,硬盘是如何写的。BIOS构建了操作系统和底层硬件的桥梁。
而我们平时说的BIOS设定仅仅是谈到了其软件的设定,比如设置启动顺序、禁用/启用一些功能等等。但这里有一个问题,在硬件上,BIOS是如何实现的呢?毕竟,软件是运行在硬件平台上的吧?这里我们不能不提的就是EC。
这是日立H8的DEMO板和其宣传画
WINBOND的EC
EC(Embed Controller,嵌入式控制器)是一个16位单片机,它内部本身也有一定容量的Flash来存储EC的代码。EC在系统中的地位绝不次于南北桥,在系统开启的过程中,EC控制着绝大多数重要信号的时序。在笔记本中,EC是一直开着的,无论你是在开机或者是关机状态,除非你把电池和Adapter完全卸除。
在关机状态下,EC一直保持运行,并在等待用户的开机信息。而在开机后,EC更作为键盘控制器,充电指示灯以及风扇等设备的控制,它甚至控制着系统的待机、休眠等状态。主流笔记本系统中,EC在系统架构中的地位如下图:
嵌入式控制器的两种架构
现在的EC有两种架构,上图左边是比较传统的,即BIOS的FLASH通过X-BUS接到EC,然后EC通过LPC接到南桥,一般这种情况下EC的代码也是放在FLASH中的,也就是和BIOS共用一个FLASH。右边的则是比较新的架构,EC和FLASH共同接到LPC总线上,一般它只使用EC内部的ROM。至于LPC总线,它是INTEL当初为了取代低速落后的X-BUS而推出的总线标准。
EC上一般都含有键盘控制器,所以也称KBC(Keyboard Controller)。
那EC和BIOS在系统中的工作到底有什么牵连呢?在这里我们先简单的分析一下,具体的过程在本文的最后会详细介绍。
在系统关机的时候,只有RTC部分和EC部分在运行。RTC部分维持着计算机的时钟和CMOS设置信息,而EC则在等待用户按开机键。在检测到用户按开机键后,EC会通知整个系统把电源打开(这部分在最后详细介绍)。CPU被RESET后,会去读BIOS内一个特定地址内的指令(其实是一个跳转指令,这个地址是由CPU硬件设定的)。
这里开始分两种情况,对于上图左边的结构:CPU发出的这个地址通过FSB到北桥,然后通过HUB-LINK到南桥,通过LPC到EC,再通过X-BUS一直到达BIOS。在CPU读到所发出的地址内的指令后,执行它被RESET后的第一个指令。在这个系统中,EC起到了桥接BIOS和南桥(或者说整个系统)的作用。
对于上图右边的结构:在这地址南桥后,会直接通过LPC到BIOS,不需要EC的桥接。
这里需要说明的是,对于台式机而言,一般是不需要EC的。这里原因有很多:比如台式机本身的ATX电源就具有一定的智能功能,他已经能受操作系统控制来实现待机、休眠的状态;其次由于笔记本的键盘不能直接接到PS/2接口,而必须接到EC之上;还有就是笔记本有更多的小功能,比如充电指示灯、WIFI指示灯、Fn等很多特殊的功能,而且笔记本必须支持电池的冲放电等功能,而智能冲放电则需要EC的支持;另外,笔记本TFT屏幕的开关时序也必须由EC控制。这些原因导致了笔记本使用EC来做内部管理的必要性。
总体来说,EC和BIOS都处于机器的最底层。EC是一个单独的处理器,在开机前和开机过程中对整个系统起着全局的管理。而BIOS是在等EC把内部的物理环境初始化后才开始运行的。
看到这里,我想大家也明白EC到底是呵方神圣。如果说BIOS 是底层系统的话,那EC 似乎更加底层。
在南桥上还有一个功能块就是电源管理单元(PM,Power Management)。
一般来说,他和EC来共同配合完成。这里包括从开机(power button)键按下后,启动,待机,休眠,关机的全部功能。还包括对背光亮度,声音等的控制等等。
至于现在Intel的Speed Step技术,也有部分功能是透过南桥来实现的(南桥发送SLP、STPCLK(sleep,Stop Clock)来实现睡眠、深睡眠等)。
这部分的设计比较简单,只需要点到点的连接南桥和CPU即可。
PCI设备:网卡 1394的不同接法
在台式机上,我们常听到关于集成网卡这个说法。而对于笔记本来说,网卡一般都是集成在主板上的,进入PIII时代以后,就显有无内建网卡的机器了。对于笔记本网卡来说(不考虑PCMCIA的网卡哦),一般有两种接法。
首先我们把网卡分成两个部分。学过网络技术的读者可能都很清楚,现在的LAN都属于802.3的协议。而这个协议的物理实现却并非那么简单,需要分成两个部分。一部分是MAC控制层(Media Access Controller 媒体接入控制器),作用是根据802.3协议来做运算(采用CSMA/CD算法),另一部分是物理连接层(PHY)作用是根据MAC的算法得出的处理结果,接收和发送数据。
首先我们谈第一种,走PCI总线的网卡。如果这样接的话跟台式机的网卡唯一的区别就是把台式机的PCI网卡直接做到主板上。这颗走PCI的网卡芯片内部整合了MAC和PHY功能。实际使用中,高档一些的笔记本会采用INTEL的网卡,低档一些的就会用REALTLK或者VIA的芯片。当然,INTEL网卡的传输效率确实也比较高。
上图蓝色框内的就是PCI的网卡(REALTLK8100C)
第二种则是“真正集成”的网卡,MAC层部分被做到了南桥里面,然后需要用一个外围电路(PHY)来配合南桥里的MAC来实现网卡的功能。
“真正集成”的网卡
如图,南桥内部的网卡MAC输出一组信号线(称为MII总线),连接PHY(上图中的Intel 82562ET),然后引出RX+-和TX+-两对差分线,透过Transformer来控制EMI,然后输出到RJ45接口即刻。这里的Transformer的结构跟中篇里的USB的共模电感相似,作用也相似。上面的REALTLK8100C的那张图中,红色框内就是Transformer。经过Transformer的信号线必须以最短的距离接到RJ45接口上以减少干扰,所以它离和RJ45的距离是必须被严格控制的。
INTEL的网卡PHY(82562ET)
那么MAC地址是什么呢?MAC地址是区别网络设备的唯一物理标志,理论上,世界上任何一个网络设备的MAC应该都是不同的。那么网卡的MAC地址到底放在哪里呢?
对于走PCI总线的网卡,一般会在网卡上挂一个小小的的E2PROM来存储,里面烧有MAC地址以及一些厂商信息。而对于用PHY来连接的网卡,会把MAC地址信息放在挂在南桥上的E2PROM(因为网卡的MAC控制器在南桥)。
上图中黄色框内的U6就是E2PROM,用以纪录网卡的MAC地址。
而1394和网卡的构建形式差不多,也是由MAC控制器和PHY来构成。其原理和布线准则也和网卡类似,笔者就不多费笔墨了。
PCI设备:PCMCIA, Mini PCI
1989年由200多家公司确立了PCMCIA(Personal Computer Memory Card International Association)标准,最初只是用来扩展内存,91年后随着I/O设备扩展需求,多种设备都被做成了PCMCIA接口,PCMCIA成为了笔记本最重要的扩展插槽。PCMCIA的成长史几乎是整个笔记本电脑产业的成长史。那PCMCIA到底是如何实现的呢?
实际上,PCMCIA的实现方法并不复杂,把南桥的PCI总线拉到PCMCIA控制器,然后从PCMCIA控制器就能输出Cardbus,接上标准的PCMCIA接口就可以了。
PCMCIA的框图
实际上在设计的时候,CardBus Controller的设计厂商都已经对其开发作好了一整套的外围电路,OEM厂商只需要简单的按标准电路做简单的修改即可(比如一些降低成本的动作)。一般来说,CardBus Controller有TI,RICHO,ENE等几家可以选择。
IBM R40的芯片控制器
如图是IBM R40采用的TI的芯片PCI 1510 控制器和NEC的某款产品,采用理光R5C551的CardBus控制器。
至于mini PCI则更加简单了,只需把南桥的PCI总线点到点的接到mini PCI的接口上即可。顺便说一句,mini PCI和台式机上的PCI的物理定义是一致的,不同的仅仅是插槽不一致而已。
我们见到过为了台式机上为了使用Mini PCI接口的无线网卡而出现的转接卡:
Mini PCI接口转接板
我们看到,这样的转接板也是非常的简单,除了一些用以稳压用的元器件外没有任何用以信号转换的芯片。这也从侧面说明了Mini PCI 只是PCI的翻版。
笔记本也可以超频么?
所有的数字电路都需要依靠时钟信号来使组件的运作同步,每单位时间内电路可运作的次数取决于时钟的频率,因此时钟运作的频率即被大家视为系统运作的性能指针。在笔记本的内部,时钟都是有一颗Clock Generator来产生的。
上图中,大颗的是Clock Generator,小颗的是14.318Mhz的晶振
一般来说这颗IC自身采用14.318Mhz的晶振来产生个部分需要的频率。系统的各部分频率分别是:CPU-100M,南桥/北桥- 66M, AC97-14M,LAN-25M,PCI CLK-66M,USB-48M等等。南桥由于设备的多样性,可能同时需要66/14/48/33等频率,这主要看各种南桥的Specification(规格)和你采用的功能来决定(比如你需要加一个Super I/O来增加一个红外口,那么你需要加一组14.318Mhz频率来提供给Super I/O)。
如果我们仔细研究一下这颗时钟芯片的规格书,我们会发现,控制其输出频率高低的有三个PIN,通过这三个PIN的高低电平,我们可以获得不同的频率输出。
我们举个例子,ICS954226这颗芯片是为P4-M和P-M系统设计的时钟芯片,它的PIN图如下:
ICS954226芯片PIN图
其中红色框内的就是可以用来调整系统时钟频率的跳线,具体的对应表如下图:
红色框内是P-M采用的数据
至此我想各位也都明白,只要研究一下时钟芯片的跳线,并调整跳线就可以改变CPU的外频和主频。这实在让人兴奋!
不过在实际上并非那么简单。因为单纯的提高时钟频率必然导致整机功耗的偏大,发热必将严重。而笔记本电脑在散热方面基本没有DIY的可能性。这样,散热在这里就成为比较突出的问题。
在调整时钟的时候,我们也必须考虑到北桥对FSB的承受能力,超负荷的运作可能会导致北桥不堪重负而发生问题。
在老式的主板上,我们需要多考虑一个问题。因为其各个组件都有其固定的工作频率,而各个总线的工作频率和系统的频率大部分都维持固定的比例来工作。换句话说,传统的时钟发生器通常是以CPU的外频作为基准频率,通过固定比例的除频,产生其余外设所使用的时钟。所以当使用者调高CPU外频的同时,总线及外设的时钟也会等比例地被提升,有的时候CPU尚未超出其工作极限,反而是外设承受不了过高的频率而罢工了。
而在设计时,为了使同一款频率发生器能在更多的系统上使用,新一代的时钟发生器将AGP/PCI等总线的频率,采用与CPU外频“异步”的设计方式,使用者就可以自由设定AGP/PCI的工作频率,以符合外设的工作需求。如上图中我们可以看到,我们改变CPU外频的同时并未改变PCI等传统外设的工作频率,这无论对设计者来说还是超频爱好者而言都具方便性。
除了玩跳线以外,这颗时钟发生器配备有SMBus(System Management Bus)接口,可由BIOS直接控制,甚至不用拆机壳,只需坐在计算机面前,通过键盘及屏幕,即可随意调整系统工作频率了。
图中蓝色框内的就是SMBus的接口
通过SMBus我们可以以极小的线性级距微调CPU的外频(以MHz为单位),不像以往的跳线设定方式,一下子从100MHz直接跳至133MHz,CPU容易超出其极限而导致当机。但很遗憾,笔记本电脑在设计之时就已经确定了其最稳定的工作频率,可以频率调节的BIOS版本仅会存在于测试样机,而绝不会留给使用者在BIOS里超频的可能。
SMBus 2.0/I2C Bus
上页我们提到了SMBus,相对前面说FSB,USB,PCI等总线,SMBUS2.0的速度实在是低的可怜(不过反正它也不需要那么高的速度)。但其作用却不可小视。简单的说,SMBUS是一种慢速的系统总线,他为整个系统提供基本的运行信息。
我想稍有内存知识的朋友都知道,内存上有SPD来纪录内存的容量,厂商等信息。而这些信息就是靠SMBus来读取的。另外,SMBus也可用来做CPU温度检测之用。在新型的笔记本或者台式机的设计中,Clock Generator的频率控制也可以用SMBus来调整,以达到线性、平滑的超频(当然,在笔记本中……这就只可能出现在工程样机中了)。
下图是具体的逻辑图,注意是SMBus哦,不是SMLink哦。
SMBus逻辑图
其实在笔记本电脑内部,有不止一根的系统总线。比如说侦测电池信息的SMBUS等。笔者对这方面的信息笔者知之甚少,仅在此抛砖引玉了,有兴趣的朋友可以自己去搜索。
CPU的核心电压,如何变化?主频如何自适应?
可能大家都知道,现在的CPU有频率的自动调节功能以满足性能/电池续航的最佳平衡。那么如何调节呢?我们看一下下面这张图,它说明了CPU在各个状态间的切换:
CPU在各个状态间的切换
我们看到,CPU具有相当的智能,它会对当前的负荷量做一个检测,如果要求的处理量不大的话就自动进入Auto Halt,Stop Grant等状态,如果发现负荷量还是偏小的话,南桥会发出一些SLP或DEEP SLP信号(分别代表睡眠,深睡眠)来通知CPU进入睡眠、深睡眠状态。
而在DEEP SLP情况下,如果CPU的运算量还是偏小,那么CPU就会发出VID通知CPU Core Voltage Regulator(CPU电压产生器)降低当前的工作电压,在收到CPU发出的VID后,电压产生器就会输出想对应的CPU CORE电压,在得到降低的电压后,CPU的频率会下降以达到低功耗的目的。而在这时候CPU进去的模式我们称为DEEPER SLP(即更深的睡眠)。
至于VID和CPU的关系,我相信下面的图能给你比较直观的认识:
VID和CPU的关系
CPU发出VID到CPU Core Voltage Regulator,后者解码VID后,改变CPU的核心电压。以Intel的Improved Enhanced SpeedStep技术为例,在小于1/2000秒的时间里,自动电源识别系统(CPU和南桥共同协作)和自动电压调整系统(CPU Core Voltage Regulator系统)将使CPU的电压自动增加或者减少到最佳的值。由此不难看出,SpeedStep技术能让CPU在最高性能模式和电池优化模式之间随意地切换或按用户的命令进行切换,而性能切换时,SpeedStep技术可将处理器的功率降低40%,同时仍保持80%的最高性能。
一般来说,这颗电压产生器会使用MAXIM(美信)或者ITSEL两家。而在最新的Sonoma平台上,ADP这家老牌的IC生产商也蠢蠢欲动。
充电电路,保护锂电池就靠它了
对于如今的笔记本电脑,都具有锂电池作为电源(在03,04年HP也曾推出过过时的镍氢电池作为电源以降低成本,但没多久就消失了)。
为了延长电池的使用寿命,除了要养成良好的电池使用习惯外,对锂电池的智能冲放电也非常重要。目前在笔记本电脑中,几乎都采用了“电池管理”和“充放电控制”两种芯片级管理系统。
其中“电池管理芯片”安置于笔记本电脑内部,该芯片的寄存器里存储着该台电脑所用锂离子电池的容量、工作温度、ID系列号、充放电状态、充放电累计次数等重要信息。这些数据信息在使用过程中,需要根据实际情况不断地刷新。如图是IBM T4X系列采用的ADP3806充电IC,由它负责对电池状态的监控。
电池管理芯片
而电池内置的“充放电控制芯片”最主要的作用,就是监视、控制电池的整个充放电过程并加以记录。
早期IBM ThinkPad 电池控制电路
对于离子电池的整个充电过程,一般分为“恒流快速充电”和“恒压电流递减充电”两个阶段。所谓“恒流快速充电”是指在刚刚开始充电时,充电电流固定而充电电压跟随电池的端电压逐渐升高,直至达到标称电压的充电方式。当电池达到了端电压标准数值后,控制芯片会自动转入“恒压电流递减充电”阶段,此时充电电压将不会再继续升高,而充电电流则跟随电池容量的不断上升逐步递减,并最终达到零,如此便完成了电池的全部充电过程。
与此同时,在充电过程中所产生的充电电压、电流、时间等数据曲线,都将被记录在电池内的“充放电控制芯片”的存储器中。“电池管理芯片”就是通过调取这些数据,并通过抽样计算得出电池容量等数据,这便是我们在Battery Information里所读到的Wh数值。
重要的一环 热保护系统
CPU对过热保护有两组信号。一组是由一根CLOCK一根DATA构成,它们不断的和EC进行串行通信,EC根据CPU发来的信号得到CPU当前的温度,并调节风扇的速度来控制温度。当CPU温度升高到一定程度的时候,CPU自动降低自身频率以控制热量。而当风扇在CPU降低频率的情况下仍不能控制住温度的时候,EC会发出指令,主机重新启动。
处理器时钟控制机制
而另一组名为ThermalTRIP(图上标为RESET),这个信号一旦发出,马上RESET主机,这个信号是由CPU直接发送到EC的RESET端,其功能是在CPU温度迅速升高,而风扇来不及发挥作用的时候,切断电源以保护CPU。
一般而言,笔记本内部的有温度检测的就只有CPU一个。其他一些南北桥,显卡一般都没有温度检测系统。不过随着显卡的热量越来越大,在将来的系统中,我们很有可能会看到有温度检测的移动型显示卡(其实在MXM上已经有在设计了,只是显卡做在主板上的机器暂时还没有看到过)。
逻辑上的开机过程:预习
开机过程对于电脑设计是至关重要的。在笔记本电脑打好PCB后第一次开机时,如果电源的时序正确了,其他的问题都比较好解(一般来说时序正确的话机器都能开起来)。最怕的就是电源时序不对,机器开不起来,这才是最要命的。那我们现在就讲解一下笔记本电脑在硬件上的逻辑开机过程。
首先我们做一写预习工作,以方便读者的理解。在笔记本内部的电压有好几种,我们分别看一下。
首先是RTC电源,这部分电力是永远不关闭的,除非电池(纽扣电池)没电并且没接任何外部电源(比如电池和电源适配器)。RTC用以保持机器内部时钟的运转和保证CMOS配制信息在断电的情况下不丢失;其次,在你插上电池或者电源适配器,但还没按power键的时候(S5),机器内部的开启的电称为ALWAYS电,主要用以保证EC的正常运行;再次,你开机以后,所有的电力都开启,这时候,我们称为MAIN电(S0),以供整机的运行;在你进待机的时候(S3),机器内部的电成为SUS电,主要是DDR的电力供应,以保证RAM内部的资料不丢失;而休眠(S4)和关机(S5)的电是一样的,都是Always电。其中,上文中括号内的是表示计算机的状态(S0-开机,S3-待机,S4-休眠,S5-关机)。
电压各个状态
上图是对上面这段话的总结,我想应该很容易明白。其中最后一列指的是其电压开启的控制信号,这点下面会讲到。至于为什么这里没有S4,即休眠状态,是因为在S4状态和S5状态下,系统开启的电是一样的,所以就没必要增加一组控制电路。
逻辑上的开机过程:从接上电源一直到进入BIOS
OK,现在我们假设没有任何的电力设备在供电(没电池和电源),这时候,机器内部只有RTC电路在运作,南桥上会接有一个3V的纽扣电池来供给RTC电力,以保持内部时间的运行和CMOS信息。
下图是南桥的启动时序:
南桥的启动时序
根据前面的Power Status,我们来分析一下开机的过程。在插上电池或者电源的时候,机器内部的单片机EC就Reset并开始工作,等待用户按下Power键。在此期间的时序是:ALWAYS电开启以后,EC Reset并开始运行,随后发给南桥一个称为‘RSMRST#’的信号。这时候南桥的部分功能开始初始化并等待开机信号。这里要注意,这时候的南桥并没有打开全部电源,只有很少一部分的功能可用,比如供检测开机信号的PWRBTN#信号。
在用户按下Power键的时候,EC检测到一个电平变化(一般时序是:高-低-高),然后发送一个开机信号(PWRBTN#)给南桥,南桥收到PWRBTN#信号后依次拉高SLP_S5#,SLP_S4#,SLP_S3#信号(他们的作用参看上页的图),开启了所有的外围电压,主要是+3V,+5V以及DDR2.5V等,并发送PM PWROK信号,这信号表明外围电源正常开启。
PM PWROK将作为一个使能信号发送到CPU外围VCCP的电压Generator,并开启VCCP。在此之后,VCCP Generator会发出CORE_VR_ON来开启CORE VR(即CPU的核心电压)。至此,整机的电压已经全部开启。
在用VR_PWRGD_ICH这个信号通知南桥CORE VR成功开启后,南桥会发出PCI RST#信号到PCI总线,于是总线上的设备都被初始化(包括北桥),并同时发出H_PWRGD来通知CPU它的核心电压已经成功开启。然后北桥发H_CPURST#信号给CPU,CPU被RESET,并正式开始工作。
逻辑上的开机过程:从开机如何进入待机 休眠呢
下图是整个系统开机流程图,大家可根据上文所说的进行比较。由于INTEL做的开机系统比较完善,而在实际设计中,RD会省略不少步骤,以降低系统的复杂程度,同时降低成本。
系统关闭
在用户需要进入待机模式(S3)的时候,系统的ACPI和windows同时运作,拉低SLP_S3#,并保持SLP_S4#和SLP_S5#被拉高,以关闭了MAIN电,系统则进入待机模式
。
而在需要进入休眠或者关机模式时,同时拉低SLP_S3#、SLP_S4#和SLP_S5#,关闭除了RTC以外的电源。当然,在这一系列的过程中,需要操作系统和BIOS的共同协作,对硬件工程师来说,只需要保证在特定的状态保证特定的电压供给即可。
当机器要要从S0进入S5,即关机的时候,也会有一定的时序进行,基本上就是前面时序的逆运行,笔者就不多费笔墨了。有兴趣的读者可去INTEL自己下载他们的规格书。
开机过程
以上就是整个硬件的开机、进入S3,S5的过程,当然不同的硬件有不同的开机过程,这里说的不过是最普通、最为常见的一种。