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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
7 {+ l: Q* K* j2 S: W8 o可惜读取不到正确值。一直读的是FEh......
9 B# y$ I. K: m; X+ _希望各位大神能帮忙看看,指点一二。小弟先谢过了。0 l; V6 Z0 [* I6 _& C& c
: w3 m( a9 T2 \- k: g7 h4 C
代码如下(masm5编译链接通过,DOS下运行):
0 r3 o4 P& u7 Y! U8 q7 C4 R% Y$ J' U. _% j9 v. f
assume cs:code,ds:data* E" J6 S2 b& q3 \8 w% n
" z/ i- [$ j" Z5 U' D; T- G
data segment  
$ S9 r8 J  \2 T# R8 e        EC_CMD_PORT equ 66h         ;地址端口   
: X6 b: f' K9 |1 s& U        EC_DATA_PORT equ 62h         ;数据端口   
! t7 o1 R, T0 @" h( X, X        CMD_READ_EC equ 80h         ;读寄存器命令   0 t4 V7 C+ p$ O
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
4 v  x' D. c$ R+ ~: ydata ends% z& [  l: V% K- O  L- l3 {! O! [* v
  : [7 [! A7 Q' i/ J. g
code segment
: p; V/ ^' h2 k. v2 u- W3 Wstart:   
6 y% @+ _, e5 E  mov al,CMD_READ_EC   8 `: G& B! C9 Z3 N$ }- }
  call write_ec_cmd                ;写80h到0x66h端口3 n. F1 D1 [# l5 O/ ?, Q5 h
  mov ax,POLLING_DATA           " d" Q  g1 S, v$ ~8 j$ T
  call write_ec_data                ;写ECRAM地址到0x62h端口
2 H: l1 J- F7 z  call read_ec_data                ;从0x62h读数据
/ U6 \# s* D( Q) Y4 I2 l1 o% w6 c. w: c+ O0 G. B' H$ j
  mov ax,4c00h  
* A' [5 |: r9 W  int 21h
. e3 N* e: V; x, h  v- m. }& G' B1 b% i$ d; n  h: Z
write_ec_cmd:
4 p- |7 r9 ~% n0 Q9 S: _' N4 l  mov ah,al
' |: D: a$ d1 @& X+ n+ ?2 g9 a$ u1 m; y; v, `  call pmuWait4IBE
& u7 z3 E2 H2 X, S; R3 ?2 p  mov al,ah
( }% y! M$ _0 I  out EC_CMD_PORT,al
" k" @% y- t, R+ h; \: R  ret
! Q  E1 `1 L3 s/ y) b& W  O1 Q: L0 N% l# G
write_ec_data:0 \- x& ?* B; ?% T
  mov ah,al/ F. A) h# k/ V4 |8 n
  call pmuWait4IBE& ^3 E1 ]3 B3 L) c2 n" q
  mov al,ah  P+ O+ f. s* k# ?
  out EC_DATA_PORT,al* P  w) i* L4 F
  ret) C5 q9 Q% L3 a3 X/ I) M6 Q1 P: n
! L, d$ B- k6 A  B& x4 t
read_ec_data:
9 w0 T% Z8 N* W/ X, u  call pmuWait4OBF* T- _0 q0 F0 e& b) Q
  jcxz $+2
# N! Y- |4 d/ I; h, q9 b  jcxz $+2
( @1 b: U) Z4 V2 b  in al,EC_DATA_PORT2 g, ^6 q( J. e. V
  ret( w5 R* f4 N+ J2 ?
  1 g( e2 n" M# O2 {1 f2 W
pmuWait4IBE:: X) s& S5 `8 D- @0 j
  JCXZ $+2
+ @' n: p8 J9 E, x5 ~3 A# Q  JCXZ $+2   
1 k/ u6 t! b  b- S0 `  IN AL,EC_CMD_PORT                 ;Read PMU status   $ W" Q& Z8 U) u$ _7 d
  TEST AL,2                         ;Is Input Buffer Empty?   
! }" M$ v2 }7 g9 R( f  JNZ pmuWait4IBE                 ;Jmp if no   
+ v4 q( J2 w! o* L6 k; G9 b* j  ret
- R0 r5 h9 q! R6 E! M6 o- I4 N0 d1 {2 L7 a; u
pmuWait4OBF:
: W' I4 _7 X. x5 B5 U5 r  JCXZ $+2
2 X9 S4 v( ?) U  JCXZ $+2     & w! H) I1 p( f  H, P& D
  IN AL,EC_CMD_PORT                 ;Read PMU status   : `1 I5 K2 n) o, i! b
  TEST AL,1                         ;Is Output Buffer Full?   $ B, i) ^9 ]7 m) [% N
  JZ pmuWait4OBF                 ;Jmp if no   6 X2 _& u4 I4 o% k- |# B
  ret
9 i1 c9 b% G! a* G1 |. n3 C  
$ A4 V5 ^" B: c0 h5 o9 B: \code ends  
3 E7 L0 D4 @8 Q  J# Fend start, p' |( p. b/ ?- a& u

' }' J6 D; R7 p7 I0 r% c( ]还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
$ R/ x8 L7 z* j
; {! b% ?# D% a3 k! Y" `% r, X/ z[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~1 D! a( ?0 v- S/ o. u
0 B8 D# V7 c6 x# c6 l$ J8 T3 v7 f( v
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。! j! V! ^" S9 ~7 h/ D7 k
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-25 00:04 , Processed in 0.374683 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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