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

如何从ec中读取cpu温度?

[复制链接]
发表于 2009-3-10 17:29:26 | 显示全部楼层 |阅读模式
char read_ec_ram(char ec_index) 8 S& h. N0 e0 Y( S
{  // Input ec_index = EC RAM Index
1 F4 P1 _- t% m1 v* P  |  __asm{7 k- k6 Q+ s6 J5 c, v8 }
                .486
8 V! [: i  n" ?9 [0 Q    mov al, ec_index+ N. t/ [8 [. c! z
    out 0B3h, al$ k) f( D  @7 X' B7 C# ^& A! i' P0 f
    mov al, 0E4h! f. j, l$ s  k: I
    out 0B2h, al         // Call S/W SMI to read EC RAM; K; R9 \% T( I3 V* W1 U
    in  al, 0B3h        // Read data store to I/O port 0B3h9 ~; I3 e! g. b5 N5 L# R9 J' K
    mov ec_index, al        // Save read data to ec_index./ t' y8 t" d. k4 ?3 j2 ]
  } 9 ?  F7 @# B; r+ _! n: ]
        return ec_index&0xff;
2 q0 Y9 ?9 L, U. _}5 p0 R* |$ |) ?4 |% u4 e& \/ z
南狼老师能否帮忙解释一下上面的代码,我只知道是通过bios读取ec的内容。
发表于 2009-3-10 18:05:59 | 显示全部楼层
  1. char read_ec_ram(char ec_index) ! ?5 ]' B, P5 @4 P- r4 ^. z
  2. { // Input ec_index = EC RAM Index; r, _, h2 q- V2 a5 y3 j
  3.   __asm{
    & J/ l, b, d, S3 v
  4.     .486 // 使用486指令集0 ]/ f/ s/ d8 U* e6 r$ S$ e
  5.     mov al, ec_index    // EC对应的SW SMI No.2 a: B/ h/ _6 l1 N/ f4 R, s7 B
  6.     out 0B3h, al        // 送到 S/W SMI data 寄存器
    4 i  s9 y3 A+ H4 b6 q
  7.     mov al, 0E4h        // 触发 S/W SMI, No. 0E4h6 Q/ `) o; g# F7 ]* Q
  8.     out 0B2h, al        // Call S/W SMI to read EC RAM
    3 t( K% T8 ]5 o" d, H/ F
  9.     in  al, 0B3h        // Read data store to I/O port 0B3h0 T5 f$ Z6 |2 F0 r7 v4 |, F5 X
  10.     mov ec_index, al    // Save read data to ec_index
    8 x5 D  _. x- O7 Z
  11.   }
    6 L2 Q3 R, f5 m* {
  12.   return ec_index&0xff;& W! ~! _- c8 _  o
  13. }
复制代码
上面就是调用BIOS的S/W SMI读取的,这里什么都看不到,
3 J" Z4 F: r2 h/ H: @除了知道S/W SMI 0E4h的ec_index值对应的是读CPU温度的功能.7 s1 q; K# m+ D* m9 P

2 {" e8 D8 |1 l4 ]; o猜的.
5 g8 [* R6 p' \, K2 v. C( W: Q# X! ~; x0 V! ]( ^0 p: Q. p
[ 本帖最后由 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的特定位置。: A/ z. U, [  Y
比如100ms读一次,这样cpu的温度就能及时的更新。BIOS 通过out 80 command
+ i* O1 L- T3 d, n5 S" `到66 port读取EC Ram信息,这样就可以得到cpu温度了。8 z* G) w" u  L" `. M8 [8 ?4 g
7 G' |0 P" Z- ~7 L
你的code的原理应该是:
9 r. u/ I% W4 g4 \3 }通过一个sw smi call BIOS的code,BIOS在smi handler中下command 读取EC ! U9 m" I3 ?8 i
Ram获得CPU温度。& A; ]; ^0 U9 z: g

0 P7 p' n6 H" p  ?[ 本帖最后由 peterhu 于 2009-3-12 15:04 编辑 ]
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-11-1 20:29 , Processed in 0.479011 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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