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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。3 |/ ~* `% S' U0 h) O! H% h- Y
可惜读取不到正确值。一直读的是FEh......
7 f! r1 z: L; K1 a/ L希望各位大神能帮忙看看,指点一二。小弟先谢过了。
+ B/ x8 ~$ h: Q
; J+ j' {. ^2 p' _# e, ^" s! B代码如下(masm5编译链接通过,DOS下运行):
4 r. {" j7 }8 L* f) S& C  J) ]9 {+ W# r/ Z" s
assume cs:code,ds:data
) j$ E- F! ]2 P, g
/ b9 v- _5 T' D0 d0 N; b) }data segment  
( v- R, ~8 @/ I4 ]4 C/ ~; n# x7 \        EC_CMD_PORT equ 66h         ;地址端口   * M3 _9 M' T2 V
        EC_DATA_PORT equ 62h         ;数据端口   * {3 h3 I# t5 S+ s/ o
        CMD_READ_EC equ 80h         ;读寄存器命令   2 Q" w9 [5 S: ]8 e9 m! W
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
1 U9 O7 B0 b" i2 q7 Z0 _data ends  }$ w# O% ?: L( }* ~* i# u1 d) V
  
! s2 h' Y, |2 hcode segment ( D$ c' K* N) h: Z
start:   
( X. R& c6 h( Z1 @6 W  mov al,CMD_READ_EC   . U' r9 T3 w! I7 g9 F. B
  call write_ec_cmd                ;写80h到0x66h端口
6 O0 l0 l- [6 m( O! ]  mov ax,POLLING_DATA           " {, w9 n; y. J: p+ j3 v3 }- L" a, M) H
  call write_ec_data                ;写ECRAM地址到0x62h端口  L2 I5 N' ~, e; |
  call read_ec_data                ;从0x62h读数据
8 s+ S- F! w' H/ N" n8 o! J5 h) ^4 a0 n. ~
  mov ax,4c00h  
* K2 q  Q1 x# l+ n+ N  Q  int 21h
0 l  c: C" z9 L. y, Q% `6 V! @0 d# x7 k0 u; d
write_ec_cmd:$ [! J% J; ?% I, W: Y0 K9 J
  mov ah,al3 t# o/ X, s; u% q2 M+ v1 Y
  call pmuWait4IBE" P4 W' k$ Q, o6 Z4 Y' d) }* |
  mov al,ah
. q: C8 s! R( a1 F  out EC_CMD_PORT,al% }& y( X; U+ d3 r! C( `
  ret/ @5 i/ ^& ]. e! e2 E# I/ ?  p

9 E4 s( y0 F1 mwrite_ec_data:
% }& O$ S0 j8 L% S+ o- \8 I: \  mov ah,al
; ^1 |: C+ ^1 A/ j4 Q. L  call pmuWait4IBE
7 O7 ^; ?5 P% @3 x/ t" S8 R7 L  mov al,ah
. N" ^$ r: S6 E, ~% a# f+ B& W  out EC_DATA_PORT,al) P; N  X3 _, f. \/ y
  ret
+ x/ r. H$ \# ]8 ^/ y7 }/ v) t+ o/ p
read_ec_data:2 |" {, }# [! W: h% A' b% [
  call pmuWait4OBF
) _/ Z6 [: k  U0 `' S' h7 c  jcxz $+2
+ X4 l/ L5 U+ T( [) s$ t7 N2 S  jcxz $+25 v" b9 Y! S8 E$ B
  in al,EC_DATA_PORT
3 E2 z& o* H( P$ N- Z  ret
3 J) ?* w9 n6 Z8 g  z' `# l& G  
, Y+ U# \0 M, H8 ?0 DpmuWait4IBE:" M& V/ P4 M" U* ]  I
  JCXZ $+2+ r8 ^( V. Y" w: h/ V4 D
  JCXZ $+2   , u: w) v$ }8 E- r  M( R1 P
  IN AL,EC_CMD_PORT                 ;Read PMU status   
& W4 R) K! g4 u, r! I  TEST AL,2                         ;Is Input Buffer Empty?   5 X1 {* J3 e/ o0 J0 [; B5 u) X
  JNZ pmuWait4IBE                 ;Jmp if no   9 s/ N" j  y. i6 w0 b9 p
  ret5 m9 G! L) Z, ~! A* _! K/ [

! v" w8 ?, H9 Z1 FpmuWait4OBF:: p$ ^. T* a& ?# Z3 ]; E- M, q, O
  JCXZ $+2( G' i0 H. l( b- D
  JCXZ $+2     8 l- Z" |; i# @2 b* p- r6 N0 m
  IN AL,EC_CMD_PORT                 ;Read PMU status   
7 c* Z; p7 O# u. N( F/ h, n  TEST AL,1                         ;Is Output Buffer Full?   3 B& ~3 c% ^' l5 ?
  JZ pmuWait4OBF                 ;Jmp if no   
9 m/ E6 ]7 }& J4 U# b; s6 b  ret
2 v1 ^. }" c5 x5 Q  . }6 T; q& ^8 {. C3 `: I
code ends  - A: [- a3 b8 F# t/ G: V
end start# Y) m- E9 }  e- [3 e
( r/ `# p! a$ R3 J
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
8 K  F7 M9 ]/ `6 a+ |+ y1 s2 W' [
5 u& T. Q4 Y& t& Y+ z. w8 a0 d6 t[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
6 v: Q6 v8 V& u: G
9 @8 b& n* P1 N* [! Q另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
9 V5 m* Y$ R- O  o$ S同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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, 2025-5-2 02:44 , Processed in 0.044082 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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