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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
2 a' n4 o' p2 f- s可惜读取不到正确值。一直读的是FEh......
, K5 ^# w5 a. h; A' x. F8 L, Z: f希望各位大神能帮忙看看,指点一二。小弟先谢过了。* V" A+ L# Z) v7 X) G7 p# T6 M
# k( z4 ^$ s  T6 S0 X
代码如下(masm5编译链接通过,DOS下运行):6 h% f% B) M8 P% T2 F. R
6 O& {' W9 T3 h8 Q/ \; @
assume cs:code,ds:data, I0 X2 T0 m2 ~" d. E

, |9 {  c. u" t# i" r+ c/ cdata segment  8 F5 U' B$ y% t
        EC_CMD_PORT equ 66h         ;地址端口   1 u5 N$ U. r& G  b
        EC_DATA_PORT equ 62h         ;数据端口   9 P! A' n$ w8 G+ ~& n( Q- T* P. j
        CMD_READ_EC equ 80h         ;读寄存器命令   
0 N! |0 M4 D& h3 |) S) V8 w/ }        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   0 L4 {( e) B" r/ I( Q' D) e
data ends: ?, D! h7 q6 |" Y: D# Z8 c4 t
  
8 b, n/ q! O# D$ t  Y+ Lcode segment 4 }- ]8 y* N2 W$ D
start:   
. s- B. ]) W: X3 c' j! f  mov al,CMD_READ_EC   
, H" O" ^% `# p) s. ]2 I  call write_ec_cmd                ;写80h到0x66h端口2 L) H  t. N+ t3 l1 g+ I3 D# m
  mov ax,POLLING_DATA          
* B* O! `9 f/ w, p, q' ~/ ]  call write_ec_data                ;写ECRAM地址到0x62h端口
* `7 u" }2 J% v/ z  call read_ec_data                ;从0x62h读数据' N7 G1 T( z2 [/ m

- _& U. y, w; D  mov ax,4c00h  , Y, M! h- p2 A  b3 H
  int 21h# T0 G. I2 K5 z; y+ L- f, P

4 ^. s! Q2 U, g( w& l% z5 l* e% a3 swrite_ec_cmd:7 ^( h) s4 [4 m5 i
  mov ah,al  b3 O  D  [3 C( W5 z3 W! C1 c) ^4 N
  call pmuWait4IBE
: N% Q+ u! F) t& Q. u8 r, m) D, U  mov al,ah
9 G) s. a5 ~# w) R- V* t  out EC_CMD_PORT,al$ g$ }+ ~: Q' z
  ret
! V  g2 f$ M" N; e: W6 R2 a( ]8 ~
/ n$ }0 p, c9 P5 C* swrite_ec_data:1 H9 r2 k8 e) T5 X
  mov ah,al
7 e/ g- {7 |5 T1 w& s$ W6 u! @; e$ I0 E  call pmuWait4IBE
- _* `( h! {- Z2 g  X$ K( k+ e  mov al,ah' K1 z# ]8 t, z" H% m$ A
  out EC_DATA_PORT,al; }5 `& T, f3 `' t- U& f" X3 q
  ret
7 h5 j. g0 ~& z* S! A+ Q2 M
. E3 n$ r0 c0 j7 e# x* jread_ec_data:
+ _% T5 u7 z4 o! x4 l. \  call pmuWait4OBF# ~8 L& s/ e4 c8 w  n- f9 q" V
  jcxz $+2
) p( ~: Y" P1 O1 V  jcxz $+2
# q8 f9 U7 T$ |2 `* Z7 {  in al,EC_DATA_PORT3 _+ D7 @  `% r
  ret
+ M& W  }6 O, e/ a  6 h- s1 }$ H6 G& O. `7 l. j
pmuWait4IBE:3 `. A7 r- D1 ~/ `2 s* V
  JCXZ $+2, F6 X% {! s: R: }# }& \
  JCXZ $+2   + d; E# K$ \8 `: ^) d/ L" v6 p8 k% V
  IN AL,EC_CMD_PORT                 ;Read PMU status   
6 j' k/ t5 C7 O( n& Y  TEST AL,2                         ;Is Input Buffer Empty?   
0 s" ^1 f* H+ p: g/ K  JNZ pmuWait4IBE                 ;Jmp if no   # a/ ], D- h1 E9 M. m8 |- n/ ^
  ret
# T6 N4 `8 {# n, X4 A1 O7 }1 G$ k8 [2 F$ S+ }
pmuWait4OBF:
6 L& I3 V' n, t( {  JCXZ $+2
) M9 e  R4 G9 p. k2 @* E8 G& n: a  JCXZ $+2     / e; b3 V: I8 \% x, k$ P- Y8 @
  IN AL,EC_CMD_PORT                 ;Read PMU status   
( b  i, U; \, I2 D& H0 q1 u# [  TEST AL,1                         ;Is Output Buffer Full?   6 ?% J% d6 D6 z" e* x$ X: n
  JZ pmuWait4OBF                 ;Jmp if no   7 m! B% ]0 f9 x- }
  ret
- Y% k. ^) k& k  
9 z+ Z5 g7 [, |, W$ d" M: Ycode ends  
) A, E0 |2 l+ [" @end start
( e" o* U' y0 i" R* ]  t1 v. t) V8 }) t/ o* k
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
5 q6 ]6 u2 M" x
! J9 X, Z- P  s+ V  [[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
& m  ?0 t0 V2 z9 {0 K( C. |% [8 U
5 J6 T$ z! a. ]' R另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
) {3 ^* P% G, R3 Y5 _5 p6 d  r同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-4-28 20:29 , Processed in 0.059060 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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