其实不算原创,资料几乎都是通过 google 来自 internet :)

前段时间买了 hp-dv1702 笔记本电脑, 酷睿单核 cpu, 5400 转硬盘, 看电影挺不错的. 酷睿 cpu支持 speedstep 技术,  不忙的时候总是工作在 800MHz 左右,发热量小,BIOS 设定风扇启动温度为 cpu 75度,平常工作中一天下来风扇也几乎不转,硬盘的温度比较高,从网上查到左手边热是这款本本的通病。
    笔者的想法是让风扇在硬盘达到48、9度的时候让风扇转动起来,到设定的温度停下,并可以看到主板、cpu、硬盘的温度。在风扇控制完成以后,检测系统温度的问题就显出来了,一边用别人的软件看系统温度,一边手工来控制风扇的停和转动,累。

1、主板温度的检测
       笔记本电脑的bios和台式机有一些区别,通常本本的bios ACPI 会有一个热度表述区(ThermalZone) 或其它acpi定义的温度检测区域,读出这个区域的数值,就得到当前主板上温度传感器的值,xp/2000 支持acpi,所以很方便读到。但台式机基本没有ThermalZone,要监测温度,需要扫描系统总线。

如何读取acpi这个区域的数值呢,windows driver 读取这些值用于管理,所以通过WMI 能读到。连接到 WMI 的名字空间,请参考 MSDN 'WMI C++ Application Examples'。这里不做叙述.

  主板温度在wmi中有两个名字:1、ROOT/CIMV2/Win32_TemperatureProbe  2、ROOT/WMI/MSAcpi_ThermalZoneTemperature 先检测 Win32_TemperatureProbe 是否有对象,如没有再检测 MSAcpi_ThermalZoneTemperature 然后读取成员 CurrentTemperature 为当前温度,CriticalTripPoint 为临界温度。此温度是以绝对 0 度开始并以 1/10 度增加,公式如下
 
   当前摄氏度 = (CurrentTemperature - 2732) / 10

2、硬盘温度的监测
   检测硬盘温度的工具或软件,都是通过 S.M.A.R.T来读取,对硬盘直接 DeviceIoControl 或者 WMI 都可以得到SMART值.SMART 数据存储于 WMI 中 ROOT/WMI/MSStorageDriver_ATAPISmartData 命名空间中,其中属性 'VendorSpecific' 包含有硬盘温度的数据,这是ATA标准定义的。可能你读出这些数据来会有些困惑,其实这是一个结构,第一个和第二个字节代表 SMART 版本信息,从第三个字节起定义 SMART 的属性,每个属性为12字节长,每个属性的第一字节为当前属性定义,0x09 定义已经使用的小时数, 0xc2 为温度属性,第五字节表示当前温度。结构如下

struct SmartAttriubtes
        {
            char attrib;
            char flags;
            char worst;
            char normal;
            char current;
            char current1;
            char current2;
            char current3;
            char current4;
            char current5;
            char current6;
            char current7;
        }

struct VendorSpecific
        {
            unsigned short version;
            SmartAttriubtes smartattrib [1];
        }

如笔者硬盘读取如下数值,有些就省略了 {0xa, 0x00, 0x09, 0x32, 0, 0x63, 0x63, 0xc2, 0x03, 0, 0, 0, 0, 0, 0xc2, 0x22, 0, 0x2e, 0x3b, 0x2e, 0, 0, 0, 0x05, 0, 0, ...};

  排列如下
       {
          0xa, 0x00 版本信息
          0x09, 0x32, 0, 0x63, 0x63, [0xc2, 0x03], 0, 0, 0, 0, 0 硬盘使用小时数 这里是 0x3c2 = 962 小时
          0xc2, 0x22, 0, 0x2e, 0x3b, [0x2e], 0, 0, 0, 0x05, 0, 0 这是当前温度 数值为 0x2e = 46 度
       }

