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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
4 j6 P# @2 e" c9 B可惜读取不到正确值。一直读的是FEh......
, Z4 Q8 v" c7 S  r2 f/ i9 f* i  V- b希望各位大神能帮忙看看,指点一二。小弟先谢过了。
: W7 a8 O8 ^! h& C% t0 n6 F4 O  ?4 L/ h7 z' ~& m! w! S! R
代码如下(masm5编译链接通过,DOS下运行):
: T* Y6 s  J4 l* X/ q- N, W7 M! n- W  Q# g% q8 r; Y
assume cs:code,ds:data
& ]2 _! n2 R- D& N; X  p, @
  S& g4 S/ O4 o9 i* ~; udata segment  
( K/ y3 Z7 A8 F9 c) M        EC_CMD_PORT equ 66h         ;地址端口   
- @' t, }9 x2 m4 b  X* @$ ]1 D        EC_DATA_PORT equ 62h         ;数据端口   ) z4 ?1 P# ?! Y9 J& S& W5 d
        CMD_READ_EC equ 80h         ;读寄存器命令   
5 I9 a" V) i5 e; t: ]        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
% x+ T7 d$ C' a8 I% R# Rdata ends& @5 i; n4 a8 V& g  i  N
  
( i$ Q" L" e. h: o6 E% ~code segment 0 z$ o/ e7 S8 A  |8 k8 w, l0 b
start:   + G. `6 V& z8 D1 J0 A7 _8 [
  mov al,CMD_READ_EC   
% h, I5 u& a. ^9 D* E+ V+ f/ @  call write_ec_cmd                ;写80h到0x66h端口
& `& W  N; B) R3 O$ `  mov ax,POLLING_DATA          
) M% P  C  K8 c' d2 Z! W  call write_ec_data                ;写ECRAM地址到0x62h端口
: H" e6 J, u$ B. |  C1 Z- l" h  call read_ec_data                ;从0x62h读数据
( j8 p2 y% n& W' l* |' p# Q( A" ]0 V. _7 w# `5 M) |* B" }
  mov ax,4c00h  
8 s* W) u0 Y7 K7 y' {' G" e' Y7 r  int 21h% ]% _3 e9 T. a4 s

! ^+ ~5 b5 D2 ?8 _3 x! z8 S( t6 `write_ec_cmd:: |0 \1 ?- _) u% @4 h$ o
  mov ah,al  _5 x) {' T2 z0 F
  call pmuWait4IBE2 a# x: S. t( d, H+ e. I5 Y
  mov al,ah" l% a1 W7 ~) |2 T) f
  out EC_CMD_PORT,al( g+ K7 o) v8 l) }3 n
  ret* t' t) h' h+ h

$ H2 U+ \- E! j0 Q$ Nwrite_ec_data:: t  {( b4 i; X8 z0 y+ [6 _
  mov ah,al5 E9 N6 k" Z% R, K
  call pmuWait4IBE
) H; @! G! ]9 [5 ~8 y  mov al,ah
+ o0 [9 ~) W1 I0 g5 s, v  out EC_DATA_PORT,al/ ?) L( b4 U$ S2 _% x
  ret$ A  |! e1 v3 Q# B  D

) ]" \4 {- }# Y4 S5 y; u( G. Gread_ec_data:* o8 }+ g  ~6 \
  call pmuWait4OBF
4 A7 y4 S" w% h5 h: m( Q  jcxz $+2
5 r) m' n# M& w& G) F; ]0 @  jcxz $+2
1 _4 V8 W; }4 x4 o2 g" q6 F7 b( ]5 R  in al,EC_DATA_PORT
5 }% e- B* }1 S6 f7 q  ret
: h  y; o. F: E% z- `) |! {  T  $ j9 P8 |' }0 \9 T
pmuWait4IBE:
& m/ A2 Z6 O1 T7 ?0 Q) X: ]6 E  JCXZ $+2
* u3 v% F; [3 n/ U* ~8 Y  JCXZ $+2   
: J( c* R6 D# X9 D( v7 n  IN AL,EC_CMD_PORT                 ;Read PMU status   + h8 |& C2 F/ ~4 U- ~* \# R. {5 U* y6 l
  TEST AL,2                         ;Is Input Buffer Empty?   
# j) u7 ]" T" L$ U" |2 j  JNZ pmuWait4IBE                 ;Jmp if no   1 `, F& I* N+ u" C2 q; `$ g* D4 V, Y. j
  ret
% Y& H0 e0 ~9 u% E) s9 @! m/ R7 w3 w/ P4 p
pmuWait4OBF:
. l, n' g* R6 b  JCXZ $+2
% J: X$ D. W+ H( d6 i  JCXZ $+2     
; l& x5 @+ l+ \% f* r  IN AL,EC_CMD_PORT                 ;Read PMU status   
0 p4 X3 O: H. d5 b( s# E( [  TEST AL,1                         ;Is Output Buffer Full?   
# m4 D( a5 G5 M  JZ pmuWait4OBF                 ;Jmp if no   
2 {+ \% x* ^$ @& W! C7 y  ret3 e2 d3 Y4 L$ t! E/ r
  # S* E. e3 F% D$ C  g3 ?4 {
code ends  - H! q, j# _2 P+ V$ p
end start, [; Q4 k5 m3 K8 G/ q" }' y

7 \& K  I4 ?, B; W* _还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。# Q6 v' o3 ^- N

9 R/ \; e( _0 X[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~0 L& f1 W) I7 p, E$ t

8 P9 G1 e+ t1 Q+ Q7 Y7 @1 T另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
/ z1 {$ U$ ?4 {0 q8 @1 C同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-6-8 08:11 , Processed in 0.809722 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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