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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。+ k0 U5 C" D( m
可惜读取不到正确值。一直读的是FEh......
. y8 B1 M( Y8 ~9 i4 r& e7 z希望各位大神能帮忙看看,指点一二。小弟先谢过了。
0 D* P/ z# t0 u& ~
% |, a" c. m# \代码如下(masm5编译链接通过,DOS下运行):
3 v% L1 i! l# R% L+ Z8 K1 C
7 Z  m9 u* C7 Y! r2 n7 ^assume cs:code,ds:data* I7 V, i% w" e/ J" \7 f9 O

2 W& l1 e9 H) I8 i; q: jdata segment    m. T5 y! L! [  R
        EC_CMD_PORT equ 66h         ;地址端口   ) X6 A. `6 t8 D$ D7 v* X
        EC_DATA_PORT equ 62h         ;数据端口   
8 R' q  Y4 k2 [4 f6 C  Q        CMD_READ_EC equ 80h         ;读寄存器命令   3 S* \- X5 K- V' x# w
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
1 r: w6 `) z/ W- _6 B% {8 xdata ends$ v) s. Q! w2 {/ K0 b
  
/ ^$ n5 G' j% s* T# e' y$ {" s/ m3 O$ rcode segment ) U! W& E8 O/ M) b- V/ j, g7 g
start:   
! M, }% i9 n9 A  |, F( }! u0 R! J( U  mov al,CMD_READ_EC   ( I8 W$ r& U+ J- `, B) s
  call write_ec_cmd                ;写80h到0x66h端口% o2 n" F, ?* |5 @8 S
  mov ax,POLLING_DATA          
" V+ Y' W6 A% d+ N. d; Y8 Z& ?  call write_ec_data                ;写ECRAM地址到0x62h端口
) ^5 D, H3 o  v$ _5 l1 a) J* Q  call read_ec_data                ;从0x62h读数据
' W- y* M5 `' x2 |, ~% P8 v+ }% w
  mov ax,4c00h  
2 |& e2 U# ?, I; g5 R# E* X  int 21h
) q) a" v  s) K! ^7 y$ i9 d' F8 K: l0 w6 N9 z( v' W9 c
write_ec_cmd:
/ Q! n, S3 O3 A( x' o$ V  mov ah,al" O7 v) l) Y$ E1 E6 K* H0 z
  call pmuWait4IBE- F7 h2 ]/ ~; `: o9 s
  mov al,ah: O( O) o, Y5 ^3 _2 s- |" ?
  out EC_CMD_PORT,al
( U; j% D; P  `- x7 @5 I1 y  ret0 j! P. C6 E0 Z$ A9 I
* ]$ M. h8 N9 Y4 M/ h% g: R
write_ec_data:' c, _4 |& ^; ^  g
  mov ah,al
3 k' R2 F- \' [# o- r9 ~  call pmuWait4IBE( w6 C- B5 a3 h, \
  mov al,ah
3 T- @9 w# o! e4 e9 H  out EC_DATA_PORT,al8 q- Q' H' D/ Z/ C/ R' r
  ret" K4 I+ e( P1 s
; Q0 h/ n) ]. v5 y6 L7 e
read_ec_data:6 x& d+ S: `! v( X
  call pmuWait4OBF
/ ?6 b- e/ s& c  jcxz $+2
$ P1 s7 I' X& I* a: e! m0 p  jcxz $+2! @/ w7 ]+ c6 l( O. M
  in al,EC_DATA_PORT/ {4 ~. ]4 t& U4 y: M$ N
  ret
4 V; h6 E* @8 i( Z$ w  * w9 v/ F; B( \. S, K2 w
pmuWait4IBE:
; O7 ?7 ~: v2 z5 S  JCXZ $+2
9 s6 `7 V4 ~( F  JCXZ $+2   
: B$ t5 C+ Z% n1 S$ B! u  IN AL,EC_CMD_PORT                 ;Read PMU status   
4 X& x- ^( K/ Y& g7 x: S. i3 \  F2 p  TEST AL,2                         ;Is Input Buffer Empty?   
- b0 ]9 V( N* T) ]* h; P  JNZ pmuWait4IBE                 ;Jmp if no   ( @. N) }" M2 Z/ g( N
  ret" a3 w2 o& l5 I/ `% A3 J# }1 L
$ `  l  Z7 g. q- C2 x* u& B5 S, }
pmuWait4OBF:5 ^2 ~& k6 J) F5 \3 _4 h7 f( z( |
  JCXZ $+27 L5 ^2 C( T. a9 _3 I3 ^
  JCXZ $+2     ( i4 j5 ^3 N$ n) e8 m: S9 _
  IN AL,EC_CMD_PORT                 ;Read PMU status   % \- _$ |0 N  [' o+ W
  TEST AL,1                         ;Is Output Buffer Full?   
0 H% U! Z6 k8 k1 L! F/ [5 y  JZ pmuWait4OBF                 ;Jmp if no   
% e4 w% K$ o' k6 S1 |4 q  ret
/ \3 p; L/ g/ _  ) W/ B+ J6 S4 c
code ends  
; @' h* s0 l8 q1 y$ G! W7 A$ I9 m4 }; Yend start! L8 H! C7 f2 K: b
5 h# N% F/ A& w; F5 h
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
* R# E/ w  y0 |: p% j/ P/ l5 g
& k- g* ^8 W& D[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
; H' _* h  J- m% J% Q! \% l
. g! m2 a- w1 d0 @另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
# W7 O$ Q1 @1 T; A0 [& @: y3 j同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-9-4 14:42 , Processed in 0.068252 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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