win2000 不支持此 WMI 属性,只能通过 DeviceIoControl 得到,如何实现请看考附录 SMART 的OpenSource 连接

3、CPU 的温度检测
      
       新的酷瑞CPU和AMD的CPU 内部都集成有温度传感器DTS (Digital Thermal Sensor),每个核心有一个,以前的移动CPU好像也支持温度探测,但手头没有这样的CPU没法做测试.AMD 的温度值保存在 NB 寄存器中,酷瑞CPU 的 DTS 值保存在 MSR 0x19c 中,可以通过 rdmsr 来读取

这里只说酷睿CPU的读取过程

Intel 定义 eax=6 执行 cpuid,  然后测试 eax 第一位是否为1,如果为1表示CPU支持DTS ,当然之前应该以 eax=0 执行 cpuid 检测 eax 支持的最大命令数,如果小于6就肯定不支持DTS。

读取DTS:1 以 ecx=0xee 执行 rdmsr 指令, 测试 eax 的第30位是否为 1, 如果为 1 表示温度计算的初始值为 85 度否则表示从100度开始计算,这个值称为 Tjunction. 然后以 ecx=0x19c 执行 rdmsr 指令,  eax 的 16:23 位为表示当前DTS 值,这个值并不代表当前温度,而要以下面公式计算.

当前cpu温度 = Tjunction - DTS

注意  signature 为 0x6f1, 0x6f0的 CPU DTS 值直接代表当前温度而不用Tjunction 相减. 而 signature 小于等于 0x6f4 的 Tjunction 一直为100, 如果你是双核的cpu 可以使用 SetProcessAffinityMask API 来指定执行的CPU,以检测这个核心的温度。呵呵,我就不用啦,本本是单核的

另 rdmsr 指令需要运行在 0 级的代码才能执行.所以写一个简单的驱动也是必须的.

如果你想看看效果可以到我的共享资源中下载 FAN1702ii.rar 不操作风扇他还是可以工作的
       http://download.csdn.net/source/185999

22:40 2007-5-27 Treeyan email:yanjiafu33@163.com QQ: 42412685

呵呵,很少写文,不通顺之处请包含,Enjoy!

附录参考

S.M.A.R.T 的 OpenSource
   http://smartlinux.sourceforge.net/smart/index.php

在 intel 网站上的骂站,可以看到关于 DTS 和 Tjunction 的一些信息
   http://softwarecommunity.intel.com/isn/Community/en-US/forums/thread/30231056.aspx
  
   Core temp 讲述她是如何工作的
   http://www.thecoolest.zerobrains.com/CoreTemp/howitworks.html

关于 MSStorageDriver_ATAPISmartData
   http://www.hardforum.com/showthread.php?t=1162248

测试cpu速度,开源
   http://www.diefer.de/speedswitchxp/index.html

