ITE Super IO 学习 – 环境控制器
简介
Environment Controller,即环境控制器,可以说是SIO中最复杂也是最重要的功能了,它主要包含了风扇控制、电压监测和温度监测三个模块,它们组合起来就可以实现智能风扇(Smart Fan)功能,能根据主机温度实时调节风扇转速,保证CPU能够稳定运行。
访问
在SIO关于Environment Controller这一章的SPEC中,里边所定义的寄存器是比较少的,SIO会把寄存器放在IO SPACE中,这一点我第一篇中就有讲到。访问IO SPACE就需要知道这个空间的地址,从SPEC中可以知道,是定义在LDN4中的index 0x60,0x61中,默认情况下这个地址是0x290,访问的时候还要加上0x05和0x06分别作为I/O index/data,最终为0x295/0x296。这个地址可以通过BIOS配置变更的,当然最后的验证方法是直接用RW修改0x60,0x61的值就可以很快看到结果了。
什么是Bank
先来看一下手册中一个读取温度的寄存器:
这里所写的bank2是什么意思呢?画了个简图:
环境控制器中由于使用的寄存器比较多,单单256个是不够的,所以使用了bank的方式来扩展,这个方法类似于LDN的寄存器,可以通过0x07来切换不同设备的寄存器一样。而切换bank则是通过bank selector来实现的,该寄存器位于IO SPACE中的0x06,相关定义如下:
可知,切换bank通过修改此寄存器的bit6-5即可,现在应该能理解上面那个读温度寄存器中的bank了吧。
温度
IT8625中有3组温度传感器,对应的寄存器index分别是:0x29,0x2A,0x2B,读取的时候注意根据线路图区分是哪一组就好了,示例程序如下:
IoWrite8(0x290+ 5, Index); data = IoRead8(0x290 + 6);
要注意一下的是,温度传感器有 热敏电阻 跟 热敏晶体管 之分,如下示:
其中0x51就是用来设置热敏传感器类型的:
电压
SIO中的电压并不是直接读出来的,它是以某个标准电压为基准,然后通过ADC采集出来的一组数据,所以是需要根据ADC的规则进行数据的转换,才能得到最终的电压值。
IT8625支持7组电压数据的采集,一般我们只使用4-5组,用于对12V, 5V, 3.3V等几个主要电压的监测,来衡量主板的供电状态是否正常。
下面看下这几组电压数据存放区域的说明:
注意最后两行提示,如果是VIN0-VIN6,电压 = 读取的值 x 10.9mV;如果是Internal 3VSB,则电压 = 读取的值 x 2 x10.9mV。这里乘的10.9有小数点不方便计算,一般会将它再乘以10即109计算,最终结果再除以10便可,这里可当作一个基数的计算,接下来还要进行等比例转换。
看下红框部分,这便是集采电压的基准线路。其中Vs是我们需要监测的电压值,Vin是采集到的值,Ra,Rb是线路所用电阻的大小,下面是部分电路:
怎么进行等比例转换呢?SPEC中有个公式:
第一个是正电压计算,第二个是负电压计算。将此公式稍微变换一下就很好理解了,用第一个来示范,那便是:
Vs = Vin X (Ra + Rb) / Rb => Vs / Vin = (Ra + Rb) / Rb
由V = IR可知,当电流不变时,电压跟电阻是成正比的,所以上方的公式就很好理解了。
接下来结合我贴的线路,来计算一下Vs的值。以12V为例,使用RW读取Vin2的值,假如为0xBB,则:
Vin = Vin2 x 10.9 mV => 0xBB x 109 = 20383 Vs = Vin x (Ra + Rb) / Rb => 20383 x (10+2) / 2 /10000 V = 12.2298V
10000怎么来的?10.9转换到109是10,然后mV转换成V是1000,所以最后要除以10000
上方计算的公式中,其实(Ra + Rb) / Rb 的结果总是等于被监测的温度除以2,并不需要知道电阻值的大小也可以计算。假如监测的是12V,则结果是12 / 2 = 6,被监测的是5V,则结果是5 / 2 = 2.5,这个可以自己实验验证一下。
风扇
风扇控制算是Super IO中最复杂的功能了,涉及的寄存器比较多,而且是相互关联的。IT8625支持6组风扇控制,每一组均可设置为软件模式和自动模式。
自动模式:控制器根据监测到的温度大小自动进行风扇转速的控制,此时我们能配置的有启动风扇的温度,关闭风扇的温度,风扇全速的温度,最小RPM/PWM以及斜率,相关寄存器如下:
软件模式:可以设置具体的PWM值来控制风扇,估计是用于更加细节的控制才使用此模式的。相关寄存器如下:
一般我们使用的是自动模式,转速是多少我们并不关心,风扇只要能根据温度自己去调节就可以了。
风扇控制 - 软件模式
1.使用RW将启用SmartGuardian模式(Index 13h[1-2]置1)
2.选择软件操作模式(将与FAN1-6对用的寄存器:index 15h[7]、16h[7]、17h[7]、1Eh[7]、1Fh[7]、92h[7]置0)
3.在Start PWM register处填入PWM的值。假如风扇支持的最大转速为3600,现在要设置成1200转,可算得占空比为1200/3600=1/3,则填入的值=1/3*256=0x55。
风扇控制 - 自动模式
自动模式中,有PWM和转速两种方法控制风扇,使用起来大同小异。
先看下表中的5个寄存器,分别是风扇关闭时的温度值,风扇启动时的温度值,风扇全速运转时的温度值,最小PWM/RPM值及其斜率。
自动控制是根据监测某个设定的温度源进行分阶段转速调节的,如将设置了某个监测温度源TMPIN,关闭风扇的温度为0,启动的温度为20,全速温度为65,每当温度变化2℃,转速按斜率为84RPM/℃进行调节。此时当监测的温度为0时,风扇处于关闭或最低转速状态;当温度上升到20℃时,风扇如果是关闭的则会启动,如是最低速则继续保持低速运转;温度每增加2,转速将增加84RPM;若温度一直增加到65以上,风扇将以最快的转速运行。温度和转速的关系图如下:
以上便是智能风扇的实现原理。至于为什么要这样配置这些参数,这就是thermal工程师要的了,配置参数一般都是他们提供给BIOS的,BIOS直接按数据填到相应的寄存器即可。上面我所举例的参数都比较简单,实际要填的还有好几个,而且还要做一些计算。怕麻烦的话可向ITE的FAE要一个有计算公式的Excel,我们将要配置的参数填入,表格将会显示对应的哪些寄存器填哪些值,这变得非常了。
风扇控制 - 转速计算
到这里EC的功能讲就讲完了。
版权声明:
作者:bin
链接:https://ay123.net/mystudy/bios/888/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论