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

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

[复制链接]
发表于 2010-5-13 15:55:51 | 显示全部楼层 |阅读模式
首先谢谢各位的关注!
3 G9 O( k; M4 j/ `( N3 J9 |- J
( x2 D" T* ^2 ~' M  B' f. B小弟现在需要做一个在OS下实时获取NB的CPU温度和风扇转速的小工具(在VC平台下)。目前已知该款NB的EC是“WPCE775X”,其中“ 50H:CPU Temperature; 51H: CPU Fan Speed(预留)”。1 z( J! K! t) ]5 e

$ p: D! k* O/ a+ M+ j2 k! u, F由于小弟初次接触此方面,了解甚少,在查找了许多资料仍没有头绪,特来此请教各位高人,请各位不吝赐教,指点一下我,该从何下手,需要哪方面的资料和知识。+ f, g/ X. d: Z" }$ i$ a

7 E3 I" H$ e: l, R( p! \! F再次拜谢,期待各位的指点!~
发表于 2010-5-13 17:00:02 | 显示全部楼层
50H和51H是什么?EC acpi space or other?
回复

使用道具 举报

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

回复 2# bini 的帖子

首先谢谢“bini”管理员的关注。# U7 F- I% _% O, T1 p# Y$ X
50H和51H是EC Spec资料中EC Space表格里一些信息,我取出来给大家做参考的。我猜这EC Space与南狼大侠所说的EC acpi space是一样的吧?在Windows下直接读写这“50H和51H”,是否就是对应的CPU温度和风扇转速。小弟另有疑问,手头现有IO底层读写驱动,可以正确读取RW-everything工具中的IO Space列表的信息。但如何读取上面所提的“50H和51H”呢?/ k, v! I& K3 {; c* L0 C( l1 ^1 ~( O
期待南狼大写进一步指点,小弟再次拜谢!
回复

使用道具 举报

发表于 2010-5-14 20:16:34 | 显示全部楼层
  1. #define                EC_GSX        0x885 ?; Q/ h0 j! Q$ O
  2. #define                EC_GSY        0x89
    3 a+ h5 O- h7 F0 d' j3 w7 Q. ~3 R% B: u3 \
  3. #define                EC_GSZ        0x8A) J8 V2 O% S$ v3 p9 B
  4. #define                EC_TIMEOUT        10000008 z8 f, c/ O0 \3 O  ^0 z4 i$ \
  5. void        CgsDemoDlg::ecWrite66(BYTE bData)0 F# h8 q% N7 e* ?* P/ Y9 p9 a" o
  6. {
    1 \9 ]: D1 g, d. i8 y4 I3 P- f! X, F
  7.         DWORD        dwStatus,dwTimeOut=EC_TIMEOUT;
    % V4 U7 ^  s- a, w7 p, s, E7 y

  8.   d/ x+ t7 J3 q* |) M/ d% Q
  9.         do
    0 ?% f: U/ o5 `' Z7 u& Z
  10.         {
    + w/ U! z1 y: R( x5 H7 w' J" D( \- f
  11.                 GetPortVal(0x66,&dwStatus,1);
    * t& y+ F( C1 z; G' r
  12.                 dwTimeOut --;  K' d1 j- U" I% ?0 P" F
  13.         }while((dwStatus & 2) !=0 && dwTimeOut>0);* H. l6 ^* }# M$ ^9 z# Q
  14.         SetPortVal(0x66,(DWORD)bData,1);9 p8 s1 z1 G/ p
  15. }8 }# h1 W, A& `% p
  16. void        CgsDemoDlg::ecWrite62(BYTE bData); {  s& J3 G- H7 L: a
  17. {7 M+ E1 A; b5 b% Z: ~
  18.         DWORD dwStatus,dwTimeOut=EC_TIMEOUT;
    + s, j( ~8 C2 V) _
  19.         do6 r6 A* s' W2 b. c  J' B+ j
  20.         {
      A1 T: ]8 {1 y5 J1 J  j% s+ C
  21.                 GetPortVal(0x66,&dwStatus,1);
    0 {8 f0 F) I5 J7 j
  22.                 dwTimeOut --;: `2 D) Y+ F% l" o9 Q/ e( k
  23.         }while((dwStatus & 2) !=0 && dwTimeOut>0);4 e* y/ }* j; p3 d- Q* i5 ^
  24.         SetPortVal(0x62,(DWORD)bData,1);; e. V* Q7 {+ |- X
  25. }9 F7 ~( Q) r! I) h. w7 w  D
  26. BYTE        CgsDemoDlg::ecRead62()
    1 V; g( @3 g8 T$ j( F2 F. J
  27. {8 c& |9 W  a5 e9 X
  28.         DWORD dwStatus,dwData,dwTimeOut=EC_TIMEOUT;& ~* g8 n4 w6 W! u" W6 M0 r
  29.         do
    5 y# v$ F. j, W) j
  30.         {
    3 O- I! Y7 e/ W& ~1 O
  31.                 GetPortVal(0x66,&dwStatus,1);
    - [* ]& c  E; }# e
  32.                 dwTimeOut --;# j" g2 }+ a: Q% z
  33.         }while((dwStatus & 1) ==0 && dwTimeOut>0);
    0 m& x7 N( `8 X7 J% x) e3 ]
  34.         GetPortVal(0x62,&dwData,1);+ a+ H+ f- }" A' d- B
  35.         return (BYTE)dwData;
    7 l7 d; P. f+ Q( e
  36. }& N+ M, V- D  w+ \# b2 p" s- ^' m' ^
  37. BYTE        CgsDemoDlg::ecRead(BYTE bIndex)6 N' ]1 p  U/ m: G) h+ W
  38. {$ C  Q6 Q* S1 [0 H+ I* B
  39.         ecWrite66(0x80);, x  L! t1 J) N( Q6 C$ ^& Q
  40.         ecWrite62(bIndex);" \& K( A* N9 K/ [1 D/ G, d
  41.         return ecRead62();
      }* |, z4 M( \
  42. }# J! m/ i7 S/ _* R, [1 _1 `
  43. void        CgsDemoDlg::ecWrite(BYTE bIndex,BYTE bValue)
    ) \6 s8 E+ Y  S1 v, Z
  44. {
    ! \: B  p# j. W9 U* ^- I
  45.         ecWrite66(0x81);* U7 L" w% {* |" T
  46.         ecWrite62(bIndex);: Z" \% m7 W; F
  47.         ecWrite62(bValue);
    $ p; d2 n: l  R( f" {7 Y" C
  48. }
复制代码
回复

使用道具 举报

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

回复 4# qdk0901 的帖子

非常感谢“qdk0901”的帮助,这几天小弟用此代码测试,为什么每次进GetPortVal(0x66,&dwStatus,1)循环,都是因超时退出,而非状态字合乎条件退出,研究了几天,百思不得其解,还请再次指教。& A4 I: w5 B8 U0 I
另:因小弟对com串口比较熟悉,所以想用winio读写串口来熟悉了解一下winio的工作原理,用winio方式,我去读写串口寄存器的数据,直接读写,读回的数据都不正确,但在读之前CreateFile一下com端口,就可以正确读写了,难道winio不能直接读写串口吗。3 {. _, v7 M% _0 ^, ~' z$ E8 R
' V5 n. |7 p+ m" d/ B' Q' H
还请您不吝赐教,小弟感激不尽,小弟不才,研究这个好久了,仍没有太大的进展。
回复

使用道具 举报

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

使用道具 举报

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

回复 5# flyer 的帖子

我猜你没有初始化Winio
% m! Q+ E; k6 l5 b- K1 a7 f/ ?所以建议你参考一下Winio自带的例子。
回复

使用道具 举报

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

回复 7# qdk0901 的帖子

谢谢“qdk0901”的建议。
4 s" j" ]* D* L- [4 P9 HWinio已经初始化成功了,函数InitializeWinIo()的返回值正常,而且我用winio方式去读写kbc的端口0x60和0x64,均正常。只是读EC端口0x62和0x66就不正常了。还有一个现象就是用工具RW去读EC,机器出现假死现象。
$ t. a8 @9 e' ?$ q# q
  c/ d8 a* O7 _4 `1 h不知“qdk0901”可否有其他建议。
回复

使用道具 举报

 楼主| 发表于 2010-5-31 13:45:38 | 显示全部楼层
谢谢各位的指导,本人又在其他几台NB测试代码,可正常读写EC,造成读写超时的问题,跟所测试的NB有关,前几台NB都是Dell品牌的,用RW工具也无法读取EC部分模块,但在HP的NB上就可顺利读写,代码也能正常读写。
. ^4 r  J/ f( y4 j3 C+ ]& Q
; k+ d" m  N) W: n9 Z5 T小弟另有不解,功能强大的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
# _* {8 W. H9 Q% x4 ?! Z$ _, A& \- \
[ 本帖最后由 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兼容# M: c! V6 J% `4 X7 l$ 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, 2025-4-5 00:27 , Processed in 0.032192 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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