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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
) d+ _/ P: U; |! {. f可惜读取不到正确值。一直读的是FEh....../ x7 P' k+ Y5 ^4 u4 a" W3 d
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
5 \" O8 w" {0 m8 ~7 b. k$ D% M
8 C: d5 a$ c+ p. ?代码如下(masm5编译链接通过,DOS下运行):3 D) e, z/ R  t9 b

8 e2 R# V. Y8 D4 N( y& M7 N, i% cassume cs:code,ds:data- H! u3 F3 O3 J! g9 j% G8 H" g
0 ]6 Y% O( O2 I4 Q! ~
data segment  + x$ l% M. I' c9 F" f  X- b
        EC_CMD_PORT equ 66h         ;地址端口   
9 F  N7 S0 K: @- a        EC_DATA_PORT equ 62h         ;数据端口   
. r& T; f: V! m        CMD_READ_EC equ 80h         ;读寄存器命令   
& A; [' W. w; |$ s! R' y        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   & B, u: c5 t5 q/ X9 M1 ]
data ends8 c4 l; F$ n. W" }) S, k9 E
  
$ |/ p/ z4 T# {, g! Ncode segment ( v& w& G7 u8 ~# \: u
start:   
) ?5 i  I) Z" F9 n3 J; I; `5 C  mov al,CMD_READ_EC   * G3 @7 L) ]9 b
  call write_ec_cmd                ;写80h到0x66h端口
" f- i: {. U0 b! ?  I& I  mov ax,POLLING_DATA           # D( p  I% E' W1 t$ z: k/ C2 |- Q
  call write_ec_data                ;写ECRAM地址到0x62h端口
2 I" k- [2 i7 q6 A3 @- [. K: _  call read_ec_data                ;从0x62h读数据1 V, {- A3 k3 r4 }
1 A9 _- j  d: y+ A  Y' O
  mov ax,4c00h  
4 `* {5 e+ I4 h4 N4 j' W" I  int 21h& [4 z/ h. J7 z2 g! A8 A
: r( @' ?/ D. E3 i
write_ec_cmd:
. w1 G3 p, a  `8 a6 D/ ?  mov ah,al6 r/ S( ^% ]/ g" A/ }2 ?& ?: O
  call pmuWait4IBE
' g4 ?- n9 q& W% }  mov al,ah
0 w/ E% t9 Y+ u8 ^  ~  out EC_CMD_PORT,al5 L; F7 ^8 Z3 D& A
  ret& w+ b4 z0 o/ z6 k
7 ~! }& Y; z( K  `) T5 f
write_ec_data:
) }7 z, m" k, i) w  G& `6 [+ n# J  mov ah,al9 w; T0 c3 L+ C9 q
  call pmuWait4IBE+ ^  O2 z" x4 t
  mov al,ah. X4 M) H: A; p& N3 G. B
  out EC_DATA_PORT,al4 R: s6 O4 q/ d& b' ]" |
  ret
! K" q) i- n9 \$ h2 I) j
1 w2 }. U4 D. ]8 s( r; Iread_ec_data:
* [! V, [8 ~+ Q  x' t+ o7 d; m: X  call pmuWait4OBF
" P9 {* c2 ^# j/ y( I( {  jcxz $+2' Q# X4 H  x, Q
  jcxz $+2% T; A! Q$ A% ?+ D4 o0 |
  in al,EC_DATA_PORT1 \, W1 |6 X5 j" v. I: g+ {1 \
  ret! e2 j7 A; a; o9 _# z% l
  9 ^/ x6 b  {! C* {& V8 W, ~
pmuWait4IBE:
0 U+ h  C9 Z8 l6 ~" V% f  JCXZ $+2; w0 l& ^. S4 w0 y
  JCXZ $+2   
2 P6 C! M1 P' R: p, ?, }6 s8 x  IN AL,EC_CMD_PORT                 ;Read PMU status   
$ f, Z# I& x1 H' \! N% o! D  TEST AL,2                         ;Is Input Buffer Empty?   # q$ J7 M/ f  o: V) B
  JNZ pmuWait4IBE                 ;Jmp if no   
" Y2 }2 }! ^3 b0 `! X  ret& X$ _3 _" W9 W0 P( m& R

/ f. n! v$ q2 p; `0 m" x  jpmuWait4OBF:  x5 P: H# X) E! e/ Z1 n
  JCXZ $+2; k0 ^' p5 c4 H0 h8 z4 Z; K
  JCXZ $+2     , Q3 J6 F+ @% H/ _1 {
  IN AL,EC_CMD_PORT                 ;Read PMU status   
2 ^8 C' \  }" d# Z8 a  TEST AL,1                         ;Is Output Buffer Full?   & Y$ d4 K& ~) G# z2 }+ q$ a+ U
  JZ pmuWait4OBF                 ;Jmp if no   
+ c# D: d) v$ T' _" ?5 y  ret4 L+ L* d1 D3 g
  
3 j) y% k$ @3 m9 fcode ends  + z* ~% f/ z6 @; }  F
end start
3 _6 i# T4 n' V0 h# Z0 P* f8 Q1 @# Q6 I- ~
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。+ i/ O2 c. u. C, G5 I  t9 ^

! C7 u7 s  X0 b/ c* g[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
' v) k) {6 H! k; W( x1 V0 @9 w2 J8 Z8 z
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
8 {4 k) @/ ^- x; [; R3 x同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 2010-5-24 22:52:57 | 显示全部楼层
我的应该也是超时退出的。
回复

使用道具 举报

发表于 2011-5-12 21:04:06 | 显示全部楼层
我也和你遇见一样的问题啊‘
回复

使用道具 举报

发表于 2012-1-5 00:44:21 | 显示全部楼层
解决了么?
回复

使用道具 举报

发表于 2013-11-10 11:57:24 | 显示全部楼层
我也是啊,最近这个问题搞的头大啊,另外记得tool不使用这个端口的。。68、6c比较多。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 17:18 , Processed in 0.025636 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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