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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
; f2 p/ m6 Y! U! [: a可惜读取不到正确值。一直读的是FEh......# E9 @# Z' u) P4 V+ F  E, R  }
希望各位大神能帮忙看看,指点一二。小弟先谢过了。% ~5 w4 |7 v: ~$ n8 I
; m) y$ V9 b- j( K: C" o
代码如下(masm5编译链接通过,DOS下运行):; A2 ?) g0 P7 N$ b) j# M. X+ e& b

' a3 d/ U! C1 k' \7 I; Wassume cs:code,ds:data% \( }( R+ y( z
" w! |! x3 e' p5 v! E- N
data segment  8 x- \. A  l: o' L, M8 s1 S% f
        EC_CMD_PORT equ 66h         ;地址端口   
6 n  j6 h9 W1 ~5 ^        EC_DATA_PORT equ 62h         ;数据端口   % C- t/ w3 V' @3 k- S
        CMD_READ_EC equ 80h         ;读寄存器命令   
* j( ^6 h0 d' a8 x; Y# f        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
& E. j" l* c  t2 ~! N- N0 Gdata ends0 w" J+ O, v- X" w9 h
  1 _. Z7 c  P) Z: t
code segment 3 K, Z1 N9 W& q. e- D
start:   
) y& X( w4 X& T' g" x0 c' `  mov al,CMD_READ_EC   ! |# l! f! ^% g( ^
  call write_ec_cmd                ;写80h到0x66h端口
& d9 c/ u( ^, D; V4 Y7 T. N  mov ax,POLLING_DATA           . A" s, Z1 g: k0 e1 D0 G, z- c
  call write_ec_data                ;写ECRAM地址到0x62h端口5 o* ?* h: i7 J: Z# d
  call read_ec_data                ;从0x62h读数据' ~/ x5 w' Z- M' r$ u) p1 F/ ~
) _) o6 P* D  Q/ b- E+ [) r
  mov ax,4c00h  2 z6 s* i# |4 N) l# L
  int 21h
* K6 I* ?" E# _+ ]; f) _: ?9 _# q1 r( {% P1 P
write_ec_cmd:
( L4 C: l) n$ z3 [  mov ah,al
9 e9 b3 j8 x4 k( v# }  call pmuWait4IBE4 K4 l# u' V# s& A* J- k
  mov al,ah  X  G& p. }& n- j( b
  out EC_CMD_PORT,al
5 ~, c) v1 X1 P4 R3 j: v9 }/ b  ret1 R; K8 x. h  V0 j) s
2 [6 I4 C/ K, |. c
write_ec_data:
5 E  w# h6 ?- ^( E0 \  mov ah,al
4 P% }; |# Y( m  call pmuWait4IBE
0 ?: q& _' ]8 X' S+ ?& Y  mov al,ah: j- [, n. L: I' V# ~+ n5 a# k
  out EC_DATA_PORT,al
+ ]4 s( W' E/ Y7 z# p  ret
1 [5 ~# L6 F! `0 m) M: G0 P( D5 R! h/ L  R, T4 v4 k5 F
read_ec_data:
% F8 }# L) e4 v. z4 Q  call pmuWait4OBF
) B. ]2 D3 e& y* K* C  jcxz $+2/ X& I+ }+ ~1 |$ M
  jcxz $+2
! c: @# s' \& V* V+ j6 T  in al,EC_DATA_PORT8 v3 J' ]; f2 E- ?" N  [2 F* d: J
  ret
5 b* T9 T9 a$ E  
" {) F- _  S4 n1 QpmuWait4IBE:6 I9 f  t) t. C
  JCXZ $+2
, |- l' Z# b. U3 V8 h  JCXZ $+2   
6 q0 _2 D" n7 r) B% E' L- z  IN AL,EC_CMD_PORT                 ;Read PMU status   
. Y9 o8 {! x3 Z/ n) G* c8 q" V  TEST AL,2                         ;Is Input Buffer Empty?   * v" t' x4 N  L. f+ e
  JNZ pmuWait4IBE                 ;Jmp if no   
  ?$ z7 e+ T* H) h! W! a  ret
: l; z. n* n1 y4 m# j! f7 Q* E5 A3 N( Y' M9 d
pmuWait4OBF:
0 u, b9 v/ u: x  m* m  JCXZ $+2( N7 A6 t# P# \5 g) n6 e# _, W
  JCXZ $+2     4 l/ h% H# |0 E8 y/ D' p% p
  IN AL,EC_CMD_PORT                 ;Read PMU status     u3 F0 y* G2 Q' v
  TEST AL,1                         ;Is Output Buffer Full?   
6 r% a- o  a7 ]+ `4 i( r  JZ pmuWait4OBF                 ;Jmp if no   ; x' t$ ^! v3 I; D9 m2 F! I
  ret
( k1 K5 {8 D# ?0 D5 r0 A" w. M  5 c; x9 a, U3 I& Q0 k7 _( }
code ends  
7 W( M0 u# s' H, g( R& v  ^4 [0 Gend start
; X! b& ~- D' u
6 r/ B6 V1 r4 S还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
9 ]2 g$ ?2 Z9 J" m; d* J8 h3 X1 T; }1 a* O" ?" ?
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
* W" G: b3 [* Y& t  _& n8 h: I" ~! u, K
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
: p  r8 d; I3 C. D9 }  r! x& r( O1 J同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-19 15:38 , Processed in 0.032723 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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