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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。7 i" a! K7 V* }, B
可惜读取不到正确值。一直读的是FEh......, `0 t) N" ^  E% }$ A# j/ l: W
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
/ U1 {( Y' a! v* l) F2 i. l
. `- G& c9 r) e( J. P) l. @" f代码如下(masm5编译链接通过,DOS下运行):
7 A0 W5 R3 c2 }" x/ x! E0 _
4 t% j2 W- U  x, H: L; Zassume cs:code,ds:data5 ^8 C6 L0 ^( j1 x
. ]) p" \0 h4 P% [
data segment  
" k8 H) Z7 Y* L/ m" f$ @4 [" ^/ |        EC_CMD_PORT equ 66h         ;地址端口   
3 C& a0 E- y$ q. `2 y        EC_DATA_PORT equ 62h         ;数据端口   
5 _4 G9 O4 M% d. {        CMD_READ_EC equ 80h         ;读寄存器命令   
" o/ ^$ ~. V& L: ^        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   - x7 {7 H% g+ P- g9 @
data ends
$ k# E$ B' e+ o$ x  [/ H  7 a/ T# C8 q* G: x/ N
code segment " [7 K& f9 r# ?
start:   
0 U( ]$ m" k) |2 t1 k) [+ Q% Y0 }  mov al,CMD_READ_EC   0 `( }- \+ O/ i
  call write_ec_cmd                ;写80h到0x66h端口
6 Z4 s) I* f( ^, ~8 o  mov ax,POLLING_DATA           , I4 x; u  }6 v' a1 S/ w$ J. z! p
  call write_ec_data                ;写ECRAM地址到0x62h端口
! [: a* c1 W8 s! Q" D4 M  call read_ec_data                ;从0x62h读数据% u2 A, T! w! `5 `
1 p' Z/ V. @1 S0 i* R+ N7 E+ i# d
  mov ax,4c00h  " \+ \( u, `1 {. z, Q, H! O* Q
  int 21h; ^& K2 v" Q7 d, l
& ?# Z, u6 Z. T
write_ec_cmd:
0 O0 T* S; D5 f% l; l( q  mov ah,al
" K1 a8 }. H0 h/ _& m7 W  call pmuWait4IBE
; i- V4 W! _) ?7 l) q  mov al,ah3 c+ U4 M5 l& ^4 I. y1 g
  out EC_CMD_PORT,al: f4 b0 ~: L9 R/ F' O  c
  ret
! _5 S! R) q% j. t% \* |0 O- R: b4 i4 d
write_ec_data:( f  c: F" V% \
  mov ah,al( E  k: \  O+ |% o2 Q8 x$ D# a3 y
  call pmuWait4IBE; z  @# y2 }9 J* {9 z* e+ L
  mov al,ah  |! W! `" x: H/ W7 s  L
  out EC_DATA_PORT,al
- T* ~; ]" t6 g) o; L' H  ret( P' v" y7 H$ z
3 Y" J7 q3 _5 w! O
read_ec_data:
( [, k0 n, g5 m* Z8 P: b$ G  call pmuWait4OBF( [6 j5 k+ g/ }1 \: q/ S, `
  jcxz $+2
" Q: r5 `. _% `3 o" T7 L  jcxz $+2, i3 o  |+ g: i" H( s+ T
  in al,EC_DATA_PORT
# @7 k# |+ F& V: t+ S  ret; X( v' x) y6 x2 S. O/ T' p. i: [
  
# J5 a1 {% U! K- `# S( {" m: YpmuWait4IBE:
, h' A' I! {4 R4 D: }2 f  JCXZ $+2
' ?5 `8 u% n' J% S. m6 i  JCXZ $+2   & x5 R5 X) @. j0 s' b
  IN AL,EC_CMD_PORT                 ;Read PMU status   6 l* y  w5 [: q7 X) l; H) D6 @
  TEST AL,2                         ;Is Input Buffer Empty?   
/ [# c0 |) m4 L7 E; x  s- ]- s  JNZ pmuWait4IBE                 ;Jmp if no   
2 F$ m8 V' A. I  c  ret" |; k  t" Q7 x: v5 z3 k9 r
" v( O. ]3 E8 E# ?8 ~
pmuWait4OBF:5 ?/ H9 I) `" l: s
  JCXZ $+2
! @* S' v' q6 c) \3 n$ k8 g  JCXZ $+2     
- v! G% g1 r7 T  IN AL,EC_CMD_PORT                 ;Read PMU status   , n/ z* N0 j+ N/ d  H7 D# F$ m) L
  TEST AL,1                         ;Is Output Buffer Full?   
' d/ A6 X6 W" ^  JZ pmuWait4OBF                 ;Jmp if no   
0 O7 i7 c" S0 q5 O; o+ g  ret
. I  [8 z8 D+ _* X, x0 U6 \  
5 |+ T# k" ?% \# {6 }7 dcode ends  : X. ~! u4 r  _1 K( V
end start
% r# K1 K$ v3 ~0 T' H; b- y9 z8 ]$ h3 k
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
( V6 c8 J. K& `1 `
4 a3 N9 h% F7 E! h+ Z[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
1 c3 n* f$ b! V% b6 A& D# A- @; T# C: j" h
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
  z8 t) g1 P; L" [0 A0 a- G同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-5-22 03:45 , Processed in 0.146577 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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