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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
( p; {! w' e( M+ t! i4 |可惜读取不到正确值。一直读的是FEh......
. U. e6 Z5 I0 j8 O$ z( D" Y% x0 @希望各位大神能帮忙看看,指点一二。小弟先谢过了。
# A1 w  \& B+ L
2 G" x/ `8 ~+ ]; k6 s# V9 A+ P代码如下(masm5编译链接通过,DOS下运行):- X) U9 S, h5 [
( l* [% y# g" v4 }
assume cs:code,ds:data. u0 z6 F& D5 j' P1 ~
1 t6 h; l; t: V( Z, D
data segment    P! {& t3 V5 |+ p) b2 F2 ^
        EC_CMD_PORT equ 66h         ;地址端口   ; E% T, p. q% ]7 k( n
        EC_DATA_PORT equ 62h         ;数据端口   
- \: d/ o1 p8 u/ k( E0 o. z2 o8 d        CMD_READ_EC equ 80h         ;读寄存器命令   
: p1 B3 K. o) m- A* i1 A        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   - o! j9 R1 h* W8 y$ C! d/ n
data ends2 F' d* _' W0 G/ i- m
  
( \) x8 }  q* d! |" @( pcode segment 4 b8 B6 k4 A4 X6 z- D8 v
start:   * z% k9 d8 {, b5 R4 W2 _6 O- ]
  mov al,CMD_READ_EC   , l: I) i2 M$ f* U$ s) i- Y* s
  call write_ec_cmd                ;写80h到0x66h端口
. M2 g1 j2 ~& D9 i" f/ D7 s. x  mov ax,POLLING_DATA          
2 e4 ?1 d' e; p/ R  call write_ec_data                ;写ECRAM地址到0x62h端口/ i9 V) P) w  D6 d
  call read_ec_data                ;从0x62h读数据  y, P& o8 I( ?  v$ X  B

8 X) g7 d4 q' H' q9 t0 Q  mov ax,4c00h  . C8 l6 c0 c9 h, f  g
  int 21h+ O- ]4 G( H5 l1 T$ ]; a+ u
" Z1 @5 F3 P1 I5 v2 X8 @3 W
write_ec_cmd:
* C6 `5 ]) @) N( V  mov ah,al. n5 Y  S: P1 V* m$ y3 ?" w/ W% F
  call pmuWait4IBE
8 A. K- O* ]8 R' m  mov al,ah
# R/ ]! {" O7 t; Z4 J  out EC_CMD_PORT,al* ^# K) k) c3 L& K/ k5 i* d8 \
  ret9 H+ y7 z/ @; ]2 w

2 {* m! U5 b  |2 d, dwrite_ec_data:
0 t; g, U2 f8 \, o$ R  F% a6 R  mov ah,al/ n$ O0 ^4 v* x1 [
  call pmuWait4IBE( P& }, k* m! b* r! N6 C2 X
  mov al,ah6 |- G" e/ P  ]
  out EC_DATA_PORT,al
9 @; v2 }0 D1 ^5 E  A/ u  ret
- Y! r; \3 k& q: p" u% w4 i; ^% H4 `; ?
read_ec_data:
6 Z7 ^7 c7 y' T, n  call pmuWait4OBF* D# r' J( U3 c+ Q
  jcxz $+29 M2 ?! F% s2 z, B. u% z
  jcxz $+28 q" r6 |4 S8 b; W! b  i+ K/ k
  in al,EC_DATA_PORT
* e  [2 r8 k2 B1 E  ret) ~/ V$ A# @1 w) T3 y) `
  
! o- f' c. s: m/ O" OpmuWait4IBE:
$ M0 F3 s" l6 d# c+ C( m7 N+ Q% X1 C  JCXZ $+2; t1 I+ l8 y* \" ]# b6 I5 r
  JCXZ $+2   9 q' {! v# X9 W% Z
  IN AL,EC_CMD_PORT                 ;Read PMU status     Y) ~% y1 S, [7 c6 S7 C9 j7 U5 V
  TEST AL,2                         ;Is Input Buffer Empty?   ; R, Q, ~, s+ K5 O8 C
  JNZ pmuWait4IBE                 ;Jmp if no   4 o3 N: c- x% s" F" F8 a/ Z
  ret* b7 Q3 y0 j; ~/ Y! O, u1 N
# W$ M2 G$ _& B4 e
pmuWait4OBF:& r% B7 t0 x; Q$ i/ Q% y* r
  JCXZ $+2
- I& ]+ b. `$ }  }  JCXZ $+2     - W, p  O8 t# [
  IN AL,EC_CMD_PORT                 ;Read PMU status   
% b/ k5 {5 m$ a/ j* r" R. @  TEST AL,1                         ;Is Output Buffer Full?   
: V" z& A1 E3 _  M9 M% M  JZ pmuWait4OBF                 ;Jmp if no   
. o; }! C* @( i  ret! \% Q7 Q: D3 c% w+ X
  
4 c/ }- f+ N+ M# ~code ends  5 w7 O6 j! j& H! o( V% b. Z
end start
0 e% J5 b0 x2 E: ?% z
+ [8 d+ Y; C- {0 B) ~还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
/ J) X+ ]) h* D
. {+ f: u& j& ?$ }9 V[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
6 t) w& x' G2 |: i: p: o% g; b
- `" j4 e0 h- K2 r$ c另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。5 Y4 Y  N  l8 _2 B
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-12-1 00:49 , Processed in 0.082444 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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