如何检测笔记本电脑的主板,cpu,硬盘的温度相关推荐

  1. 检测笔记本电脑的主板,cpu,硬盘的温度

    转自  http://blog.csdn.net/Treeyan 其实不算原创,资料几乎都是通过 google 来自 internet :) 前段时间买了 hp-dv1702 笔记本电脑, 酷睿单核 ...

  2. |--------硬件故障专题--------| 主板.CPU.硬盘.内存.显卡.声卡

    1.开机后提示按F1才能继续[cmos checksum er-ror-fefaults loaded] 答:找一块好的主板电池换上试下,另外cmos ram出了问题也会导致该问题,如果仍不行,建议与 ...

  3. 虚拟机修改主板显卡硬盘过鲁大师去虚拟化防游戏检测完整教程视频

    虚拟机修改主板显卡硬盘过鲁大师去虚拟化防游戏检测完整教程视频

  4. 笔记本电脑硬盘不见了_笔记本电脑找不到硬盘原因及解决方法

    笔记本电脑找不到硬盘怎么办.硬盘在电脑中占据着重要的地位,一旦硬盘出现问题,后果就是不堪设想的,会给自己带来许多不必要的麻烦.因此,今天U大侠小编就和大家说说笔记本电脑找不到硬盘原因及解决方法. 笔记 ...

  5. amd插帧技术如何开启_联想ThinkPad笔记本电脑如何开启CPU的虚拟化技术图文教程...

    联想ThinkPad笔记本电脑如何开启CPU的虚拟化技术图文教程 很多情况下可能我们都需要开启CPU虚拟化技术,例如我们需要打开安卓模拟器,在打开安卓模拟器的时候如果提示您需要CPU虚拟化技术,那么我 ...

  6. 台式计算机主板检测与维修,主板故障!教你如何用主板诊断卡检测维修电脑主板故障...

    电脑主板检测是电脑维修的基础,在很多时候我们都会遇到种种状况,比如 显示器不显示,蓝屏,频繁死机,主板不加电,CPU不工作,开机没反应,主板接电源自己启动,电脑关机CPU风扇依然转动,南北桥开焊或损坏 ...

  7. Linux下查看内存型号、主板、硬盘等等

    @Linux下查看内存型号.主板.硬盘等等 首先查看是否安装了dmidecode工具 [root@algerfan ~]# dmidecode Linux 查看内存的插槽数,已经使用多少插槽.每条内存 ...

  8. 映泰主板CPU风扇速度调节

    一篇参考文章 主板PWM(脉冲宽度调节)的四针智能风扇控制实用的吗?比三针的要好? (1669字) 虚心谦虚 (6305520)于2010/03/11(22:18:28).. AMD盒装CPU自带的风 ...

  9. 联想服务器x3650硬盘黄灯,服务器故障处理 X3650M4主板故障 硬盘黄灯 内存错误 联想(IBM)服务器配件...

    品牌 IBM 配件类型 主板,硬盘,内存,电源 型号 X3650 M4 79159X1X3650M4 E5-2603 V2 4C 1.8GHz,2x8GB, M5110e Raid 0,1, 2X30 ...

最新文章

  1. “上拉电阻与下拉电阻”通俗解读
  2. Cannot run Eclipse; JVM terminated. Exit code=13
  3. python3 字符串、十六进制字符串、数字、字节之间的转换
  4. typescript使用in关键字进行类型守卫
  5. 程序员必知的 Python 陷阱与缺陷列表
  6. python作业题目用户输入行数、输出倒的等腰三角形_智慧职教云课堂APPPython程序设计(常州工业职业技术学院)作业期末考试答案...
  7. android异步编程,AsyncTask简单的异步编程android 中的实现
  8. What is an Operating System?
  9. 分布式期末复习总结(林子雨老师)
  10. 一文读懂《“十四五”软件和信息技术服务业发展规划》
  11. Ubuntu wine 安装qq,微信
  12. FPGA开发板剁手,学生狗省钱大法丨吐血资源
  13. ChatGPT中文使用手册
  14. 产品读书《文案训练手册》
  15. IE、FireFox都支持的收藏本站代码
  16. 手把手教你实战开发黑白棋实时对战游戏
  17. Redis 的特点及命令大全
  18. 鼠标拖拽mousemove和移动端touchmove问题
  19. 防抖节流理解与应用场景
  20. win10电脑怎么设置禁止自动安装软件?

热门文章

  1. halcon例程学习笔记(8)---瓶子编号识别bottle2.hdev
  2. 人脸活体检测、红外人脸数据集下载
  3. ​​​LabVIEW视觉软件使用什么算法
  4. 伴鱼使用教程!【原创】
  5. Linux收音机软件,在Linux终端听收音机
  6. 计算广告4——用户增长
  7. ⑤⭐全网首发☀️数据有道之数据库技术❤️干货大全【持续更新】❗❗❗
  8. 投影向量=投影长度乘以单位向量
  9. 使用python打印九九乘法表
  10. 怎么把PDF文件拆分,PDF拆分软件怎么操作