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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。( `" ?9 R+ d7 k6 ?
可惜读取不到正确值。一直读的是FEh......
! @, E- j6 _: p% x4 N希望各位大神能帮忙看看,指点一二。小弟先谢过了。2 g4 V* u- s7 A$ A

! u( w6 ], T8 u/ M+ G代码如下(masm5编译链接通过,DOS下运行):
* x' T+ C6 o& T! A7 t8 \4 ?' C4 \$ p) U- g9 L8 z% L+ J
assume cs:code,ds:data
4 A0 A* a( U# r3 Q% _; g3 X
' ~9 i/ ]) T! ]$ _4 Sdata segment  
2 @7 u) l. {  k4 V        EC_CMD_PORT equ 66h         ;地址端口   % A" y6 J$ X" o7 }5 }/ X: L
        EC_DATA_PORT equ 62h         ;数据端口   
& _* }) w* o! h& _3 i1 H3 `        CMD_READ_EC equ 80h         ;读寄存器命令   
8 W! {2 r7 A0 m; G7 c        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
9 ~8 C7 T- [7 G! Bdata ends9 b) I3 I& r0 w. w4 W
  
+ e( {8 v6 h6 ?& G1 [+ b$ R7 D3 rcode segment
$ a7 f9 f, P6 d" U0 f5 c! A; X# b+ Astart:   
* l( K# m! N  _) b/ ]5 i  mov al,CMD_READ_EC   * w8 H! V6 X, p1 a2 m4 A
  call write_ec_cmd                ;写80h到0x66h端口
! q6 x4 T- e; a9 ]: u  mov ax,POLLING_DATA          
8 s+ G$ S& i. n  call write_ec_data                ;写ECRAM地址到0x62h端口' m6 c) Y/ E" p. l- Y  T: _6 l
  call read_ec_data                ;从0x62h读数据& I0 M/ V; w, X4 y* N& Z1 R

9 z" C6 }: H8 t/ b- |; T5 d% g  mov ax,4c00h  $ N8 y0 S4 }( H3 W
  int 21h
8 U& v+ l; Q- p4 N3 T/ g( n
& m8 s( B' N: X% Q" {write_ec_cmd:: \# \3 ^# O& c3 a* p6 k
  mov ah,al$ D4 r1 F$ X8 t8 y0 y$ J; w; E
  call pmuWait4IBE
5 b' f/ D! `" V4 L  mov al,ah
+ E( y$ f4 c, {' |) o  out EC_CMD_PORT,al
& i* V% y" p% A) S4 l  ret
  F, {3 b2 i' }. V$ r0 T' J8 A  S
+ g  O8 l' Z$ Y& ?8 N7 R1 Twrite_ec_data:
0 t6 v. j5 b& b6 L4 }  mov ah,al
* r% n1 z* [: D# q" @) \  call pmuWait4IBE/ E, [1 ^9 m) X# P" t7 b
  mov al,ah/ @9 l% ~- A& V1 X" j
  out EC_DATA_PORT,al
; m/ h6 Y$ b- P" j( f4 D  ret2 h- T+ [. K! z6 W5 v* H
/ P! q/ B& I6 k; N0 `
read_ec_data:& N9 B1 S; w$ q9 T! r$ k* e
  call pmuWait4OBF' L) U- B  \/ Y/ O2 Y( ~: L
  jcxz $+2
6 |6 L. _. e: M! A9 C9 R- e% b  {  jcxz $+2
6 x8 P. Y$ [0 ~) @1 r; {  in al,EC_DATA_PORT. \& w+ A: g8 t  V
  ret
# `8 d2 |6 v) C4 J! ~3 m  
0 n$ ?: `9 r+ u+ YpmuWait4IBE:) A, U; H- Q$ s3 ~( C& S# @" l3 E
  JCXZ $+2$ H: ^$ i  U% ?
  JCXZ $+2   . P3 U+ T6 o5 |+ k* k$ Y) m( A2 b
  IN AL,EC_CMD_PORT                 ;Read PMU status   % `1 d; u$ j2 @8 V4 j
  TEST AL,2                         ;Is Input Buffer Empty?   
, w9 f6 r, M" Y  JNZ pmuWait4IBE                 ;Jmp if no   
- w& P3 T; F- `( \/ `) [  ret; Z6 `3 F9 ^( e
$ S) N% P$ y9 U6 x8 E
pmuWait4OBF:( j5 Z' H+ D! k  x
  JCXZ $+2' d  z% o8 a# k9 q% V' i
  JCXZ $+2     / i4 @2 A( E7 I# h- E
  IN AL,EC_CMD_PORT                 ;Read PMU status   9 C, ~, ~2 U2 l0 y0 ~+ k4 N
  TEST AL,1                         ;Is Output Buffer Full?   6 a. q3 {+ v' f1 L% }  P* ]7 p
  JZ pmuWait4OBF                 ;Jmp if no   
, ]! o/ \) r- ^% D9 _$ [  ret* r' _- c* d% V2 X5 M3 W- i
  
8 o/ H; x4 `1 [code ends  
2 ~/ }1 [9 W+ v) lend start
. }( R! I- Y0 N1 |
6 p* ]* a2 a' }+ i还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
9 q( Y8 l: x! o: V
/ O% _( d) U7 Z+ h# h6 P[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~# P1 h5 D# n, g* w" S% Z

' c4 H; u& Y. R  t9 X5 ~# Z另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
; P) y$ Q7 A7 r, @" h6 q9 f同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-6-13 07:20 , Processed in 0.022086 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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