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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
7 T5 s* m2 {6 o6 X, _0 k可惜读取不到正确值。一直读的是FEh......3 V' N' y3 Y+ ?( F: Y4 W6 S2 V  ?+ ^
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
( m, a5 k/ P$ R, p: N7 v9 D+ b
. Q0 B) }; E- S5 y代码如下(masm5编译链接通过,DOS下运行):. \! @4 F$ n: r, G: f/ D

6 ^+ O, i* M) @9 S, Kassume cs:code,ds:data  r4 u+ m4 [( S: v6 O& ~: e

& f, V' Y7 w+ @% y2 S/ jdata segment  . s8 T+ k8 I1 G/ b) V# U' ]& o
        EC_CMD_PORT equ 66h         ;地址端口   - L5 ~; G# w) N! w6 i0 T; _
        EC_DATA_PORT equ 62h         ;数据端口   0 D8 k0 @+ P7 g  _+ N
        CMD_READ_EC equ 80h         ;读寄存器命令   
6 Y* y) I+ o! @& e5 B3 o/ S        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
% \5 y! L. O5 cdata ends  \+ {4 P, W! h/ n2 @- s* j- A9 M
  : o2 q! S! @0 J3 h/ I
code segment 8 L7 h8 m( J! P! `7 K( W5 k) G
start:   
& q6 e3 W  N6 f  G/ z  mov al,CMD_READ_EC   5 P7 Y5 A! b( a* l3 S
  call write_ec_cmd                ;写80h到0x66h端口
7 h, o5 b* n3 k6 _9 f$ W0 S  mov ax,POLLING_DATA           $ G! y& I8 g6 S1 G: r) G
  call write_ec_data                ;写ECRAM地址到0x62h端口, t& Z# U) S0 N: q( v
  call read_ec_data                ;从0x62h读数据. P7 L! W7 X# M
4 U, H  V5 }- F3 \% O, S/ B! W' ~7 I
  mov ax,4c00h  
" c2 I6 q& ]) a7 w" E  int 21h3 l0 L% _6 }! D# a5 d. B7 L1 }5 J
' N0 d, }) \6 T& @, U& t
write_ec_cmd:
7 |, ^1 h) R: A5 L  mov ah,al2 v& [9 q) I% P& i& F+ D
  call pmuWait4IBE
# y5 X  e0 {1 L$ ?9 \9 V7 a  mov al,ah
$ V' G! M+ k* P  out EC_CMD_PORT,al1 H0 @9 V9 C- C- o
  ret; z9 r' f8 U! ?7 Q( C
& X; A) A& e  ~0 O2 H5 L
write_ec_data:! X4 a  \; Z; @5 K
  mov ah,al
  R& Y/ B8 E) a% ~  call pmuWait4IBE
+ ]' q! D3 u5 L5 F8 g  mov al,ah
) u" ~. |# u+ u2 k/ m; ?  out EC_DATA_PORT,al
9 Z8 n  P( D" R3 A  ret
/ n$ z7 d, T, ]$ @4 l) Z% m! C% y+ R# b0 q2 O
read_ec_data:/ Y* I. H9 D2 ^: g$ _" A# ~
  call pmuWait4OBF
# Q" R0 ]+ g1 a6 {/ N  jcxz $+2
  R6 m6 @& |  D! Y' u/ ~7 s1 _  jcxz $+28 u! ~( s% R( ?) U0 o& W. n: ~6 L
  in al,EC_DATA_PORT
* j+ {  e6 A5 j$ q% O" t) p  ret
( j: ?4 r8 k, r8 n2 F  0 K. D" l, k" }* z
pmuWait4IBE:
) O' p( O  T$ }3 v  JCXZ $+2
2 J; M4 {: z3 F. }  JCXZ $+2     |) }' n7 z' v! N/ h( h
  IN AL,EC_CMD_PORT                 ;Read PMU status   0 v( m9 f: x% h0 Z8 j
  TEST AL,2                         ;Is Input Buffer Empty?   7 [5 q" x5 ]" u
  JNZ pmuWait4IBE                 ;Jmp if no   
4 G7 f  @( p0 |  ret; f$ k/ s5 T$ |. \- D
' r. H- |" Z; `
pmuWait4OBF:% l# O0 ~. y# c& F7 N
  JCXZ $+29 R! \* j; x! p( y( A$ _
  JCXZ $+2     
1 r+ ~( g, ~+ \9 `  IN AL,EC_CMD_PORT                 ;Read PMU status   
5 R7 |4 e' B2 w! f  TEST AL,1                         ;Is Output Buffer Full?   $ I& x( h+ ~0 E, k5 c" H
  JZ pmuWait4OBF                 ;Jmp if no   9 @7 T( V! F7 x8 @6 y; R
  ret
9 S: j+ n% I0 F  
1 r+ N6 q6 H: L' ]code ends  
/ w( h5 z* D' b- E8 p. y/ y% y$ ?6 Bend start
- L( f  {$ z) c7 s4 z+ U
' I1 K2 A% r; m2 b3 b. B6 [1 F还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
( _5 u' x6 p4 S6 j$ D% ]% J" L
* v2 o' ]! y" {' O# I" P( b+ f[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~; Q5 f. J1 ?) Z/ H/ i$ Y/ F
7 E1 w# A: s8 q1 H
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
" o, [8 |" ~$ {5 i+ f同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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, 2026-1-18 19:28 , Processed in 0.057874 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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