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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。& u& S+ b8 Z" M* Z
可惜读取不到正确值。一直读的是FEh......
5 S4 o# [; }3 k# w7 C希望各位大神能帮忙看看,指点一二。小弟先谢过了。
7 M8 x' o3 x- ]. t2 d' i/ |) ]3 |) H; v) C: f  Z
代码如下(masm5编译链接通过,DOS下运行):
: J4 [( S; ?/ J$ I+ z; L( R2 u
4 S3 P; a: h; Cassume cs:code,ds:data
4 `" M+ T" B4 C6 ^4 M  V! M( v" g- W( S: d- Q* Y( t/ U
data segment  ! H& h1 v, q& K' `0 b6 B. l& P+ ^
        EC_CMD_PORT equ 66h         ;地址端口   3 B0 M1 ^; Q6 k5 ~/ R$ i% {
        EC_DATA_PORT equ 62h         ;数据端口   
6 m# Y% R+ W  m7 N: n8 i        CMD_READ_EC equ 80h         ;读寄存器命令   
% n/ r( ?' Q2 ~; |( t' b9 @        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   - B7 I$ Z6 ]: s9 J3 ?2 S
data ends
! n8 ]  F7 b  _  
% \! O( ?- Y6 u6 ycode segment
* u; c6 u* c; V& H, r; R) W3 Estart:   ; y' V" I. ~" F! ?
  mov al,CMD_READ_EC   
# C! @$ O: V, N* Y  call write_ec_cmd                ;写80h到0x66h端口
# [9 h+ c) A! M1 P" o  mov ax,POLLING_DATA          
4 h; M" R4 N: }( |  call write_ec_data                ;写ECRAM地址到0x62h端口; v, G+ z% s9 \6 }$ f2 C' U) ~
  call read_ec_data                ;从0x62h读数据
( O2 N* G' ?8 m- [9 b  O. a, B1 G* i4 j, }7 W; ~
  mov ax,4c00h  
# k3 y" v% `* E5 J! S  int 21h' L" z5 f; z: e& s

' b) K' M8 P% Uwrite_ec_cmd:1 j3 c- Y4 [2 u8 U4 _! q# I
  mov ah,al
+ M* ~: H( C$ R+ O) a  call pmuWait4IBE9 m. C1 O( }1 F1 f" \: f& c+ a
  mov al,ah
/ E. n* K: I* ?5 x  out EC_CMD_PORT,al
* Z6 k; S: P# I* w  ret, G0 Z( z8 U$ m4 g% D& V
0 \3 o5 @1 T( {
write_ec_data:, T  \; D3 \. }9 T8 n
  mov ah,al
5 a" e8 ?5 d7 @) \/ n& x: o. o! W& @  call pmuWait4IBE7 ^8 ^6 ]; `* W; f' A
  mov al,ah
, `  R$ y5 D8 g* Z8 ^! v0 p  out EC_DATA_PORT,al
2 @8 q5 p2 y. t+ U  ret
) z$ x, W5 `$ \; t% W$ O. ^
# T0 k1 E+ e8 t& _read_ec_data:' y: \. x7 P4 I4 [8 p
  call pmuWait4OBF
/ w4 n- M% N8 B  jcxz $+2
- \8 W! J2 f$ I/ B" t. t( u. K  jcxz $+2
' [5 }6 I0 {+ ~6 h8 G  in al,EC_DATA_PORT) b# _9 y  ~, y. E3 L) S
  ret
6 n. |8 o! i" w# T3 ^: X3 Z& W  6 T, I9 _7 ]5 _0 `6 e
pmuWait4IBE:! W3 x! Q0 \+ x* y# e
  JCXZ $+2
4 r( x& G/ t& `! f# b  JCXZ $+2   2 z6 h9 P7 h/ h7 c, S; \6 j
  IN AL,EC_CMD_PORT                 ;Read PMU status   5 A' c+ \) U1 ~- a
  TEST AL,2                         ;Is Input Buffer Empty?   
) X+ `& _, w7 |( d8 g+ ~  JNZ pmuWait4IBE                 ;Jmp if no   & g$ u$ ?- q2 z5 A2 _# m2 U
  ret
7 J3 z5 p5 v4 @8 Q$ O; x8 b5 d0 B# \% y7 v
pmuWait4OBF:$ A$ u; f. `( N4 Q9 t$ E5 D
  JCXZ $+23 p( M4 {$ e4 ]
  JCXZ $+2     
  S" _! I! U  `6 \$ p8 |  IN AL,EC_CMD_PORT                 ;Read PMU status   : Z/ h% H2 o* r3 x+ j+ e
  TEST AL,1                         ;Is Output Buffer Full?   6 ^) b1 |7 V- m# O4 h, G9 X
  JZ pmuWait4OBF                 ;Jmp if no   
/ L3 c! u2 G5 V; M) Y5 f. X  ret6 s% N9 M( \8 e  k
  
; f& L% C% f1 J- v3 Gcode ends  : r, e, F1 x' C4 r, h) f& O
end start0 P  B: Z: f0 s0 W5 Q
, t( h) K% C+ d9 y/ |' E* v3 ^: v
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
) b! d0 `) r( K' Z+ r1 L# x* e; G1 h) q: {/ v1 [
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
, ?& ^8 R4 p3 ]0 H$ _5 l
& z* ?8 P  G0 s, l, e! s; o$ P另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
& o6 b6 l* K* B: @1 ~同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-11-22 01:58 , Processed in 0.114842 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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