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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。% K2 U" A5 b; B! a1 M# c
可惜读取不到正确值。一直读的是FEh......# h. n* C& Y) l& x8 p
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
& o' W; v- F+ W' y* T! v/ k
! e! |; L( K0 s代码如下(masm5编译链接通过,DOS下运行):! ?8 X# L8 N; V7 M. \; C& P" m5 ?0 _

4 ?" `5 }2 X+ B3 e" A* zassume cs:code,ds:data7 t0 @1 d; b3 N" F

; x5 x* K" i! v. Bdata segment  
. @/ K! l1 k. ]9 M        EC_CMD_PORT equ 66h         ;地址端口   6 n' N+ F! \8 `  ~# m
        EC_DATA_PORT equ 62h         ;数据端口   ) h' q. }/ E8 d8 @
        CMD_READ_EC equ 80h         ;读寄存器命令   " n6 U6 D  Q8 s
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
  [6 p- q; }4 x: l0 Vdata ends3 L" o+ C6 e" {8 H* z
  
" e- u; i/ K: P9 e7 Wcode segment
$ ?+ G2 K* ]0 r5 z# Q1 ]start:   
' Z$ X+ m" i! C/ ?  mov al,CMD_READ_EC   
3 N" V! i& \4 b% q7 n  call write_ec_cmd                ;写80h到0x66h端口
- a7 w- h7 P% K! H  s, k1 S  mov ax,POLLING_DATA          
% U4 r" X+ N- X6 o  call write_ec_data                ;写ECRAM地址到0x62h端口1 h. o* j- o, l# ?7 d0 k
  call read_ec_data                ;从0x62h读数据$ n' n' Q( {' N6 f3 S' V3 [, t; h
7 g! t% I; }3 S6 J+ u5 o7 L! }5 N
  mov ax,4c00h  
4 F  c6 f4 d3 h# w3 Y1 i& `) _2 U  int 21h
4 |1 d: ]2 }: C& f' A) t+ w: ], K/ A: G
write_ec_cmd:
$ ~' S& \8 r2 w$ E  mov ah,al
2 W9 v! O! R+ e8 ]  call pmuWait4IBE) T7 t3 r! x3 V. \4 d( n! X
  mov al,ah  O* ?5 d% o) g2 d. p% b
  out EC_CMD_PORT,al
+ U( P/ x% W  i  ret: h3 ]* n& Y" v
6 W4 }3 B6 Z% W; U2 j
write_ec_data:5 y7 i6 C; J" e' D% ~  \
  mov ah,al
1 O5 O& t5 f- x! m# S  call pmuWait4IBE
$ Q% R- n* @5 q8 Y; p  mov al,ah' V, L/ r4 m! }. x- I! R
  out EC_DATA_PORT,al
, t9 A* _% ^4 x4 \: q. {8 Y  ret9 m) Q1 H+ p3 r! d2 D

/ V- j8 Y. z0 ~read_ec_data:8 i# ^$ a% a+ h$ O+ r! v
  call pmuWait4OBF8 Z2 }. [0 N  d3 S- I, \1 u
  jcxz $+2
% {( R4 I* h2 E. x( K  jcxz $+2
% T) r' ?0 b4 F5 u: R+ d  in al,EC_DATA_PORT
4 l' \0 e- g4 o; X3 B  ret
: E( D/ E0 e! S) O+ O  
9 z6 n6 M8 G6 \# b0 Y- k6 D. qpmuWait4IBE:8 u" u0 F- B8 y4 C$ {3 g
  JCXZ $+22 y7 S1 V- y6 t, Q
  JCXZ $+2   
5 O  s" n$ H- I0 d% c4 \; L  IN AL,EC_CMD_PORT                 ;Read PMU status   
! ~+ p+ z; n' _  TEST AL,2                         ;Is Input Buffer Empty?   ) q" w8 Q5 B8 |( U: L+ r+ f
  JNZ pmuWait4IBE                 ;Jmp if no   2 t( e- C+ w7 t- e  Q6 J
  ret3 a0 ]  p0 P7 G. R6 M" K
+ E2 w/ v! {# v& w6 c: j+ f4 b
pmuWait4OBF:# v( o; t* O6 v( L1 n1 x8 |8 {% w
  JCXZ $+2
* m% p& ~$ Z# b4 T/ T  JCXZ $+2     * s$ }( D; A1 U- }
  IN AL,EC_CMD_PORT                 ;Read PMU status   
) A* ~# x' E2 E. u% x  TEST AL,1                         ;Is Output Buffer Full?   5 M7 L/ p3 T* z9 w) r
  JZ pmuWait4OBF                 ;Jmp if no   ) s. D" w; J- ^* s0 ]
  ret6 G1 T* q! e) V& y8 k: l
  
& P4 F7 E% J' \code ends  
. Z: A% M9 s% O- Y$ send start
  ~# @" H0 O- f* m& N' G! w- o8 \7 m
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
6 x" V4 l) U1 Z& g' F% u& n; K4 e) N; Q5 I( \* |  P
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
4 @. [& `% |3 J. [: K: m' l1 R/ O) w0 k/ l. O8 \
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。7 k$ Q8 m" I& g( d9 s/ ]4 p
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-8-11 16:05 , Processed in 0.049097 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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