首先看下HW monitor,也就是硬件监控,什么温度,电压,系统风扇,CPU风扇啥的。在IT8738芯片文档9.5节中,我们可以看到,这些是在芯片内置的EC逻辑设备中进行的,也就是环境控制(不是嵌入式控制):
环境控制器(EC)内置于IT8738中,包括七个电压输入、三个温度传感器输入、四个风扇转速计输入和四套高级风扇控制器。IT8738包含一个8位ADC(模数转换器),负责监控电压和温度。ADC将0V至2.8V(VREF)的模拟输入转换为8位数字字节。通过额外的外部组件,模拟输入可以监控不同的电压范围,除了监测0伏到2.8伏的固定输入范围。通过外部热敏电阻或热敏电阻二极管,温度传感器输入可转换为8位数字字节,使传感器输入监控各种部件的温度。还提供了一个内置ROM来调整非线性热敏电阻的特性。
怎么操作的之前在smart fan基础介绍中讲到过,我就直接copy到下面来了
就拿LDN 4 EC这个设备来说,我们要访问他的IO Space,首先得知道它的地址是多少,从IT8625的SPEC可以知道,地址就是0x60,0x61中的值。
这里的两个值是不能直接用的,按照说明,需要分别给他们加上05h和06h,再用index/data的IO方式访问就可以了。假如0x60的值是02h,0x61的值是90h(这两个值可以用RW看到),则:
index port address = 290h + 05h = 295h
data port address = 290h + 06h = 296h
理解上面的我们就可以写出逻辑了(PNP mode就不写了)
我估计上面这个也得设置enable才行,所以总的代码应该是如下:
unsigned int GetEcAddress()
{
unsigned int addr1,addr2,baseaddr;
EnterPnPMode();
IoWrite8(0x2E,0x07);
IoWrite8(0x2F,0x04);
IoWrite8(0x2E,0x30);
IoWrite8(0x2F,0x01);
IoWrite8(0x2E,0x60);
addr1=IoRead8(0x2F);
IoWrite8(0x2E,0x61);
addr2=IoRead8(0x2F);
ExitPnPMode();
baseaddr=(addr1<<8&0xFF00) | addr2;
return baseaddr;
}
ok,这样我们就获得了基地址,有了这个我们就可以读写EC里面的IO space了:
unsigned int ReadEcSpace(unsigned int index){
unsigned int data,Addr=0;
unsigned int INDEX_PORT,DATA_PORT;
Addr=GetEcAddress();
INDEX_PORT = Addr+5;
DATA_PORT = Addr+6;
IoWrite8(INDEX_PORT,index);
data=IoRead8(DATA_PORT);
return data;
}
void WriteEcSpace(unsigned int index,unsigned int data){
unsigned int Addr=0;
unsigned int INDEX_PORT,DATA_PORT;
Addr=GetEcAddress();
INDEX_PORT = Addr+5;
DATA_PORT = Addr+6;
IoWrite8(INDEX_PORT,index);
IoWrite8(DATA_PORT,data);
return;
}
读写函数写完了,接下来依然看9.5节,这一节中介绍了这里面space的值具体是干什么用的,代表什么:
总之有一连串,我们看下:
前文中有说道,该芯片有三个温度传感器输入,那么我们就取前面三个的值,就是温度的大小了:
void TempRead()
{
unsigned int temp0,temp1,temp2;
temp0=ReadEcSpace(0x29);
temp1=ReadEcSpace(0x2A);
temp2=ReadEcSpace(0x2B);
printf("Temperature0=%d",temp0);
printf("Temperature1=%d",temp1);
printf("Temperature2=%d",temp2);
//这里只简单写下,温度肯定有范围,如果值为FF,那温度真是这样不得爆炸,所以要排除
}
风扇主要是如下的寄存器:
注意对应组合,比如读取18h的值后,这个值左移8位,然后加上0Dh处的值,然后根据风扇转速公式,算得该风扇转速。
同理电压监控的为20h---28h,读取这些寄存器的值,估计还要计算,可能需要硬件参与(猜测),ok,总的硬件监测就先学习到这-_-||