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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。7 \1 A8 j' ~! D! K& n
可惜读取不到正确值。一直读的是FEh......
4 T+ Z( x4 h) }2 Q希望各位大神能帮忙看看,指点一二。小弟先谢过了。7 |" a' f1 C( [5 z) I  I( P( P* L" P
. Z* O% y- o/ m& B8 B$ z) [
代码如下(masm5编译链接通过,DOS下运行):7 t, J; P( i+ c. S8 u: w# ]7 p

; S! Z$ l. n0 D8 M0 R+ b# m  sassume cs:code,ds:data
$ d. i: _' B) U3 d& ?+ _
/ L% p% `  J- G# f3 H$ y+ Edata segment  / g" i8 c/ D# v, E. R/ N* w
        EC_CMD_PORT equ 66h         ;地址端口   9 ^* i% j% a: X) q4 I1 t
        EC_DATA_PORT equ 62h         ;数据端口   
% q/ I4 s/ q% d5 p        CMD_READ_EC equ 80h         ;读寄存器命令   
  L, P4 u2 p# }7 S& o* j( V        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
! `& l3 l) J3 U# n" b/ i/ ldata ends; L8 z) {  M" J2 f; X: }
  1 u; p! t9 K3 _- T" V' F
code segment   u8 t( c6 I5 d3 h8 t0 w
start:   
% |* c& S2 h& c1 @4 t  mov al,CMD_READ_EC   ) t. G! a* g' v& ~
  call write_ec_cmd                ;写80h到0x66h端口+ Z! X! c$ a3 U+ [1 m* k; ^3 Q
  mov ax,POLLING_DATA          
7 i; H' \3 s% r( p) j% \  call write_ec_data                ;写ECRAM地址到0x62h端口( ?1 `: T& a$ v2 S, G# @
  call read_ec_data                ;从0x62h读数据1 h0 \4 G1 f5 m: _1 g- ^
& {. s4 W6 T9 L0 d3 b
  mov ax,4c00h  
, Y1 V( ~# Q7 z4 |( `  int 21h( b7 y; q" W6 J6 d

" ~; ]! r" j! D2 J+ t% @% Zwrite_ec_cmd:
. {4 x8 ~6 L% t: s1 [  mov ah,al* o" K: I4 g5 F9 D1 l7 g) z/ M
  call pmuWait4IBE
& {% n6 ~* B8 q8 \( ~# l  mov al,ah
# ^$ J4 n3 \4 p& G6 o  b, F) ?  out EC_CMD_PORT,al
  p5 @: h& x. K, g  ret
- h# p# r6 Q3 `. b6 O  @- F- F& C# w+ W* F" `1 l' I, s1 i2 B
write_ec_data:
) c. @# b6 ~& k  mov ah,al
# q- a0 h' s, s0 @) @/ P  call pmuWait4IBE
. q# U& H9 x  O  mov al,ah
% X6 V9 k+ N6 ]. v$ i- q1 v  out EC_DATA_PORT,al
& z6 Y$ P4 u0 \& Q. l" T$ ^; n! i; ?  ret
7 R( s* u% r% l2 c0 @3 b
% m: U1 s$ I1 v8 Vread_ec_data:
  [+ Z+ M, u+ v9 p. j% U9 J5 K: h  call pmuWait4OBF
/ ]& y5 y0 n+ @5 D% p7 [: o. i5 a2 j  jcxz $+2
( }4 E9 L% T1 b3 K% M0 x3 N5 a  jcxz $+2  R8 ~4 r3 X- @2 B6 N% D3 L: E  N$ T5 b
  in al,EC_DATA_PORT
* |+ M2 F" Y! U& n, t6 m" i1 _  ret- E( n# k* Q7 N7 M3 B5 h' t, ]! v0 r
  7 e3 Z/ m. p) i& J9 p0 l! s. x* F
pmuWait4IBE:- ^! N3 ?; m# O6 c, Q: F. k# _
  JCXZ $+2
$ X8 e9 I7 z) f, \4 u' F" [% ~1 g  JCXZ $+2   4 M: C1 `' Q- P: N0 s
  IN AL,EC_CMD_PORT                 ;Read PMU status   
% l" ?9 l# c& L$ G  TEST AL,2                         ;Is Input Buffer Empty?   - D' U; D% @8 ^6 S5 G+ F6 p
  JNZ pmuWait4IBE                 ;Jmp if no   
- p) U5 F6 {" R- b: y& V( P: a  ret
) D+ ?$ d* A# v  z# Y- E' ^2 Q2 K
& F# G7 P5 E$ c4 l: wpmuWait4OBF:( X% H0 s" }7 j4 b+ L1 R
  JCXZ $+2
6 c+ o0 G* x2 O( D0 _/ c  JCXZ $+2     
' Y+ j) q0 e$ S; ]1 y' H; c% H  IN AL,EC_CMD_PORT                 ;Read PMU status   5 }" n  o8 U- W$ |' J
  TEST AL,1                         ;Is Output Buffer Full?   5 K3 t  m5 j& Q% z$ L
  JZ pmuWait4OBF                 ;Jmp if no   " L2 r2 d! k" J+ h# |: ^( q+ J
  ret
) o. [0 N1 Z) E2 y6 J# P  " M1 F2 U8 B: N) s
code ends  
0 o2 ?$ J/ c6 s& fend start0 w* k7 Y& s% w, X( G

- z7 h. x/ J% A" K) P7 T% s  U还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。1 y8 E5 X. L" j& _
/ {  d1 \7 C; [8 O& U
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~* \& e7 _0 L3 L3 t' o# f1 W+ H" j
9 \5 r. g) d  t$ K* Q2 l) P
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。3 l6 s3 p0 o7 ]' 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, 2024-5-18 15:06 , Processed in 0.029139 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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