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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。+ y) j6 w' U! C5 i8 i3 h
可惜读取不到正确值。一直读的是FEh......
. X6 F2 C9 X/ i+ s; c! H4 M希望各位大神能帮忙看看,指点一二。小弟先谢过了。7 `4 D" f! V; H

4 D3 \* B& N- u# v' s# l9 W代码如下(masm5编译链接通过,DOS下运行):2 W, _3 |/ W1 T; y# Q. w

* \; J5 c8 [0 a/ W( u0 U, B1 i, Lassume cs:code,ds:data
2 H( l$ E! g6 @( }" s' J- G- o( a) E2 B3 r% H
data segment  4 _. `2 L, r; E& T# n
        EC_CMD_PORT equ 66h         ;地址端口   
7 w# n( ]9 A- a! P5 d        EC_DATA_PORT equ 62h         ;数据端口   1 |4 n! y/ P2 `
        CMD_READ_EC equ 80h         ;读寄存器命令   # ~* U& \8 O8 I, e6 d7 f; ?6 L' B
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   - F5 t# c# F' Z: a8 @* R
data ends; w: \( j2 I. e) C- I& A! }
  
0 f- f. u, I1 [8 z' U9 \8 U7 o$ Rcode segment 3 _0 a# `8 k, ~# S; D
start:   8 ~  X; |' [. B$ K% ]
  mov al,CMD_READ_EC   
3 P; i; E6 c6 m- i4 }) N  call write_ec_cmd                ;写80h到0x66h端口
& G8 _3 w6 B  E( b: O# n6 b4 o  mov ax,POLLING_DATA           9 z  G# n6 c& X3 a! x; ~0 r) Q
  call write_ec_data                ;写ECRAM地址到0x62h端口
6 z  J' F6 v1 I: ^/ d( x  call read_ec_data                ;从0x62h读数据
# d. y. u  j1 m* J  R* N. O5 h3 \  s
  mov ax,4c00h  ; u4 b( ]! B" K* ?  q1 u! w3 a
  int 21h
. m9 ?: h7 q, b* d) J/ p1 B6 ?9 O* b) t1 [3 L2 e9 `
write_ec_cmd:' q% g+ j7 }' h
  mov ah,al
6 h: z/ [) J0 M, I! S: }  call pmuWait4IBE
4 B  {' q4 a) f5 F! i# A$ }  g- H  mov al,ah" o, |5 t" w9 S: r6 j- V6 _% w
  out EC_CMD_PORT,al
4 |0 @4 f3 ?' L  ret
+ M( h9 U1 A: h& M% o7 d. S2 E& f3 i7 {+ t, E6 m
write_ec_data:/ N( I6 v$ T7 ]+ y  X
  mov ah,al. A6 v0 X9 s' }9 y8 H$ f5 O, v
  call pmuWait4IBE9 @. }( \- N. C! v) X2 A' J
  mov al,ah! g0 A5 ?$ @/ p5 P3 q, {- w
  out EC_DATA_PORT,al
" o! w1 i) M2 k3 K! U$ Y  ret
8 h4 {+ {0 E- W: w& t9 s, R# {) h2 R
8 ^$ H& ?5 \* Y" _5 N# g0 @6 i. Eread_ec_data:; X/ n9 X/ h3 s3 q
  call pmuWait4OBF
2 Z9 `/ ]4 f0 X; I1 g. L  jcxz $+2
$ x# {1 k- S. v( y5 T  jcxz $+2
+ w4 Y; E" F* K  in al,EC_DATA_PORT1 V4 i& p3 K( x$ t0 Q
  ret
7 [7 u, z3 n' p+ t, M$ f; C  
1 a" _' S% ]! a2 ]5 ~- {5 apmuWait4IBE:
! m7 W, W0 h6 f  JCXZ $+20 b# v& S* M) c, g, V
  JCXZ $+2   + v' ?/ H+ r8 U+ P9 @9 \) X) ^& J& L
  IN AL,EC_CMD_PORT                 ;Read PMU status   0 x) w- P) B5 D( s
  TEST AL,2                         ;Is Input Buffer Empty?   
; U0 Y4 w% \/ ?- l" L9 L3 W% v2 k  JNZ pmuWait4IBE                 ;Jmp if no   
4 `, e( ]" o% f5 E  ret; u: q. b2 t, ^) H' Q) L, G! a
# Z% Y1 a( B2 c" Y; i% }
pmuWait4OBF:9 F/ r+ ~/ H8 q$ B0 W, b' L
  JCXZ $+2
0 i+ s7 f* V0 ]1 M- K& `  JCXZ $+2     
, M7 ?" F0 s! }  M, k  IN AL,EC_CMD_PORT                 ;Read PMU status   
; L7 T# U9 q9 ]7 x  TEST AL,1                         ;Is Output Buffer Full?   
+ j# ^6 j5 G- u9 u9 ^7 l  JZ pmuWait4OBF                 ;Jmp if no   ! ~# {% b& M3 E+ H# h+ d, d
  ret' O0 X$ V2 L7 j- e" n' X" S
  . A+ o) M5 C4 y& A. V$ o8 S- z
code ends  
' u  d4 F5 s& L) z4 b$ O4 u- zend start
* e( K3 ^7 ?& W2 y9 l& W
  F# R. M6 v* h2 k0 U还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
1 Y/ m1 w( q* `, d# o% |5 G3 M; }
- C! r9 T6 j1 ]: `: E( z' b[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~7 |6 l' l2 }9 z7 O- Y1 b; Y' a) `
$ E' w: }- ?4 y/ X8 i2 S
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。3 ^* C( d4 o* ~0 i8 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, 2026-6-29 02:46 , Processed in 0.171103 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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