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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。; O& H. `+ N8 K3 o& {3 w% T
可惜读取不到正确值。一直读的是FEh......6 m( J9 K6 L7 r
希望各位大神能帮忙看看,指点一二。小弟先谢过了。" {/ z0 {* Q6 ]. \

8 v% l* V+ ?4 D3 F5 ?* s+ Q代码如下(masm5编译链接通过,DOS下运行):: R) H) N! N$ R4 v' i4 a
+ N! k, H: z4 Y
assume cs:code,ds:data( c2 F0 Q* g4 o8 g

% ~4 W' R9 C, D1 sdata segment  
/ `! o# _9 w0 B2 E- @0 M        EC_CMD_PORT equ 66h         ;地址端口   1 P, R2 u! ]0 O. p8 P2 C. O5 H
        EC_DATA_PORT equ 62h         ;数据端口   
( t" t  L# n2 U# ~8 P6 {        CMD_READ_EC equ 80h         ;读寄存器命令   
. N- y- u# ?4 o" Z1 a        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
8 N+ ], h# j; _: X7 j1 \data ends
, ]$ B% O: f% d, A; O( v  2 X' c. N2 R+ D0 T1 Q! C$ d+ Y& M
code segment % p" k8 p1 r) L
start:   * {( ^' o3 @; N9 `( ?: U2 B
  mov al,CMD_READ_EC   
- b# T' e$ }+ P1 u5 j  call write_ec_cmd                ;写80h到0x66h端口6 y  r1 _% h( i6 x+ l
  mov ax,POLLING_DATA           ) u- a! V  t) g" u9 b  m3 B
  call write_ec_data                ;写ECRAM地址到0x62h端口
# Z3 m+ C7 q  L0 k' `! d' ~  call read_ec_data                ;从0x62h读数据: ]* J7 e/ A8 p6 I; f+ Q# x/ h
; ]$ v$ M: }! T  R
  mov ax,4c00h  
( P( K) O# u0 K6 I  P  int 21h
3 v0 D" L0 m! P3 I
% ?4 g1 c; a0 x1 Cwrite_ec_cmd:
) Q9 S/ m% ^9 c  mov ah,al  Z% X  X8 H+ N4 t- F. [
  call pmuWait4IBE
) W, S: O$ j& J8 C; s' l& W  mov al,ah4 t2 s5 Y$ \. [: `( n( E; U
  out EC_CMD_PORT,al
7 m2 |: c5 H% }8 l; |4 d  ret
% q( d# i7 ?; X3 H( [  o
. f! r9 Z  b3 r9 U3 Vwrite_ec_data:
" d) N# k5 D+ a# l9 B+ |  mov ah,al9 \8 l, g& L) Z" q. C
  call pmuWait4IBE: s, s" C- X% h( q: K1 b1 X
  mov al,ah
& i+ H* b" N0 v  out EC_DATA_PORT,al
( L; r* I5 c/ }9 a8 }" l  ret
& A4 \$ O; w" Y3 M
0 G: |: ?6 K# Z1 dread_ec_data:5 ?3 R+ j+ r+ }! Q& g
  call pmuWait4OBF
- g5 `  t' j$ ?+ Y! L+ X2 ?' R  jcxz $+2
: a/ c* u3 O! ~$ J, b  jcxz $+2
1 l1 o1 v% h' m9 _0 c: v  in al,EC_DATA_PORT
6 E  l; x' u7 e. s. Q+ F9 V  ret
! L' B- x3 \3 |  \; Y' `  3 `! ]8 K* J. H# ]
pmuWait4IBE:0 J! S( O; b; l% U0 Z* \( ]
  JCXZ $+2: J) n( ^: t5 L* `+ s* G
  JCXZ $+2   2 J: f4 i1 n& [8 ^- M+ o3 S5 z
  IN AL,EC_CMD_PORT                 ;Read PMU status   % Q" e7 u: M( q
  TEST AL,2                         ;Is Input Buffer Empty?   
+ f; Y% c  m7 H& t+ S; R; O  JNZ pmuWait4IBE                 ;Jmp if no   
- i2 Z5 {' t& u  ret
$ B  x! O0 V' p- q5 L% O' q' V! e' a! v& _7 |+ ]2 D
pmuWait4OBF:1 L6 W2 a! [- ^4 }$ K* s* v# ^/ P
  JCXZ $+2% N! z5 P* N9 z" t. A0 \7 p& _
  JCXZ $+2     7 K1 S+ f2 M& t+ l8 q) H& E: |0 I
  IN AL,EC_CMD_PORT                 ;Read PMU status   
+ U& h) v, K( a3 N* B: ]  TEST AL,1                         ;Is Output Buffer Full?   
1 ], A& G* P- h% H* H  JZ pmuWait4OBF                 ;Jmp if no   7 U8 @! Q* W, Q" K7 E/ m& Z6 d' p
  ret
% T; b- b- O7 X7 L  
! e, G( y+ m' x0 vcode ends  
2 H4 L% _& d' b1 r- @! [end start( |$ o: x/ P4 ?

8 [: n# U' Q  o# |7 i还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。+ N8 C3 Y2 G' u! J

4 D1 n( l/ t2 X% v$ ]* E& h[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
+ |4 B& h' r0 K3 p. [3 ?8 U# G- u# U5 [/ ?* o' X- U; m
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
- J" M3 V" J; A8 A同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-13 14:27 , Processed in 0.038403 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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