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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
# f. K( ?& h  S% ?可惜读取不到正确值。一直读的是FEh......7 F% M/ I5 S8 b3 o2 r4 T+ t9 D
希望各位大神能帮忙看看,指点一二。小弟先谢过了。0 c3 M% h* x0 D

- D9 a) ?0 ~- N# ^( e( q" v代码如下(masm5编译链接通过,DOS下运行):7 S' V/ v2 ?$ s2 m$ L7 }$ [
; D- P  g+ r  s3 n1 U$ y
assume cs:code,ds:data" \6 J7 R+ {" w9 y+ m

2 a# j7 L" s5 {3 C" ^- g2 idata segment  : g, ^/ h+ r; z  [. t$ E& h. d5 _
        EC_CMD_PORT equ 66h         ;地址端口   
: k# h" O8 c. m$ T6 V: a        EC_DATA_PORT equ 62h         ;数据端口   2 Q% X4 x" Q4 e
        CMD_READ_EC equ 80h         ;读寄存器命令   
# U4 M* ?2 ~* |1 Z) l  S" J1 \        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   ; e1 n  ?* D& O# C# E
data ends. H2 X2 P3 s) |: _4 M" m! m3 J
  & _2 a) T6 l. y: N. E( i; X+ _9 W
code segment
. i% z% l- l; e/ [$ ?' ~0 f+ Cstart:   ( e0 q. Y1 K; Q6 U  T% u2 F9 m
  mov al,CMD_READ_EC   4 {( W7 d( ]) \2 F3 e, S' {! V
  call write_ec_cmd                ;写80h到0x66h端口
  t& \( m: C0 R  mov ax,POLLING_DATA           ; K9 ~% O! w0 Z. v; M' ]4 g! o6 L
  call write_ec_data                ;写ECRAM地址到0x62h端口
. q7 R4 z; ?# a# k  call read_ec_data                ;从0x62h读数据
7 z+ S4 v* Q. m8 X: Y( P0 _3 }! x
  mov ax,4c00h  
$ W' ?+ Y- n+ c1 @. D* L! r7 s  int 21h: I: L! R% h8 [5 r% Z4 i# o" ^

( Y+ a" y/ a- owrite_ec_cmd:
1 |: W9 Y% d/ C( U* z  mov ah,al
. c. f- d/ Y$ b7 K. P" K  call pmuWait4IBE2 c; S8 H2 y( [2 |
  mov al,ah' I% J! D& z  B
  out EC_CMD_PORT,al( P8 |. \, s  {
  ret& H4 j  O) q; R; J

- u' f0 C3 \/ \& X% u. |; K  Ywrite_ec_data:3 ?7 C) Z! r+ C
  mov ah,al
  j, q" q2 m7 z% u. B" f2 Y- t) B0 w  call pmuWait4IBE1 ]2 ~0 Q7 v* ~2 c
  mov al,ah. }4 Z! v( G; }( Z% @: z/ h3 C
  out EC_DATA_PORT,al
* u( C, K) V( A  Y. I/ s% |  ret6 }2 z% L' z5 |. h

) F, K8 F" b- y% {4 iread_ec_data:* X2 q2 V* d' H; W3 M
  call pmuWait4OBF
7 T& C% c1 [" b  W! z  jcxz $+2
# c, v  h# I  C) P6 c  jcxz $+2
# V1 T  Z% A) }- s, B, c  in al,EC_DATA_PORT& L- g+ b2 @- P1 j# A0 ~9 Y" w% ]1 z
  ret0 e3 }) M& Y' z8 m: N
  ; t( B' u) z  w* H2 Q2 G. z& E, A( m7 [
pmuWait4IBE:! }% |8 n7 {+ v! G7 x; c- d
  JCXZ $+2
' _9 w- n* o! q  JCXZ $+2   
6 v* ^4 [9 n% G1 A6 @) D& z& n  IN AL,EC_CMD_PORT                 ;Read PMU status   0 B* X5 @# Y5 D0 I3 y( Z* \: S
  TEST AL,2                         ;Is Input Buffer Empty?   
# U2 Q3 ^- ^9 l% M  ]& M  JNZ pmuWait4IBE                 ;Jmp if no   
! k  o( O6 e$ f  ret
: g8 X% d8 g6 Y" ?' K
) V1 `9 c5 ?+ U3 ^6 w3 npmuWait4OBF:
2 Z2 w% j3 d- d. i, e  JCXZ $+2) X  V& V' O( d9 {: Z' y1 N
  JCXZ $+2     & Z/ x7 Q& G$ P; {+ X4 a
  IN AL,EC_CMD_PORT                 ;Read PMU status   
, E' a8 w3 f5 {2 x3 Q  TEST AL,1                         ;Is Output Buffer Full?   6 q6 t8 t* y2 a3 ~  D; U
  JZ pmuWait4OBF                 ;Jmp if no   6 z. p7 ?% q: S) Z
  ret
5 S9 O  u2 ?$ ^( B  8 B4 p) z1 r$ X3 N( T3 n
code ends  
& L: K5 n3 N. P2 \' zend start
7 S7 `$ T2 {" M8 y
: E2 b! M- x3 n9 [2 Z/ U+ Z还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。2 Q- h$ Z# H0 j& Y( W5 y5 n

, J4 J) W. ?/ u) @* K3 y% C( ], w6 q[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~/ R% M! V+ K' w0 C* G' @

4 D- B1 ?% [, X7 e" L另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
6 g4 {. x9 I* V: J. w% c同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-12-1 06:42 , Processed in 0.138652 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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