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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
2 R: A& U; U, P) J可惜读取不到正确值。一直读的是FEh......8 \9 o7 w1 [! d
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
: |# X& t4 i) m0 W- O' o/ Q  A4 x( y
. n# t$ C$ n# x9 [' f代码如下(masm5编译链接通过,DOS下运行):
# J. A- ~8 O7 O& N. M) [6 Y3 D, {2 C1 Y
assume cs:code,ds:data
+ H$ I+ N; U5 ]& b7 O  G
# \) _/ W0 B7 h" ]! o- pdata segment  4 ^( w2 c) N- ~. P5 V
        EC_CMD_PORT equ 66h         ;地址端口   3 a* H) H: |& ~
        EC_DATA_PORT equ 62h         ;数据端口   , k- ]1 s2 R  V1 R! K; t: M
        CMD_READ_EC equ 80h         ;读寄存器命令   
0 J! r8 D8 S% Q' |% i+ Q, U        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
! d4 p% S! Y/ r# k8 O' Ldata ends
4 x) m# _  T, v* @* T1 C7 D  9 `* ^+ L: E: Q( h% Z% i
code segment
3 w/ G% `0 X$ @6 ?! Jstart:   $ a4 }  Q: Z0 t1 m+ D
  mov al,CMD_READ_EC   
) W' m3 V5 u' |  call write_ec_cmd                ;写80h到0x66h端口' x$ L/ Q) K9 Q( m3 V
  mov ax,POLLING_DATA           4 ?) E( [7 j5 k+ g7 |6 |
  call write_ec_data                ;写ECRAM地址到0x62h端口
% B4 w" Z1 O5 z7 k$ l  call read_ec_data                ;从0x62h读数据
- m: H  C8 h6 T4 ?' \0 U
3 ?/ r3 i) c% \; {$ G/ }8 u/ B; |  mov ax,4c00h  2 ~- ~7 a/ v3 w3 G
  int 21h
. t* G" r9 Z# e$ R
% |4 C  p! ^/ [* j, h$ @write_ec_cmd:
$ f9 k2 n7 |, V  `6 ]2 ~  mov ah,al: w. O# [  F# i* [8 b
  call pmuWait4IBE, x/ N2 q& w4 W3 _0 s
  mov al,ah
! N5 g8 g' ]; a) @  out EC_CMD_PORT,al
. j$ N: a; C. q: Q* K& H  ret8 X5 |/ k: ^) y4 K# A& J  G0 k
1 H, y! y, i. A% w
write_ec_data:' Y8 w6 G' Q: l2 @$ M; p/ w
  mov ah,al
' z, _4 O9 N3 L; d  b  call pmuWait4IBE
$ i/ G' n' F. k5 Q* Q  mov al,ah+ R7 @2 o# n: n3 o
  out EC_DATA_PORT,al" K2 a  {5 L1 z$ P  S
  ret' ]/ V8 h6 ?1 Q6 e1 J

0 T$ ^  \5 v2 @  Nread_ec_data:6 ]  d6 v6 n- ]& _$ W- |% y  |
  call pmuWait4OBF6 I) `% J8 v: f1 T
  jcxz $+2
2 C+ H8 `* t" z4 ]2 K, h+ N  jcxz $+2* Z! x& q. }! Z2 H% f" U
  in al,EC_DATA_PORT6 n4 J; Y# g; z. G5 t
  ret
- }* U, w0 r: g/ r  
) N6 W& {" T. |. B8 s$ l( E) |! mpmuWait4IBE:
) z- ~& [) w5 A( H; o  JCXZ $+2
) D" O4 ^% G$ m6 z) S9 k  JCXZ $+2   
: {4 X8 M7 `% c, ?( [; C  x& v- L  IN AL,EC_CMD_PORT                 ;Read PMU status   ( y! n2 A4 d& A0 h
  TEST AL,2                         ;Is Input Buffer Empty?   
; o$ p8 M$ j7 F  JNZ pmuWait4IBE                 ;Jmp if no   
( z9 l$ e1 X4 c  ret
) O! p. S; U7 ]
3 T- A- j! p9 E) R  upmuWait4OBF:+ \: m5 z8 P, E
  JCXZ $+2
- u/ H+ Z! ~# N, A* O7 T9 n1 l6 T  JCXZ $+2     
) B# h2 r: E  o; p  IN AL,EC_CMD_PORT                 ;Read PMU status   % M; n  h# C3 ~6 A/ M
  TEST AL,1                         ;Is Output Buffer Full?   7 J, [6 ]9 `) P  {; I; ?9 T
  JZ pmuWait4OBF                 ;Jmp if no   
+ }8 Y, `6 v6 H7 }: s  ret
, S! h/ Z' _9 O. S  
* D9 s+ _% |/ D- n  n: Ocode ends  
, D- l( N4 K5 L( r( E; t  ~end start
2 @# c3 s9 K- V# }9 S
0 M* B% B( g8 G. Q/ g3 |& P还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
& \. k+ u0 J) D& l
  e' H( u1 j$ |, o  O[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~4 T& B+ ]. r/ ]; E5 Y7 ~0 K9 A# E
8 `% f; f# f+ m( m( N/ i* l. Y) W
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。, D: z  m, v0 ]/ s9 l8 Q4 L
同期待高人答疑吧。
回复

使用道具 举报

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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