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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。$ W3 B6 A7 ^" U  t& I2 J- F
可惜读取不到正确值。一直读的是FEh......1 ], O0 b& f% ]# C1 N
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
( R* m( Z8 r2 s7 x& ~4 i* _) v3 x" y0 j7 M) M" |, M
代码如下(masm5编译链接通过,DOS下运行):3 D7 |# }$ W" N) }8 ?( h

- c* y3 j4 o: T7 R/ W3 O6 @2 eassume cs:code,ds:data, B* i( A9 A- s* o- J1 N8 u+ c

6 S6 l8 g) ~4 ^$ K/ |2 z% mdata segment  
# ?% Y& O4 w9 Q: n+ y        EC_CMD_PORT equ 66h         ;地址端口   ' z* L* h% a. w+ N9 s; m/ b/ F
        EC_DATA_PORT equ 62h         ;数据端口   
, U+ ?# _8 n0 p- c4 `$ ^        CMD_READ_EC equ 80h         ;读寄存器命令   ) z- I( e8 e# e" P
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
6 [6 O! [  H! M) d: {data ends  \& {3 W/ r$ r. L) t. k% q( b
  
1 J% ]' m: g4 I4 ]code segment
5 H( o) g7 W) ?0 cstart:   - l4 @1 \9 h' s
  mov al,CMD_READ_EC   
0 G( }5 t: T! q0 E5 ^5 {# {9 N  call write_ec_cmd                ;写80h到0x66h端口
( V, |: @* A/ c- ]: S7 s: ~8 {# _; ~  mov ax,POLLING_DATA           : T5 Z+ I) r- \5 ~7 F- T' W' }- ^
  call write_ec_data                ;写ECRAM地址到0x62h端口' w/ V* ~- r4 W  b; P, E
  call read_ec_data                ;从0x62h读数据
7 x3 M2 `, O# Q- Z5 R  V0 d$ c! k/ t1 U) G" C
  mov ax,4c00h  8 a# W- w: T; w. r; f# J( w1 a1 d
  int 21h3 q$ |- ?0 _9 P5 k2 ^
- \' t* ~& k) N- q9 n* \4 R
write_ec_cmd:
' A. b! P; S, G. H  M  mov ah,al
- V: F: H8 W- h! |! ?, z# H  call pmuWait4IBE
+ J, e' s$ g& m, Q3 y: E3 s/ i  mov al,ah4 Z7 H7 G" l1 M9 {
  out EC_CMD_PORT,al- Y4 s, D8 r* v; P! v) v$ h
  ret
7 i: U9 G# q) F3 O1 x' E; B2 {# p: v
6 B+ n9 a. o, v2 Kwrite_ec_data:  K, J0 M" f/ |9 n% O7 ]
  mov ah,al
5 e  S' H$ Q( R9 n5 @6 J4 f  call pmuWait4IBE& M/ w5 O/ E- p, H5 h) C8 d' a1 z
  mov al,ah! O" }4 u" ^$ c% }% W
  out EC_DATA_PORT,al
2 B/ ?; W7 g0 ?9 O  K# ^! \  ret
. c4 f1 b; J& X. Z# @
5 }; s' e, x; V5 w" f  rread_ec_data:
5 M% k) j+ V& @0 ~  call pmuWait4OBF! F% }* Y; B  i$ k& s$ L! u
  jcxz $+20 c% O4 R2 G" O
  jcxz $+2+ I/ n/ n3 N7 _+ s
  in al,EC_DATA_PORT
; S& J4 Z& z' T. G# N8 Q  ret
& e, q! t4 M+ G5 }  : C5 z8 Z' U% ?: e% f
pmuWait4IBE:
( G: ^' w5 I& L  JCXZ $+22 R7 i5 c! `. F$ X
  JCXZ $+2   
  s3 {% Z/ E1 }  S/ K2 l6 c9 X/ H  IN AL,EC_CMD_PORT                 ;Read PMU status   
- H; U" c$ K$ v) p; T  g  TEST AL,2                         ;Is Input Buffer Empty?   
. `, B5 b& ]$ H; L  JNZ pmuWait4IBE                 ;Jmp if no   ' ~' C+ d$ K* U/ o3 G
  ret9 c8 o4 u( F! n- `/ }- A) m

/ a3 n- u7 ^9 T' lpmuWait4OBF:
1 q& r+ k" M$ K' t3 t* M  JCXZ $+2
, i: ~& w; M2 M; d) O  JCXZ $+2     $ W3 a/ m- I# h* }0 X$ f
  IN AL,EC_CMD_PORT                 ;Read PMU status   $ \7 A. u  b) b1 ?
  TEST AL,1                         ;Is Output Buffer Full?   
7 j, ]3 ~6 e) V( o, H) ^4 N  JZ pmuWait4OBF                 ;Jmp if no   
3 U* _- t; |- N" i. o# T8 ]# _) P. K  ret
: A" J' E; e) G- U' M0 O  
* l" U+ Y+ |" P# Vcode ends  
% [& @) D8 X, ~$ q9 m# ?0 hend start
$ [. Y, H9 P& O) o( M
: ?1 ~! ]$ ^0 {, c还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。9 B* ~. x/ N. r# g$ z3 h* H

- ?3 H1 ?9 \# o, F[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~) T4 W" ?  R3 j% H3 }+ o+ I
  ]0 g, I: ^4 p$ |/ l
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
4 \( i) t  n6 T. \" Q# Y/ `同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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, 2024-5-20 00:54 , Processed in 0.028444 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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