BIOS实战之HW monitor
首先看下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,总的硬件监测就先学习到这-_-||
BIOS实战之HW monitor相关推荐
- BIOS实战之Power Sequence
What is Power Sequence? Power Sequence是指电的开关时序.包含Power On Sequence(上电时序) 和 Power Off Sequence(关电时序). ...
- BIOS实战之Memory配置
目前有SPD和SMIP两种,现在主要配置SMIP,soft:BMP:需要修改的相关文件smip.c BGA:贴片式,Dimm:插槽,MemoryDown:贴片必须要用到的: ch0 RankEnabl ...
- BIOS实战之读写逻辑设备(SIO)
前几天提到了SIO有关的,之前略有研究,不过确实实际只研究过小部分功能,也就做龙芯BIOS的时候参与过SIO的有关编程,因为这个东西笔记本是肯定不会用的,笔记本用EC,这个SIO也就相当于PC板上的E ...
- BIOS实战之读取文件
在UEFI shell下,BIOS的更新.EC的更新等都需要用到读取文件,从UEFI原理与编程中初步了解怎么读写,那么接下来就进入实践环节 先把后面需要的变量先定义好(便于理解): EFI_STATU ...
- BIOS实战之PCI设备枚举二
上次说到了除了IO枚举PCI设备,还有另一种方式枚举PCI设备,那就是通过pciio,这也是UEFI代码中的常规操作(当然还有MMIO,不过不写了) UEFI BIOS 提供了两个主要的模块来支持PC ...
- BIOS实战之MIPI屏的配置
想到啥写啥,仅个人笔记用,说不定哪天就关了 MIPI屏的配置需要用到几个工具: 1.Intel的BMP工具,2.MIPseq工具,最好是最新的,3.DTD 计算工具 BMP工具用来配置GOP driv ...
- BIOS实战之PCI设备枚举一
PCI设备枚举主要通过两种不同方式进行表现,一种就是IO了,那么另一种就是UEFI中的pciio协议,首先看下第一种 IO方式进行PCI设备枚举 先写一个读PCI配置空间的函数,这是通过汇编写,很好理 ...
- BIOS实战之VBIOS配置
EDP屏的配置: 使用BMP.exe进行相关配置 UEFI GOP Driver Configuration选项中有一个Hot Plug Support:热插拔支持 LFP Configuration ...
- AWARD BIOS设置(INTEL芯片组)
计算机加电后,系统将会开始POST(加电自检)过程,当屏幕上出现以下信息时,按delelte键 控制键位 功能 <↑> 向前移一项 <↓> 向后移一项 <←> 向左 ...
- 计算机bios设置论文,玩转电脑必看知识——各种BIOS设置详解 的更多相关文章
7.IDE Primary Master UDMA(第一个IDE主控制器下的UDMA模式) 8.IDE Primary Slave UDMA(第一个IDE从控制器下的UDMA模式) 9.IDE Sec ...
最新文章
- WinCE6.0 修改开机Logo方法集锦(二)
- (双引号)与 ' '(单引号)的区别
- jQuery ajax的traditional参数的作用
- 《北妹》:中国七零后作家的一次火山喷发(答记者问)
- java 常量 内存分配_Java内存分配之堆、栈和常量池
- 关于使用代理解决跨域问题的原理
- 在XNA 3.0 项目添加声音——通过Xact播放简单的.wav文件
- Python判断字符类型
- Leetcode 刷题笔记(十一) —— 栈与队列篇之 top-K 问题
- 羽毛球:东南大学vs南京大学
- 【线性代数】线性代数的几何意义
- Named Route ‘layout‘ has a default child route. When navigating to this named route (:to=“{name: ‘l
- Python最优化算法学习笔记(Gurobi)
- [转贴]当杀毒软件无能为力时,手动杀毒也许是我的最后救命稻草!
- js获取当前服务器的ip
- bmp、jpg转换为icon图像
- JavaSE02-JVM、JRE、JDK
- CAN接口电路的 EMC设计方案(工业)
- vcu整车simulink模型
- Xshell计算-五个文件的准备