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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index)
" p# `( p# }' B0 k{  // Input ec_index = EC RAM Index  G5 m, E" S0 S7 }; k# \0 x. h
  __asm{2 u; v- j0 s/ j) m  k( i
                .486
6 I0 a& k) E3 A- i" w" Z    mov al, ec_index
. D5 _8 B+ {3 s    out 0B3h, al& h, x0 E" Q8 X9 U
    mov al, 0E4h8 n$ Y9 o& h# ^7 x# k
    out 0B2h, al         // Call S/W SMI to read EC RAM! g/ B5 J. c) ^
    in  al, 0B3h        // Read data store to I/O port 0B3h
. ~* x1 W' M7 s9 X( b2 X. X    mov ec_index, al        // Save read data to ec_index.1 f; N, e8 T, E6 a. A1 N; U
  }
  C5 \7 A$ k8 x1 e2 T4 k; @6 s        return ec_index&0xff;5 n. g7 z+ ]$ S( f  b; U& L3 F+ C
}+ z6 g3 C3 ~! s' V. a
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) . h) V, i6 T( _& W6 e! E1 J2 C
  2. { // Input ec_index = EC RAM Index
    4 D( B3 k  V4 I% l2 F+ t
  3.   __asm{5 e4 F& i3 ]" Y9 u
  4.     .486 // 使用486指令集
    % V9 a2 a3 T* I* ^' k: W6 L
  5.     mov al, ec_index    // EC对应的SW SMI No.
    ! {0 w7 c" S) n8 _* q
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器
    * v! P! N( i5 f/ I+ R( i5 w* T
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h
    ; Y; \% O: _5 Q& A' P' ~
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM5 [2 {9 e& a) {- h8 a% C
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h
    ' I: V" n4 M. G6 H5 v
  10.     mov ec_index, al    // Save read data to ec_index
    , a8 s' ?6 \* U
  11.   }7 q) Y) a) b6 f3 A2 `
  12.   return ec_index&0xff;& v( S5 d; v6 N, o* |! n
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到," D9 W) r* I5 I
除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.! ~" ^  j, G$ _6 w& E; ?+ S
) v  W" _5 F3 F+ G$ p
猜的.8 C: c! U" c. N! P$ N. ?$ M: _
/ _/ p7 @1 V: ]. q- |
[ 本帖最后由 xtdumpling 于 2009-3-10 18:10 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-3-11 08:19:23 | 显示全部楼层
不管怎样,谢谢楼上的了!实际上我是不知如何通过BIOS SMI 去读取EC的内容,能否帮忙详细解释一下原理?多谢了!
回复

使用道具 举报

发表于 2009-3-11 10:14:47 | 显示全部楼层
CPU的温度被放在EC RAM中的一个位置,BIOS如果需要CPU的温度就直接从那个位置读取就可以了.
回复

使用道具 举报

 楼主| 发表于 2009-3-11 10:27:21 | 显示全部楼层
嗯,但我不知道具体实现的过程和原理,既然放在ec ram 中,那应该需要ec code事先读取cpu 温度。
回复

使用道具 举报

发表于 2009-3-12 10:28:37 | 显示全部楼层
EC 通过smbus定时读取thermal sensor获取cpu的温度,存在EC Ram的特定位置。9 T% v; w, E. q8 h/ c- i/ _
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command 9 t+ w( p' s% F0 e- V. U7 \
到66 port读取EC Ram信息,这样就可以得到cpu温度了。
2 ~2 t- x9 T: O+ V# I' H- f
: p: ?4 |: I; D2 B6 ~! }你的code的原理应该是:
+ S9 a# L2 G2 k6 a' Q通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC
% M) K; H( o# y+ b4 {; ?) mRam获得CPU温度。5 q* Z" e% B9 O( k
& d6 z0 {( ~, K( v4 l9 B, d2 x
[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-3-12 12:19:46 | 显示全部楼层
谢谢peterhu的解释!看来要想完全了解整个过程,需要先打打基础!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 14:29 , Processed in 0.026378 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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