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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。" ^6 g  Y% y$ k0 ?9 ~
可惜读取不到正确值。一直读的是FEh....../ |$ Y- K6 S3 j1 ?
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
" B4 M# |- [7 o+ d1 l% l7 y* c+ K- W5 |
代码如下(masm5编译链接通过,DOS下运行):) Z: b3 z& w1 T( V* L$ A
( M! Z' `$ Q. ?' _# k" X/ c
assume cs:code,ds:data
$ `3 L8 s5 B! w9 a
) m; G0 J8 A/ o: L: D; rdata segment  
2 \5 y6 x; u* w        EC_CMD_PORT equ 66h         ;地址端口   
7 G0 I, X. ?# }        EC_DATA_PORT equ 62h         ;数据端口   
$ x- e% a& z2 ]1 k% s        CMD_READ_EC equ 80h         ;读寄存器命令   7 O6 i9 Z$ S# u" ^' R3 c
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   & D. b& U- Y0 c4 v7 W
data ends
7 ^1 ^& v8 Y9 p  
' K# x7 s" F( T5 ^9 u, pcode segment " q( B5 t3 Z# E( o/ Z+ D$ p
start:   
+ }# v$ o% W. k& F  mov al,CMD_READ_EC   
4 b3 N4 i$ i" G1 {/ Y; H3 q9 D  call write_ec_cmd                ;写80h到0x66h端口% o/ z, ~4 u  ?9 v& Q4 l
  mov ax,POLLING_DATA          
: s( G% S# P$ q- b' ]% W$ L  call write_ec_data                ;写ECRAM地址到0x62h端口4 X6 ~1 H0 B4 P( w
  call read_ec_data                ;从0x62h读数据
5 ~: `3 G4 v2 n% Q& K4 y8 |: h" r2 K  M
  mov ax,4c00h  9 u% u8 o& \' o+ p! V3 I$ Q
  int 21h
# P, p, e! X, B4 u' q- |
- ^! R) p$ i8 j( r: t9 owrite_ec_cmd:
& b! ]' N5 O4 b. J& z4 X  mov ah,al, t, e! \5 D$ s, I6 N  P
  call pmuWait4IBE* z' v! E1 C7 p3 Z9 \
  mov al,ah
% k  U+ w9 W2 d) z0 K& O/ V  out EC_CMD_PORT,al
4 F6 v( V0 b7 l3 K8 W6 q5 \- \  ret
: y3 E; I- ~: X' M( H1 N* Y& \' X9 l+ B4 i
write_ec_data:
- B% |# a0 z( L  ?& ]+ K  mov ah,al% D0 B& o& `1 |' ~; r
  call pmuWait4IBE
8 ?  j3 P$ L1 ]. V, I( j  mov al,ah3 _# \- [+ U5 b3 z8 Q
  out EC_DATA_PORT,al
1 p- w0 F; q* r2 v  ret
* V& q& o  W3 |0 T1 P+ R6 y+ `& v4 w* G
read_ec_data:) f0 T( x( f( D6 e" s2 @
  call pmuWait4OBF% Z0 m# c3 i* g+ z- E4 u7 r  d+ [
  jcxz $+2
" c: S3 s' D; P( M) }, d+ ^  jcxz $+2
" z5 ]) {" L+ e# }- R/ t7 ]6 J  in al,EC_DATA_PORT
" K, T2 S6 p% ^% {  ret/ L& N1 m9 R' M7 j' M6 V: a& ^
  
' ^7 Y" V, p7 X  K1 v2 h7 `) E: BpmuWait4IBE:8 w! g. D6 h. _9 P2 N' V5 P+ a
  JCXZ $+2
5 C- V: l1 I+ d3 Z  JCXZ $+2   
, t7 K3 Z5 r$ I8 Z( J* j' L$ d  IN AL,EC_CMD_PORT                 ;Read PMU status   ) P; T; O7 Y5 w: `
  TEST AL,2                         ;Is Input Buffer Empty?   
7 O* ?7 a& V7 ]$ u" `/ F* H7 S  JNZ pmuWait4IBE                 ;Jmp if no   + d: y: A- A0 g: h( J2 @; h' E
  ret
" _* R7 z. r6 O$ @& U2 E# S: z; m8 A, m
pmuWait4OBF:
( A; y& |. v. p4 S! Z  JCXZ $+2& {" O) L; ~' V: D8 w3 V- A" z
  JCXZ $+2     
# C/ I( x& A" L' |+ x6 \  IN AL,EC_CMD_PORT                 ;Read PMU status   ! l5 r0 e0 N- p) r* h6 I, b9 P
  TEST AL,1                         ;Is Output Buffer Full?   
- F" e% q( G1 U. m  Q& i  JZ pmuWait4OBF                 ;Jmp if no   * v9 j' o: e3 n, J9 k; L: U6 E
  ret1 w9 N( z2 j5 f" F
  
0 d% U& q8 p1 q# `( ~code ends  
/ H( e2 @2 T7 \8 Pend start  W" ?; c/ a9 S

% q9 h/ F$ Z. y* ]1 |还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
, p3 {( W+ e3 [) d4 k3 n' t; h% B, w6 [/ U/ [0 }4 k& J) Z
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
5 L& h( ]; q2 ^) f7 [+ r; X) ]! S' t" U1 c& a
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。1 x# ?; S! I. 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, 2026-9-21 21:27 , Processed in 0.093906 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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