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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
6 a3 u/ w; ~8 f) R% Q) R可惜读取不到正确值。一直读的是FEh......
8 R! N# ?4 g+ [: j& O希望各位大神能帮忙看看,指点一二。小弟先谢过了。
2 Y3 |8 s! a4 E1 P% ^$ R; g1 Q: y- t8 a( N5 w& R9 k6 n
代码如下(masm5编译链接通过,DOS下运行):0 G& K" n+ \, {8 [5 E6 ?& b7 c' Q

2 x1 @8 w1 s1 qassume cs:code,ds:data' [3 w0 N  Z4 M. Z

& M4 m1 H" P# }data segment  5 t9 G% h3 J9 m( \2 O7 u# V
        EC_CMD_PORT equ 66h         ;地址端口   
* u/ A! i; Y" G; x7 p" B) K$ X        EC_DATA_PORT equ 62h         ;数据端口   2 x- c- y# R, y9 \
        CMD_READ_EC equ 80h         ;读寄存器命令   1 V5 G  U3 H* u: ^4 y
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
2 {! O# E, p8 q" i3 ]1 e9 e4 m9 ddata ends9 m0 k8 S. o, a* v; L; \0 U; W
  
9 l2 u) H3 c6 n: M/ Tcode segment ; y! G9 x! Z6 s5 {7 ?$ S; z4 @+ ^
start:   
3 E$ D9 A. @6 }$ c  mov al,CMD_READ_EC   
4 |; l( E5 V- B& Z! C  call write_ec_cmd                ;写80h到0x66h端口9 l+ N! i% b: c* B3 o
  mov ax,POLLING_DATA           - r& \& T$ t) _
  call write_ec_data                ;写ECRAM地址到0x62h端口) H' C3 `6 g6 M- I
  call read_ec_data                ;从0x62h读数据5 ^: c. i1 y( i$ a
: F$ w$ u3 X; @) h. V4 e
  mov ax,4c00h  
1 K8 S$ k; @- K( B  int 21h! E: b1 o/ w( N0 Z- Z
4 d' X  d" G( m7 s% [/ N) `
write_ec_cmd:
$ m7 a. H. b) k6 Z  mov ah,al
+ K& s  C2 i- R+ U' P2 }  call pmuWait4IBE
$ l0 i) ^+ I; `0 e  mov al,ah
! }5 D! E( `3 I$ J  out EC_CMD_PORT,al0 G. C6 R8 o6 i* T& s/ k& f
  ret& c' ^* ?, Q4 q8 n& r, V
: o5 V5 W, n; v0 s+ e& }/ G: x
write_ec_data:) n* Y0 Y; q% \; q- n, q
  mov ah,al! I- `# D. [7 W9 A
  call pmuWait4IBE; u( g- s0 ^+ b& g- t6 p* m
  mov al,ah* N5 N, j3 Z2 Q" _+ m+ @- z
  out EC_DATA_PORT,al0 K! ^' J* v; W9 `+ @) d& c5 v
  ret8 f6 H4 x0 N2 z: T

2 d* A- b* i. T8 Yread_ec_data:
. B& j. m0 f% y2 @( l  call pmuWait4OBF
; _8 a9 I  l, g, `4 Z  jcxz $+2
, ^/ H+ G3 {# [3 o# F* ?. G; ~  jcxz $+2
7 q$ Y7 Z: |; |  in al,EC_DATA_PORT
7 E. z& S  V* x& ]4 S  ret- I- V5 k" H) L# S- p
  3 F. E" i1 n7 S7 E9 n+ P4 t/ J  Z
pmuWait4IBE:
+ y3 c, h9 R3 Y) O, ]  B  JCXZ $+21 p) D7 G% A7 y% K" j- P
  JCXZ $+2   
8 C% h: R3 g  E1 n# f  IN AL,EC_CMD_PORT                 ;Read PMU status   
7 M, z9 d$ L0 M  TEST AL,2                         ;Is Input Buffer Empty?   * t, f9 V/ m9 O
  JNZ pmuWait4IBE                 ;Jmp if no   
' A+ h6 i8 I- Q; s, K  ret
2 V1 [! h2 m' C4 C& Z3 @' I* `8 k6 R' T' ^
pmuWait4OBF:
# R" U6 B9 z* m! B. ~7 z  JCXZ $+2
( s) B8 G9 W2 b5 X5 F3 n9 x8 A  JCXZ $+2     
0 K' C) g2 j7 ~9 r/ H+ M, R  IN AL,EC_CMD_PORT                 ;Read PMU status   
) m+ B" L4 `$ G1 T  TEST AL,1                         ;Is Output Buffer Full?   ) Z* t6 a1 Z/ B" g) Q  J" d' b0 Q8 l# L
  JZ pmuWait4OBF                 ;Jmp if no   8 I9 }, ^) L/ I5 s! E
  ret$ U# f' ^) f5 ]2 M9 u' a. q1 ~8 M) \
  $ }1 f9 K' F; E; T7 C7 C
code ends  4 K  c( a( ^+ ?6 C4 q
end start
- U3 J. Q  w& A3 C+ p+ b- I. ]% u( T4 Z. K/ s: b. I+ V
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。: P# |8 _7 j: j5 h

4 ~' E' y" ]; G9 M& ]- i[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~, D# P, j& Y, k$ {" P

9 M/ m7 }8 _/ d: y( v: Z: t另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。5 p9 q* v  b0 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-1-12 00:47 , Processed in 0.094355 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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