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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。# \+ Y: m' l* d: [* u# z. S
可惜读取不到正确值。一直读的是FEh......
( H& }2 w) ?& V- |; l# b& r, u希望各位大神能帮忙看看,指点一二。小弟先谢过了。2 D% Q  \0 W( d) C) F. w

' \& S# y, e! V$ z( _- j代码如下(masm5编译链接通过,DOS下运行):
1 u2 f0 d- ~; K+ H$ x7 t9 }! T+ S8 G! |# m6 {, a- b4 r6 }
assume cs:code,ds:data: ?* ]/ I* ?7 [6 ^9 h$ e9 S

! x4 D; o. s9 C& X; ?' ?data segment  " |9 s) w7 r% |: @- C
        EC_CMD_PORT equ 66h         ;地址端口   + Q9 y: C- |; f
        EC_DATA_PORT equ 62h         ;数据端口   % M3 @3 h) U% n% L- R' E
        CMD_READ_EC equ 80h         ;读寄存器命令   1 t2 Y, ^. ?# u$ I* `
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
5 T* u( ~* A& D: k1 e% I0 ]1 D1 ldata ends5 V# R6 l, a8 W+ P* M
  ; [8 l* M  A( A
code segment ' J7 @0 f. Z+ J! ]  G. r
start:   
4 o, I$ P- F( k5 L" P$ _$ F: F& t; Q  mov al,CMD_READ_EC   $ e0 y7 z; q+ V) H8 l$ ^/ e
  call write_ec_cmd                ;写80h到0x66h端口
: H" x. `' d. t9 e3 _0 N  mov ax,POLLING_DATA          
* ?9 n# r( _2 u, ]  call write_ec_data                ;写ECRAM地址到0x62h端口1 R& k7 D  N2 Q% Q9 s/ ^3 X; S
  call read_ec_data                ;从0x62h读数据  Q4 @% a/ I/ j% ]! P

9 _$ X- x- I( J  S/ D; B  mov ax,4c00h  # y, D( H5 g; e( [' c
  int 21h
& G' o  u; _: s# h
$ j9 }, ~1 U' A2 e: Zwrite_ec_cmd:
( _1 |% _0 Q3 A. a! [3 s  mov ah,al# |9 |! x: L, T2 E1 e
  call pmuWait4IBE9 @& w3 \4 k# x: `: [
  mov al,ah- b7 u0 v# K6 V" H8 }# r
  out EC_CMD_PORT,al
9 V* r% K7 F* n# L- w; `4 v7 j  ret
( ?$ m. s8 k2 G# s( C) E- t" J9 J+ }1 }
write_ec_data:' E2 c" |+ a) D0 I& C. B
  mov ah,al/ t$ T" i4 }5 }& r( A4 o" _
  call pmuWait4IBE; ?$ C; @% Q* ~1 y1 L
  mov al,ah% n6 Z( a3 Y- b8 u
  out EC_DATA_PORT,al* D; R' G6 N* k! q1 C+ p6 Q0 D
  ret
# q/ z  N5 J% [9 \' P& \
1 {! K6 M/ d) _8 i2 G- s, iread_ec_data:
: l, n, x* n  z# u; r# _  call pmuWait4OBF9 Y7 I- h. u9 g; ?' I, e& q
  jcxz $+2
, O/ e: `- ^9 i9 S1 \  jcxz $+2. _5 F/ i1 q. a2 m" T: s" T
  in al,EC_DATA_PORT
% t  Z0 f! e6 s. `. j3 d  ret
4 T+ z6 i7 t% V  
. E( R4 ]2 R2 D& l  D+ l# B; h2 [pmuWait4IBE:& |  s3 U& h/ j& @( F5 x9 e4 f9 R
  JCXZ $+2
+ P& H, p, B  Z' s) d9 n0 X  JCXZ $+2   
! S1 d! D4 p0 {4 a8 D+ M$ z& ?& M* A  IN AL,EC_CMD_PORT                 ;Read PMU status   + U2 D# U' L  T" Q
  TEST AL,2                         ;Is Input Buffer Empty?   / D+ E; H. S( `2 O- x* ~3 Q+ x
  JNZ pmuWait4IBE                 ;Jmp if no   . v, A+ l- e! I. Q
  ret& F( v4 T4 C% ]: {7 M" b

9 h$ l4 }# q6 ^# cpmuWait4OBF:+ c2 {( S7 V+ k1 q% ^
  JCXZ $+25 l7 W& l7 R3 m
  JCXZ $+2     - d2 i& W. [% d& A9 g) R# `
  IN AL,EC_CMD_PORT                 ;Read PMU status   
2 ~# U! K7 \  P$ W6 T, T/ y  TEST AL,1                         ;Is Output Buffer Full?   
. K) b; H8 K/ t; ]) b  JZ pmuWait4OBF                 ;Jmp if no   
, T" z( }0 p$ N- m  z- d- G$ s  ret
* [: X" R. M- a3 [  5 R9 E8 y- z1 f& {/ {
code ends  
2 [  l) n9 ?% @, Pend start
: ?5 h. C) Z+ _/ Q, H' R
$ J# C# \3 t6 e! S还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
! @& P4 l# v# o/ C
% n8 @! I7 Q0 B, l0 c( u7 \- x% b( M[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
$ `2 s4 i7 w1 S( O9 |9 I5 {, i2 h, w
# w3 ^/ g4 V& Y1 z& `1 `另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
6 U# k" {8 z/ J% i! o( z% @同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-11-24 01:38 , Processed in 0.024218 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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