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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
' g( ?8 b" c8 j  X可惜读取不到正确值。一直读的是FEh......( U* V( x( h9 }
希望各位大神能帮忙看看,指点一二。小弟先谢过了。7 J, \* Y3 R3 |. ^' E6 n% |

" r  S7 O5 C  {0 L) z! ^代码如下(masm5编译链接通过,DOS下运行):
) }& o# h% w/ T+ e  `1 f8 a5 y5 M" a, P* `, Y
assume cs:code,ds:data
& T0 i* D9 u; T6 ?$ u6 N: f! u6 S9 p4 e
data segment  3 F! W7 {& z0 ~
        EC_CMD_PORT equ 66h         ;地址端口   
# L4 `" N/ _2 e" C3 E        EC_DATA_PORT equ 62h         ;数据端口   
! C# E; m" G( k+ c5 e+ u& U        CMD_READ_EC equ 80h         ;读寄存器命令   % S6 N5 i0 @0 V+ ?1 Y  N. p4 H
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   1 d$ }3 p% h4 Q
data ends
5 k" w! |4 P( t2 F3 R7 X" B# |0 ]# T  8 g7 b9 [- d: ~/ h3 @& p
code segment
* \" c& }0 t+ k4 Astart:   
/ c. _( W2 [: o4 t  mov al,CMD_READ_EC   
+ x& A) |) U$ Y) n& W  call write_ec_cmd                ;写80h到0x66h端口% C$ H) u. w% k4 I& E/ k6 C! _
  mov ax,POLLING_DATA          
' w. V8 B1 o) E2 W$ z% K  call write_ec_data                ;写ECRAM地址到0x62h端口
: O5 }! j; J6 z2 p  call read_ec_data                ;从0x62h读数据
% x9 e4 `6 `$ _% `, `! Y8 [8 x4 Z( A6 v, N5 A
  mov ax,4c00h  
$ r8 D; i( L+ ?7 W. ]+ U* C( y( j  int 21h! e$ ]. n% t# D7 a* c+ V) h

! E! n/ O) V: Y2 Q, xwrite_ec_cmd:  m+ T7 x% ?3 P3 O
  mov ah,al8 w4 }/ L1 Q+ X# Q: ~
  call pmuWait4IBE# c  B% S  B* L
  mov al,ah
% {" I. r0 C, E4 }' i9 Q' m  out EC_CMD_PORT,al' ~8 m, ~/ u9 \* \3 g
  ret
1 p- U% r( S" x6 O$ Y
& o4 q7 K8 Q* Kwrite_ec_data:, w$ r4 H" y4 n! R
  mov ah,al% H' m- q+ u' w$ j
  call pmuWait4IBE( B1 o0 `8 V' ?! o) ^7 w1 ]) X
  mov al,ah
+ c5 q* G3 H3 H( X& V' r  out EC_DATA_PORT,al: D9 _0 T" I$ Z) u7 a1 _) \9 F
  ret
: H! ^6 k- Q; D1 G7 C4 g: m8 U. |( {! T9 [" C2 _
read_ec_data:- f' Q! B. d0 }* z, L& H
  call pmuWait4OBF
5 U* h! G* q& T4 c+ y% s, w  jcxz $+2
% |/ t/ k8 a3 @% F  jcxz $+2
6 |& b4 E1 O0 K- Q: ~  in al,EC_DATA_PORT; T. ^2 D: O8 N; W( U- f( H
  ret
' i3 X7 R7 r  s. Q; B8 ~  / v3 X0 [% v* U% L# m! E
pmuWait4IBE:' p# B6 Y3 W! o1 t+ B
  JCXZ $+2- e' {7 }  |- h
  JCXZ $+2   & A: a! ^* K0 {, c; n! N
  IN AL,EC_CMD_PORT                 ;Read PMU status   ) G* p; ^3 d0 o9 p8 w8 N
  TEST AL,2                         ;Is Input Buffer Empty?   ) `; l6 F5 ]4 `+ Q9 q
  JNZ pmuWait4IBE                 ;Jmp if no   " l8 f& I- J4 t6 E$ E, x
  ret2 E; k5 t( z# i6 o6 _9 S
/ k7 y. h3 f2 n* g) {  A
pmuWait4OBF:
+ `4 f( R8 c' \- \' |0 L4 R  JCXZ $+2: Z* V. B$ w/ c7 A
  JCXZ $+2     
  X3 V. u7 ]& B4 o  IN AL,EC_CMD_PORT                 ;Read PMU status   
* C8 c, }/ V3 t$ Z  TEST AL,1                         ;Is Output Buffer Full?   
- J* [0 t, {7 {5 M' J; ~, w2 p  JZ pmuWait4OBF                 ;Jmp if no   
, Y3 J) }& q7 w8 d, U  [. |  ret6 R! {& K: P8 k7 T* c% T, ^8 x: T
  ; U4 F8 \: c9 L
code ends  , m; |9 r4 I0 z+ s# B( f
end start4 O/ V' \0 m5 A: a+ }
' r/ e* c1 x% {8 F
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。8 [; A" e3 b- o" l7 m

  ^* P) j, y5 C[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
, R  d, f2 {. |2 C% i$ N: `) @  X8 a1 ~# r5 [& B
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
$ v3 |0 S4 n1 c- h1 I9 \# I5 b/ q8 |同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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, 2025-6-17 11:00 , Processed in 0.117578 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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