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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。& A& H7 X% _* m& g7 O
可惜读取不到正确值。一直读的是FEh......
% C+ l0 ^" ^9 N5 x希望各位大神能帮忙看看,指点一二。小弟先谢过了。  S4 p; }9 ]# b  e

5 S4 E, {* f0 @/ [代码如下(masm5编译链接通过,DOS下运行):) h( m& O. J& [( c& v6 w4 c

/ G- ?. f# U* R8 aassume cs:code,ds:data
3 G8 ?1 ~% s, X5 v
* ~2 x+ B! u6 Udata segment  9 B4 ]/ t+ E( T1 Z$ h# u
        EC_CMD_PORT equ 66h         ;地址端口   
& Q& w: o+ Q! p" o        EC_DATA_PORT equ 62h         ;数据端口   9 e# x' I9 {  Z6 N0 K( F0 R
        CMD_READ_EC equ 80h         ;读寄存器命令   
4 z; K' _: s3 I+ J8 y$ P        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   2 R9 P! ]+ o8 W" l/ q
data ends
* S3 ]) K- }' \4 H0 d  
0 U5 @1 W% B* ~; C! \" t" h' o4 Xcode segment 6 z( _: U8 @% j2 A8 c
start:   
0 ]8 c5 v) m- Z7 B" g/ P$ o  G  mov al,CMD_READ_EC   # r5 I" D  g4 R4 g( P
  call write_ec_cmd                ;写80h到0x66h端口
( g4 U& U# d8 ~& |( `9 ^& K  ?  mov ax,POLLING_DATA           , N5 R  s+ n( G+ Q- c
  call write_ec_data                ;写ECRAM地址到0x62h端口
" ], k! \# d4 n7 \( {0 s+ R' w  call read_ec_data                ;从0x62h读数据
1 n- M* B  p) j2 J. B% b+ Z
: g% `2 s' K3 U, u& t/ w  mov ax,4c00h  
/ I7 @2 I) D! t# _8 @# I  int 21h2 N: q8 B' K) q" y/ O. ^
" A+ y' @9 k( w" ?, D8 G  o
write_ec_cmd:
$ J8 w3 H( g, o, F7 B4 R  mov ah,al; ~: \6 W( c  [  C% V  z. _
  call pmuWait4IBE
. k8 T5 S( p9 V' T1 T6 X5 u9 |  mov al,ah, N' E- G5 H  T. x! o
  out EC_CMD_PORT,al/ G+ s6 g; t& Q6 T* ]
  ret: ~( A0 }& h4 {( e. B
: Q: d5 p( Y7 C2 f4 d
write_ec_data:
( C5 N+ ~- f0 z( f' P7 d' ^  mov ah,al/ M" l9 ?) T$ a
  call pmuWait4IBE
0 Z9 G& U, C1 q. x- p. }  mov al,ah3 k/ h7 \8 @0 T7 E
  out EC_DATA_PORT,al' C% K2 A9 A1 J( Y
  ret
) t0 Z5 y$ j, R1 {" k: M7 h  n, b. H" V" V
read_ec_data:
2 J5 w+ d: g; `3 G  call pmuWait4OBF8 S( t, l( O: g9 S, F% c2 r
  jcxz $+2, E  X- ]% ]" z; ?
  jcxz $+2
3 V+ T$ |. g, f  R, j( _5 }( c  in al,EC_DATA_PORT$ g5 O* M- {, r7 k
  ret
! _- W8 ]. t! a" }3 E9 Z  8 s8 A* p/ J- a  E! h
pmuWait4IBE:
8 t2 J& e/ L1 @  N1 g  JCXZ $+2- z% D* Y1 r# n6 A) w6 ?1 F
  JCXZ $+2   
- n  h# C& ]' I  P, x  IN AL,EC_CMD_PORT                 ;Read PMU status   9 ^1 z* k  n' l6 {
  TEST AL,2                         ;Is Input Buffer Empty?   
6 M: q5 ^8 H$ O/ `- T  JNZ pmuWait4IBE                 ;Jmp if no   
$ x% ]' s$ A$ @8 }) o  ret2 ]$ D- T* I  {2 p
: F: F/ r3 ?  k
pmuWait4OBF:
: V3 r2 E2 y, [1 U$ X0 n4 M# p8 k: F  JCXZ $+2+ K' ~- C3 D5 [
  JCXZ $+2     - {2 K5 Z% j  H
  IN AL,EC_CMD_PORT                 ;Read PMU status   
9 H  U2 F- o7 v; I4 K  TEST AL,1                         ;Is Output Buffer Full?   
$ G6 @8 i/ i( r  JZ pmuWait4OBF                 ;Jmp if no   
5 r1 ^  i8 U" V! K; m  ret3 n7 H2 @, E  N7 S1 F
  9 ?0 f+ e8 l- R. A6 `
code ends  5 s! ~" Y: A# V  ~/ w+ c
end start9 M& N7 c0 r4 T) ~9 |

0 w# j  }% l, A0 u0 |还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
" \3 f4 q/ d5 M( I0 p( a1 \- I' R) L7 w. j8 c
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~, ?1 x" Q; P; n, x2 {
) t2 U7 v3 I. f5 L  A$ `: {
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
  d4 j* U7 G2 t5 `) `5 b同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-4-4 18:27 , Processed in 0.193107 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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