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

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

[复制链接]
发表于 2010-5-13 15:55:51 | 显示全部楼层 |阅读模式
首先谢谢各位的关注!
7 p3 y; o% K/ m  i
) M' l) c2 W9 }! l! z( B. `小弟现在需要做一个在OS下实时获取NB的CPU温度和风扇转速的小工具(在VC平台下)。目前已知该款NB的EC是“WPCE775X”,其中“ 50H:CPU Temperature; 51H: CPU Fan Speed(预留)”。$ H2 A4 ]% P, N  Z; S& B) U! ~! m

5 y% }8 E/ d6 N由于小弟初次接触此方面,了解甚少,在查找了许多资料仍没有头绪,特来此请教各位高人,请各位不吝赐教,指点一下我,该从何下手,需要哪方面的资料和知识。
& R0 a" h, \& }$ h! B 0 ~$ z5 h+ B$ |: r6 S) n
再次拜谢,期待各位的指点!~
发表于 2010-5-13 17:00:02 | 显示全部楼层
50H和51H是什么?EC acpi space or other?
回复

使用道具 举报

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

回复 2# bini 的帖子

首先谢谢“bini”管理员的关注。
5 v3 p) \4 h% o+ X50H和51H是EC Spec资料中EC Space表格里一些信息,我取出来给大家做参考的。我猜这EC Space与南狼大侠所说的EC acpi space是一样的吧?在Windows下直接读写这“50H和51H”,是否就是对应的CPU温度和风扇转速。小弟另有疑问,手头现有IO底层读写驱动,可以正确读取RW-everything工具中的IO Space列表的信息。但如何读取上面所提的“50H和51H”呢?, C; v9 ^0 y$ v+ h
期待南狼大写进一步指点,小弟再次拜谢!
回复

使用道具 举报

