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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
4 i) X2 M/ S( J/ H可惜读取不到正确值。一直读的是FEh......
" o: E7 R+ U( m9 B希望各位大神能帮忙看看,指点一二。小弟先谢过了。- B( B+ D) L" ?
2 c* U) f. }" e' {
代码如下(masm5编译链接通过,DOS下运行):
; L/ K" S5 j* H; [
6 n/ W/ {3 |; T+ Z7 n+ p  Kassume cs:code,ds:data5 Q9 Z! h( ~  ~7 l2 J, J0 D" h4 Q

7 r6 V. w0 e  h/ ]' `1 R) Ydata segment  
: y. X7 t* c9 N' C) ?- g        EC_CMD_PORT equ 66h         ;地址端口   " \$ [: V: V3 D
        EC_DATA_PORT equ 62h         ;数据端口   0 p" q* S2 ]& d9 z
        CMD_READ_EC equ 80h         ;读寄存器命令   
  I  t7 K' ?& E- n        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
; e- F+ b8 h5 m4 e; Edata ends" P- o' F& S8 i/ T
  , `; ^0 k; q; q/ H+ X! `  ^
code segment 6 E9 K6 ^( P( y9 s7 y
start:   , @7 H( f- t: G$ q# i
  mov al,CMD_READ_EC   
7 v2 j# e0 y. c' D3 k  call write_ec_cmd                ;写80h到0x66h端口
: H2 M7 Q' ~$ }9 E8 q+ H* @  mov ax,POLLING_DATA           / Q0 a5 E; [, C7 D; ?5 R" v9 j" H) v
  call write_ec_data                ;写ECRAM地址到0x62h端口/ _! D5 ^+ \/ B* w  E& k1 o1 q
  call read_ec_data                ;从0x62h读数据/ x) K- y8 r+ `0 z1 h5 F
. C8 z- e, Q- y1 j- ^
  mov ax,4c00h  4 a- G# z3 W( k3 p1 j/ U
  int 21h
4 f. G. Y, V. T9 q
1 z6 ?# R/ @  x7 H7 hwrite_ec_cmd:: e6 @- T& d. g# j) A3 K3 _
  mov ah,al8 f, C: h4 K7 p
  call pmuWait4IBE
7 A% e% n4 {% ^6 A6 T. y( b  mov al,ah
+ {0 e; N6 \7 q# E6 v( Y8 B  out EC_CMD_PORT,al
7 c% W% V2 g: S- E  ret5 h+ _9 [3 ~. M/ m3 r. W3 }9 K7 q5 ~

* {, W2 c6 z# R4 ~" L* e: }& f/ t8 Cwrite_ec_data:
1 T& d) Z# z  T  mov ah,al% P0 o! W- c! i: C/ j/ G* t
  call pmuWait4IBE
$ y0 ], d9 Z* Y; O! B3 k$ W7 Q2 A  mov al,ah2 G: ?0 g6 j0 k- m( o
  out EC_DATA_PORT,al+ ]9 A9 D8 F4 v7 x. m2 A
  ret
( p! Z: a9 F) a# g* k0 t2 Z- d0 m: Y- k0 ?; Z, a8 J8 n* l
read_ec_data:
0 ^$ v0 J) ]3 u/ t. O+ ]  call pmuWait4OBF; K+ l0 E( l1 C8 W2 U: z
  jcxz $+2
  |/ F' v% h0 U7 g  jcxz $+2) j# F; i/ S- d; A7 E/ `
  in al,EC_DATA_PORT8 r$ B8 y& d4 z
  ret
1 n2 L; ^, l5 M. E; p8 f  6 d( X; U* d3 @- G7 |
pmuWait4IBE:
: j2 y2 D) g6 [1 R9 v6 I& P  JCXZ $+2
% k5 `. Q5 G7 ~, _& ~9 h, F* O! e5 i  JCXZ $+2   
8 Y; Q# d% C4 n  IN AL,EC_CMD_PORT                 ;Read PMU status   
2 b! O/ X5 W' R* E* Z3 v  TEST AL,2                         ;Is Input Buffer Empty?   3 c8 `: V& H; g1 H
  JNZ pmuWait4IBE                 ;Jmp if no   
9 T" R9 F" V: G: S* t  ret
2 Q! v8 C$ E8 z  a% z& C$ q1 w4 S; |0 n  P8 x
pmuWait4OBF:, m8 }( h! F4 ?9 g) b3 t
  JCXZ $+2
. a: F$ o" K6 g3 C  I1 }, m7 ~# `  JCXZ $+2     ( a' R$ C$ B- R: [/ J" J8 z$ c
  IN AL,EC_CMD_PORT                 ;Read PMU status   , L1 a7 n  D, l4 F
  TEST AL,1                         ;Is Output Buffer Full?   9 j% v9 j; c/ x; w; O
  JZ pmuWait4OBF                 ;Jmp if no   0 c. I  u1 l. S( b
  ret8 x8 l; n+ G$ v2 Y  v- J3 ~7 G  [' s" Y: g
  3 J5 B% K5 X$ L& E8 R& p3 `0 a
code ends  $ [& s3 Z: c% Z" }* M( n
end start
) c+ P% Y9 P7 D7 t% G
% ^& B( {+ R! ~: G还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
- F% I# A4 S& d4 |+ b! D2 y
6 H, ?2 c' @% c- O. D[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
6 A4 S5 [) D* C% g! }6 s9 x- F  t$ u7 r
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。  a" n& ]) S  e5 O8 I
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-10-20 07:39 , Processed in 2.267577 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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