找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 24894|回复: 13

请教各位大侠如何在OS下获取NB的CPU温度和风扇转速(VC)

[复制链接]
发表于 2010-5-13 15:55:51 | 显示全部楼层 |阅读模式
首先谢谢各位的关注!
9 V' k) ]3 Q6 ]% ?& I* y* |$ b+ E- Y! Q. J
小弟现在需要做一个在OS下实时获取NB的CPU温度和风扇转速的小工具(在VC平台下)。目前已知该款NB的EC是“WPCE775X”,其中“ 50H:CPU Temperature; 51H: CPU Fan Speed(预留)”。1 Y0 ~. O" H9 B0 h" z4 R* Y

% b9 W! d- K1 l) w- B0 C1 w由于小弟初次接触此方面,了解甚少,在查找了许多资料仍没有头绪,特来此请教各位高人,请各位不吝赐教,指点一下我,该从何下手,需要哪方面的资料和知识。) |! ?( N0 y' ]6 U2 a9 P
4 v( ?  p; w7 t: _5 l* h
再次拜谢,期待各位的指点!~
发表于 2010-5-13 17:00:02 | 显示全部楼层
50H和51H是什么?EC acpi space or other?
回复

使用道具 举报

 楼主| 发表于 2010-5-14 10:27:30 | 显示全部楼层

回复 2# bini 的帖子

首先谢谢“bini”管理员的关注。5 i8 A3 l7 n6 G2 `5 s  r8 ^) O
50H和51H是EC Spec资料中EC Space表格里一些信息,我取出来给大家做参考的。我猜这EC Space与南狼大侠所说的EC acpi space是一样的吧?在Windows下直接读写这“50H和51H”,是否就是对应的CPU温度和风扇转速。小弟另有疑问,手头现有IO底层读写驱动,可以正确读取RW-everything工具中的IO Space列表的信息。但如何读取上面所提的“50H和51H”呢?& L1 O. P, [9 n8 h5 D4 U
期待南狼大写进一步指点,小弟再次拜谢!
回复

使用道具 举报

发表于 2010-5-14 20:16:34 | 显示全部楼层
  1. #define                EC_GSX        0x88* d* `. W6 R) U! W# Q1 Y
  2. #define                EC_GSY        0x89
    6 d$ w6 O3 V* q1 R) f8 I# d1 h+ G
  3. #define                EC_GSZ        0x8A& f+ z) d& @- ~7 R
  4. #define                EC_TIMEOUT        1000000
    ' t- `6 X) `# v, x" z  T% G
  5. void        CgsDemoDlg::ecWrite66(BYTE bData), P0 @% }" v7 w  w% C
  6. {' q7 ?- ?! i: q1 R
  7.         DWORD        dwStatus,dwTimeOut=EC_TIMEOUT;
    $ }; K5 q) B: I' Y* _
  8. 2 T& T1 J9 D6 d9 `4 O& k! p( M
  9.         do7 ?! U# X3 @4 p5 L. w! b& v
  10.         {- I4 I& R1 w/ Z( K1 L
  11.                 GetPortVal(0x66,&dwStatus,1);
    , z6 W! I' Z% n5 A1 Y" }  ]
  12.                 dwTimeOut --;
    , c4 ^4 C! J! `2 r, ^
  13.         }while((dwStatus & 2) !=0 && dwTimeOut>0);. h( P5 b" m1 i. V* H6 g
  14.         SetPortVal(0x66,(DWORD)bData,1);7 m: n2 N# A3 }- B" T7 L! X4 G' [
  15. }1 q9 H! Q3 m- L- @8 j% N& Z' j' B- Q
  16. void        CgsDemoDlg::ecWrite62(BYTE bData)/ ^+ W- C6 Q( I( d4 H
  17. {0 K& b" s: t9 ?3 l/ {
  18.         DWORD dwStatus,dwTimeOut=EC_TIMEOUT;
    & f7 j4 h) G: }; P
  19.         do
    0 y6 c  W$ J; \( @
  20.         {
    / H1 d' C/ ?* a, s5 T. d7 i
  21.                 GetPortVal(0x66,&dwStatus,1);
    5 q' W! G! n4 H& d' @
  22.                 dwTimeOut --;
    9 M# e- a! I) Q. W$ D; ~
  23.         }while((dwStatus & 2) !=0 && dwTimeOut>0);
    - q* L" Y* J4 w4 V' e
  24.         SetPortVal(0x62,(DWORD)bData,1);# f8 `* y) ]% b- a2 ]2 Z9 [% e
  25. }7 I$ v1 o) r5 d3 b  S
  26. BYTE        CgsDemoDlg::ecRead62()
    9 x4 u" g" i" |. y
  27. {
    * Y( s' p7 G) W
  28.         DWORD dwStatus,dwData,dwTimeOut=EC_TIMEOUT;
    0 {6 t: b( ^2 O  W. L2 ]
  29.         do
    6 L# e+ ?* j* p& V  Z
  30.         {6 H: ]: Y3 ~  [+ [7 I3 D
  31.                 GetPortVal(0x66,&dwStatus,1);( A& J1 J3 z1 m' }( l
  32.                 dwTimeOut --;  r& D2 H* k6 i- F# m
  33.         }while((dwStatus & 1) ==0 && dwTimeOut>0);
    + O8 O% C* p  Y
  34.         GetPortVal(0x62,&dwData,1);- V# t8 k5 ^# W, k- }  t' {
  35.         return (BYTE)dwData;0 A9 i* F, b2 ^- X, d  l
  36. }$ @( P9 d2 y9 q. t
  37. BYTE        CgsDemoDlg::ecRead(BYTE bIndex)0 w; H" v2 K3 h; C+ Z. }0 e! K$ s3 x
  38. {& U# J  F9 ^! \  u, A
  39.         ecWrite66(0x80);9 F% g5 F+ d" L8 @
  40.         ecWrite62(bIndex);
    8 i* f0 _, U) ]; Y3 T; ^# Q
  41.         return ecRead62();
    # u: V, ^; f% V, `; w! F6 V0 j5 ?
  42. }
    9 k3 R) S6 h. v* H# r$ ?8 W
  43. void        CgsDemoDlg::ecWrite(BYTE bIndex,BYTE bValue)
    3 ~4 h+ C, A. g6 B4 x- K) l
  44. {
    - ~3 o0 l( H8 g/ x! o- t5 q) j% t$ n
  45.         ecWrite66(0x81);* E% O! y* M+ n4 v5 V4 _3 h! O# w
  46.         ecWrite62(bIndex);
      `, o& {3 a$ x! _& \7 M0 p
  47.         ecWrite62(bValue);
    + |, V/ V0 p2 X5 s# V: A7 Z  W
  48. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2010-5-21 11:49:29 | 显示全部楼层

回复 4# qdk0901 的帖子

非常感谢“qdk0901”的帮助,这几天小弟用此代码测试,为什么每次进GetPortVal(0x66,&dwStatus,1)循环,都是因超时退出,而非状态字合乎条件退出,研究了几天,百思不得其解,还请再次指教。
7 R9 [9 Z0 H. j* i" s另:因小弟对com串口比较熟悉,所以想用winio读写串口来熟悉了解一下winio的工作原理,用winio方式,我去读写串口寄存器的数据,直接读写,读回的数据都不正确,但在读之前CreateFile一下com端口,就可以正确读写了,难道winio不能直接读写串口吗。# V$ q! C& ^% L( o: X2 u

4 ^/ ]$ U9 r) T) ^$ X还请您不吝赐教,小弟感激不尽,小弟不才,研究这个好久了,仍没有太大的进展。
回复

使用道具 举报

发表于 2010-5-21 16:46:04 | 显示全部楼层
回复

使用道具 举报

发表于 2010-5-25 12:41:25 | 显示全部楼层

回复 5# flyer 的帖子

我猜你没有初始化Winio
1 p, @2 Z; t0 I2 H* P4 I/ s( j2 N所以建议你参考一下Winio自带的例子。
回复

使用道具 举报

 楼主| 发表于 2010-5-26 14:43:10 | 显示全部楼层

回复 7# qdk0901 的帖子

谢谢“qdk0901”的建议。, n" U0 C' V/ z& T5 W
Winio已经初始化成功了,函数InitializeWinIo()的返回值正常,而且我用winio方式去读写kbc的端口0x60和0x64,均正常。只是读EC端口0x62和0x66就不正常了。还有一个现象就是用工具RW去读EC,机器出现假死现象。
: s% h) s4 P/ j& W
0 D0 V8 F2 ~& R+ }' V6 c不知“qdk0901”可否有其他建议。
回复

使用道具 举报

 楼主| 发表于 2010-5-31 13:45:38 | 显示全部楼层
谢谢各位的指导,本人又在其他几台NB测试代码,可正常读写EC,造成读写超时的问题,跟所测试的NB有关,前几台NB都是Dell品牌的,用RW工具也无法读取EC部分模块,但在HP的NB上就可顺利读写,代码也能正常读写。- f) F2 P/ K3 p3 }8 t

+ \9 a0 u' {% x) p% p小弟另有不解,功能强大的RW工具对Dell这几款NB难道就真的束手无策吗,还是有其他我没注意的地方!~
回复

使用道具 举报

发表于 2010-6-8 20:39:52 | 显示全部楼层
请教,楼主所说的RW工具全称是什么?是对特定厂商的EC使用还是对所有厂商的EC都可以使用?
回复

使用道具 举报

 楼主| 发表于 2010-6-9 17:32:40 | 显示全部楼层

回复 10# zzyhello 的帖子

http://www.ufoit.com/thread-5-1-1.html
$ o9 N% n! g& k2 g4 C7 E; X
: C5 @( o- ?8 |4 }4 o0 [5 f[ 本帖最后由 flyer 于 2010-6-10 10:35 编辑 ]
回复

使用道具 举报

发表于 2010-6-9 18:05:41 | 显示全部楼层
RW-Everything -- 作者:Ckimchan.tw@yahoo.com.tw for Windows 98/ME/2000/XP/XP64 & VISTA兼容  L7 e1 s6 V( s/ C& g2 f
本论坛就有,在BIOS工具集:http://www.ufoit.com/thread-5-1-1.html
回复

使用道具 举报

发表于 2010-6-9 18:10:18 | 显示全部楼层
NND,RW竟然需要翻墙。FK,赶紧我上传一个,在BIOS工具包内含RW1.4
回复

使用道具 举报

 楼主| 发表于 2010-6-10 10:32:02 | 显示全部楼层

回复 13# bini 的帖子

抱歉,南狼大侠,鄙人没有别的意思,只是看到这位朋友需要,所以先在本论坛找了一下,当时没有找到,就直接把自己当初下的地址贴过来了。如有冒犯,还请见谅!~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-4-24 22:41 , Processed in 0.041339 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表