发表于 2010-5-14 20:16:34 | 显示全部楼层
  1. #define                EC_GSX        0x88
    # A/ s: I6 w2 X& u8 ]8 \
  2. #define                EC_GSY        0x89/ t& H% C$ g( g* g% d# |% Z9 C
  3. #define                EC_GSZ        0x8A
      p0 w6 u9 y0 l' ~3 o; j! I1 }
  4. #define                EC_TIMEOUT        1000000
    4 R5 ]) ~1 l& d8 ]* t; }1 ^
  5. void        CgsDemoDlg::ecWrite66(BYTE bData)# h3 I  Y% _- C9 p3 K, G
  6. {
    ( ~$ K3 Q: q% O) y7 v
  7.         DWORD        dwStatus,dwTimeOut=EC_TIMEOUT;
    % o3 a1 |$ T% ~/ U1 f. {) d
  8. ) z% a1 T; k3 j/ |: s
  9.         do
      D1 ~& u9 X$ ^; e( D% a
  10.         {0 r/ H. R3 Y8 l) c- q% x
  11.                 GetPortVal(0x66,&dwStatus,1);
    1 i1 Z) V" N7 \1 H
  12.                 dwTimeOut --;
    4 u% ~) A8 ~6 y  ~4 N# N! x
  13.         }while((dwStatus & 2) !=0 && dwTimeOut>0);; U4 A/ |6 ]% V* D" Y, P! ~3 n# P
  14.         SetPortVal(0x66,(DWORD)bData,1);
    ; q* ?8 p+ p, z, u. \; o- ]
  15. }9 Z3 q" Y4 B9 W% n, B
  16. void        CgsDemoDlg::ecWrite62(BYTE bData): t- [/ p% P* b' G- T
  17. {
    9 v! y& X! ~! o+ J, S1 R* T) Z" s
  18.         DWORD dwStatus,dwTimeOut=EC_TIMEOUT;  f/ d8 C$ W: ~9 `
  19.         do' I- D; G0 `5 P, a1 Y, j
  20.         {
    . U7 Y# l% X9 @6 [$ {
  21.                 GetPortVal(0x66,&dwStatus,1);, J" h# g3 I+ D# l5 s& V
  22.                 dwTimeOut --;3 L  c& H+ g. ]* L/ {3 }
  23.         }while((dwStatus & 2) !=0 && dwTimeOut>0);. X. O* R. i0 X
  24.         SetPortVal(0x62,(DWORD)bData,1);5 o0 D* d% w7 b6 ?6 O0 Z
  25. }& o9 v) a, n6 J* e+ m
  26. BYTE        CgsDemoDlg::ecRead62()5 j: A3 G* Y* T
  27. {
    + v+ t$ B9 R6 |+ K8 F+ o
  28.         DWORD dwStatus,dwData,dwTimeOut=EC_TIMEOUT;
    8 Z" y9 y: o6 U3 ^; z
  29.         do! P4 N+ |4 r- j8 d9 `4 y* J( H1 a
  30.         {
    % c+ T# R4 D$ \, N+ A- p5 T
  31.                 GetPortVal(0x66,&dwStatus,1);6 }! V5 ^+ B; U3 C
  32.                 dwTimeOut --;) z9 q7 V8 I1 T- O
  33.         }while((dwStatus & 1) ==0 && dwTimeOut>0);
    3 X7 E; h/ m4 B& q
  34.         GetPortVal(0x62,&dwData,1);
    : H1 W" D' z/ V- j3 _2 ?
  35.         return (BYTE)dwData;
    1 p% e! H2 ^! Y! i3 [
  36. }
    + B+ U1 R! z# g4 a
  37. BYTE        CgsDemoDlg::ecRead(BYTE bIndex)% \% a1 f0 J6 \# F0 m2 N
  38. {
    + b! O3 V5 |* t+ H( j0 E: C
  39.         ecWrite66(0x80);
    7 T" x; }0 w2 w, a+ x
  40.         ecWrite62(bIndex);/ [7 a# e  R) s( a" H- {
  41.         return ecRead62();( k3 L4 C3 G% D8 P
  42. }9 i. [4 K4 G( p/ N7 R
  43. void        CgsDemoDlg::ecWrite(BYTE bIndex,BYTE bValue)
    1 B5 U: i. e" s2 k
  44. {
    ( q' M% a2 ?% h5 y
  45.         ecWrite66(0x81);
    % N( Z! }! C! w* X: I; W( [: B2 z* k
  46.         ecWrite62(bIndex);1 ]$ F& c) b/ S7 c; ?, ^
  47.         ecWrite62(bValue);
    ! Y/ O2 @1 T: z- ?6 z. w& M
  48. }
复制代码
回复

使用道具 举报

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

回复 4# qdk0901 的帖子

非常感谢“qdk0901”的帮助,这几天小弟用此代码测试,为什么每次进GetPortVal(0x66,&dwStatus,1)循环,都是因超时退出,而非状态字合乎条件退出,研究了几天,百思不得其解,还请再次指教。* g( O6 P2 i4 q8 Q
另:因小弟对com串口比较熟悉,所以想用winio读写串口来熟悉了解一下winio的工作原理,用winio方式,我去读写串口寄存器的数据,直接读写,读回的数据都不正确,但在读之前CreateFile一下com端口,就可以正确读写了,难道winio不能直接读写串口吗。
' ]8 o1 G' K- @2 K. E4 X& A7 s9 H4 R9 U1 P) c
还请您不吝赐教,小弟感激不尽,小弟不才,研究这个好久了,仍没有太大的进展。
回复

使用道具 举报

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

使用道具 举报

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

回复 5# flyer 的帖子

我猜你没有初始化Winio
& I5 Z& \1 P; x+ [所以建议你参考一下Winio自带的例子。
回复

使用道具 举报

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

回复 7# qdk0901 的帖子

谢谢“qdk0901”的建议。8 C# C/ d' _" O4 H6 M6 V+ S( o5 `
Winio已经初始化成功了,函数InitializeWinIo()的返回值正常,而且我用winio方式去读写kbc的端口0x60和0x64,均正常。只是读EC端口0x62和0x66就不正常了。还有一个现象就是用工具RW去读EC,机器出现假死现象。
+ l$ L9 x+ K8 h  X, @
9 T) p& i7 h( T+ S3 e% K1 u! f( [- d不知“qdk0901”可否有其他建议。
回复

使用道具 举报

 楼主| 发表于 2010-5-31 13:45:38 | 显示全部楼层
谢谢各位的指导,本人又在其他几台NB测试代码,可正常读写EC,造成读写超时的问题,跟所测试的NB有关,前几台NB都是Dell品牌的,用RW工具也无法读取EC部分模块,但在HP的NB上就可顺利读写,代码也能正常读写。
) ~- i3 O8 h- P  N0 S# F* C+ w( o8 u7 |
小弟另有不解,功能强大的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' m0 V5 R8 q. H. b1 G6 d* F

) N. ?0 O7 ~; ]+ U[ 本帖最后由 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兼容8 c; V3 j- v5 x
本论坛就有,在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-10-20 08:34 , Processed in 0.070357 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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