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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
3 ^/ k9 d# `+ P+ b" r可惜读取不到正确值。一直读的是FEh......- b# A( [8 W9 g) T+ a1 n4 L" U
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
" X0 i/ q) a& t, C/ Q& E. b. y( r0 N$ t2 E  h# V
代码如下(masm5编译链接通过,DOS下运行):
& F0 r' n$ z; t; B3 f; J) F' ^
8 i6 x; Z# Y7 d. c0 J, ]  Nassume cs:code,ds:data
- h: b9 n( F, a' N+ G3 f) d3 m+ B2 P$ M: @+ h0 b
data segment  
- u9 t1 D1 J" W, a) m        EC_CMD_PORT equ 66h         ;地址端口   ) Z3 S3 o# U( W/ u+ w1 ~
        EC_DATA_PORT equ 62h         ;数据端口   / e0 J( m: p1 ?! Z8 w7 D# v- o% d
        CMD_READ_EC equ 80h         ;读寄存器命令   
5 m' Z% m$ L( R- B6 x' K) ]        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   8 N$ f2 a; h0 m/ s
data ends, {' x) W8 e! y1 }* n  b2 K4 z
  
' y, G+ S& D- jcode segment
+ S$ O+ g& `, {8 U4 U- Jstart:   
. W6 M7 J8 X# K: U& j. M  mov al,CMD_READ_EC   
0 I6 J. `  W2 A, m% B7 |/ B  call write_ec_cmd                ;写80h到0x66h端口. G7 ~! o( r* c  U* b+ p: o
  mov ax,POLLING_DATA          
% T& Y* a3 R- X' [# @- Q8 A  call write_ec_data                ;写ECRAM地址到0x62h端口
( l/ o8 h: d9 Y" X5 }8 v  call read_ec_data                ;从0x62h读数据
3 y* S  ], A$ t" q7 w, ?0 u
( a& B* k& Z" I  mov ax,4c00h  7 G1 U& T0 `2 V) J; g6 [
  int 21h  U! _. ]! v2 `; B1 F; ?
; c4 Z2 ~6 V* t6 B# r
write_ec_cmd:
8 i( b, S' C9 @/ t# @  mov ah,al
, n; J3 ]+ w6 b. k5 P' i  call pmuWait4IBE+ F% n7 R7 f- T) z
  mov al,ah$ u( M1 r* r4 P
  out EC_CMD_PORT,al
# I+ ^; y* u4 |' N  ret3 H1 _) g- @6 b( P  l. U
+ T, r0 Y& ~1 ~
write_ec_data:
1 l" i8 ?  g7 A- t  mov ah,al( l9 u( Y6 V% `2 F! ]
  call pmuWait4IBE
/ i- X; Q; P6 c3 i  mov al,ah
  B1 W$ {" M- d* z' @6 J  out EC_DATA_PORT,al7 p# W- k$ H1 d/ L* s5 }
  ret3 r1 B0 `$ Q1 {/ m) |1 ~" L
2 `3 N- @. t: w# l. s
read_ec_data:& y) Z0 d6 t% b+ T' S
  call pmuWait4OBF7 O6 b6 J% C, Y6 V2 v" s% Z
  jcxz $+2
8 \0 a, S1 i2 c3 T% [# q  jcxz $+21 A, [, a( B) A7 k9 E( ^7 d7 \
  in al,EC_DATA_PORT# R0 h6 l* R3 x' r* X! ?
  ret% h8 W" j; A  |) m6 d
  ' o( O$ q( E5 }
pmuWait4IBE:
( x* p7 s! r0 e5 \+ Z9 X  JCXZ $+2
, D: U" i+ n0 z  JCXZ $+2   - W: m, U) E: y/ z' y
  IN AL,EC_CMD_PORT                 ;Read PMU status   & @' s' e* K( q# g; |
  TEST AL,2                         ;Is Input Buffer Empty?   ' n* ]6 X# K; j0 n- D- Z  v
  JNZ pmuWait4IBE                 ;Jmp if no   " @- d5 L7 D1 |& \. X8 r2 S1 A
  ret+ k% E) F$ m" F  g
8 D& x1 k, D0 o* f$ Z
pmuWait4OBF:: _' |9 \. _  f0 O" K6 o* {
  JCXZ $+2# L. ]$ X/ }2 c* ~
  JCXZ $+2     / z- i( d% p: t% u8 _& R) N1 `6 t9 G
  IN AL,EC_CMD_PORT                 ;Read PMU status   
/ A1 d5 t7 ^8 F  TEST AL,1                         ;Is Output Buffer Full?   
3 t+ b2 Y8 Y0 N  JZ pmuWait4OBF                 ;Jmp if no   
. y) s: g8 |$ R6 z  ret) J" W, S: Y+ k
  
) [( v+ G$ y2 _* `( a9 I" ucode ends  
0 Y( R$ e# Z6 `' ~3 T* X! ^# iend start0 g+ W" s' P  b

! V/ M4 I- B9 ?( _( e$ ~) R还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
- N. e/ `9 U1 V
$ s0 b' H& p1 E1 a  V% a[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
  E( m& I9 f; N) M( B/ k$ t1 Z
5 N& @3 A0 _+ h2 D/ D* ]9 P另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
9 N9 C! j. J9 H. |, d同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-3-5 00:34 , Processed in 0.020478 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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