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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
$ B) e# @* t; r; p( f. [$ Q- a可惜读取不到正确值。一直读的是FEh......
3 R* z+ d  A) l0 L希望各位大神能帮忙看看,指点一二。小弟先谢过了。/ t5 X' \9 F- ^# f2 e
' a4 T  U0 R- z* W2 E6 D
代码如下(masm5编译链接通过,DOS下运行):
2 w: D, a/ ?8 ~* i1 }+ f8 ]2 k' o" A  f8 m; U2 u
assume cs:code,ds:data) I+ m1 G# g& K0 H0 y6 m& o0 X

( v  d% `( {2 j2 x2 c6 m5 idata segment  
, R# [/ Q' ~$ o8 b3 c! O        EC_CMD_PORT equ 66h         ;地址端口   
# z! Z+ R5 }' W  j0 Z! p. m% p        EC_DATA_PORT equ 62h         ;数据端口   ) f" P7 J5 @9 E; ?
        CMD_READ_EC equ 80h         ;读寄存器命令   9 d& Z" i  v# O" E  G) L' c% [
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   1 z6 a9 h9 j) e- e* n' y
data ends4 U, G+ l3 B( k2 z
  
6 \) o/ ]3 y( kcode segment , ^4 V1 h3 U& O/ Y
start:   4 M1 K* n) m. Y) H
  mov al,CMD_READ_EC   
# P" f4 w3 t1 {/ e9 x* \" c  call write_ec_cmd                ;写80h到0x66h端口
* L% M5 }. Q2 p, N4 c: c. J: ]  mov ax,POLLING_DATA          
1 V& }% c7 n3 K4 P8 ]" c3 Q  call write_ec_data                ;写ECRAM地址到0x62h端口
! [8 M, T" G( u" G. y  call read_ec_data                ;从0x62h读数据" i* B2 b/ V8 |2 p0 @
# R3 X) j0 P  C/ x
  mov ax,4c00h  
: ?8 X+ {/ k; t3 V  int 21h5 ?1 V7 ?! V/ z' Q  e1 e0 i) |
+ i& i5 C3 I0 J2 @$ C! c- p( L  k8 S
write_ec_cmd:
: g% E) x0 e# w  mov ah,al* P; F! ~3 C8 r) S- _
  call pmuWait4IBE
( V0 y' w' L1 n5 Y  mov al,ah% e8 l5 h+ Z% u  P* V) l+ M2 G
  out EC_CMD_PORT,al% r/ g1 f' i/ P8 c
  ret! c1 D( }+ ]  e- {& Q! J6 o
7 g( k# O2 d4 E0 c) f& `, e
write_ec_data:0 Z* J0 n% j2 I
  mov ah,al
1 a  g( L& N6 D7 g  call pmuWait4IBE, W- I& w4 V: Z. R" y% B2 |! y
  mov al,ah4 P; v4 L8 j1 U, [
  out EC_DATA_PORT,al
5 Z9 P6 U) i5 u1 z) c  R1 x  ret
0 l9 p4 h; K( y' d0 O) F/ r
& V1 L) ]7 y, k1 J0 L: M8 B" J& n7 wread_ec_data:
, e. Q  D0 p/ `/ w4 l  call pmuWait4OBF
: w4 v8 I& r5 g# E( _' h  jcxz $+2" N2 t) c5 r+ s- q! T
  jcxz $+2- \3 Z7 T8 U8 N) x: Q0 x6 F8 g
  in al,EC_DATA_PORT0 X1 ^' \. O5 {; C: V' v6 ]
  ret
( L$ m: _6 u& I2 {- {. E# u% H  0 Q; v9 A! v4 s. X" j
pmuWait4IBE:! b. j* |. ?9 f
  JCXZ $+2
( F8 N8 m1 z& U/ e  V  JCXZ $+2   . c0 l$ L" [* _7 a# O
  IN AL,EC_CMD_PORT                 ;Read PMU status   
2 X1 R+ ?7 A7 R0 u0 ]3 w" `  TEST AL,2                         ;Is Input Buffer Empty?   
+ n! @4 f8 b! p( Y" Z' y  JNZ pmuWait4IBE                 ;Jmp if no   
: ^' @. d1 P3 i  ret4 A- K' [/ v' N, w) G+ ?( b

! w! \# n' f, E! g' G% _pmuWait4OBF:
- o2 s+ s: t: n- C) p! ~- _  JCXZ $+2( a5 l) d0 J: e( L
  JCXZ $+2     
) O* a( c4 Q7 n2 `4 r' A7 ~- I7 U. C  IN AL,EC_CMD_PORT                 ;Read PMU status   - Z5 }/ l) A  m, L5 A1 ?
  TEST AL,1                         ;Is Output Buffer Full?   
- q, t6 j9 r$ l( n8 z" c  JZ pmuWait4OBF                 ;Jmp if no   
4 J4 }; A( n! u0 t+ \! j+ N7 [* `  ret0 O$ K" G4 d- \/ t$ t% V( O
  0 V5 Q& ~0 M' M7 x7 [7 m
code ends  
! e8 G" E% i; q3 y% l9 w: Z9 P+ Send start5 ^  E& T/ ~7 B# }; P9 Q- w
7 ?) I) _5 k. j0 T; h4 a! ~
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
/ ~- o* g$ }- J% ?8 B3 k! u; }; [( W/ B# R$ H9 |! s# g6 G, J- }
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
/ q& O$ f6 A8 S: P2 i8 Y$ D5 \3 K9 i
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。+ w7 m! Z! x% B; C+ I
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-7-21 02:16 , Processed in 0.362873 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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