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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。6 N" w- O5 y1 e
可惜读取不到正确值。一直读的是FEh......
( L' O+ J7 C5 P希望各位大神能帮忙看看,指点一二。小弟先谢过了。
- j7 e* h+ f# `; P, Z
# n- s, c% L; h) N, _% Z8 \5 a7 O代码如下(masm5编译链接通过,DOS下运行):
+ g; Q- \& e' A
1 t+ a: N0 Q1 l  W2 `9 Nassume cs:code,ds:data
( f' U) s; B2 \  m# r7 v8 K8 ~  z- E7 {% Q: V# N& z& f! l
data segment  
5 e5 I. U: x* D+ S. }        EC_CMD_PORT equ 66h         ;地址端口   
. d& ~' G/ B! `2 ]! W1 ]        EC_DATA_PORT equ 62h         ;数据端口   
% J4 [& e3 l' ~$ ^) C9 z/ i1 S        CMD_READ_EC equ 80h         ;读寄存器命令   
- P5 d- V' Q  O4 V; F        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
! x9 q- E" }' M$ p4 Q. O1 ]data ends# F4 J8 w1 i& Q8 S: \( l
    f7 B# d8 j/ }* a2 ~! y
code segment + J! U# j% r% Y7 g3 S+ C. p
start:   , ]3 A; A7 q4 w$ D$ D+ a$ b
  mov al,CMD_READ_EC   
* W; r, I1 d9 }7 n% N  call write_ec_cmd                ;写80h到0x66h端口
; r. P  x3 r$ K& |* Q) x  \  mov ax,POLLING_DATA           : |, u  Q1 a( g
  call write_ec_data                ;写ECRAM地址到0x62h端口7 K  m5 Q" T1 z- W
  call read_ec_data                ;从0x62h读数据# u* L1 U( T8 T9 T9 M% X0 O

9 f1 c" }: x$ i- U1 C6 @7 `  mov ax,4c00h  & N7 ~+ f+ r4 e& F; L% j- @" Q
  int 21h
7 d! Y: y* I3 D( e4 C5 |+ P6 M1 y
3 @. i& [+ s+ P4 d3 \write_ec_cmd:2 f3 E; \: K  w, n( [
  mov ah,al/ {4 E, Z' H% }* ^5 x
  call pmuWait4IBE
: Z% [7 {9 m5 f& p1 z) p  mov al,ah- ^, b3 F+ g2 `8 `  ?/ \( Z/ f6 P: I* E
  out EC_CMD_PORT,al8 S* M5 K/ o, F) I- j5 G4 T) b
  ret
- |6 v3 t# g( x# V
2 {2 h7 G. v: I  O- l3 D/ a! z' cwrite_ec_data:8 k# L; \1 Y. z0 [
  mov ah,al
6 S& T, k( Q. i/ o  call pmuWait4IBE; }) {" w3 _" w6 Y
  mov al,ah$ L. S& e/ Q- C) Q+ w1 f
  out EC_DATA_PORT,al
6 |' x; m5 \# Y( X  ret
9 J' l6 l8 T8 ^0 W7 n
4 d. }2 y4 R( r0 \& pread_ec_data:8 s2 v+ l, B0 v: J
  call pmuWait4OBF- M' t+ c9 R! Z+ ~, M" p# ?/ a
  jcxz $+2
6 y4 j- r& ?. u( g7 p- ~9 A* A  jcxz $+2
+ j8 F. S7 w" L' u/ K  in al,EC_DATA_PORT4 Z: C3 v  U! u; |9 L
  ret/ p4 L0 h" f1 o1 S* O; Q
  ; W% d* Z. l# E& t! A! x
pmuWait4IBE:
, u4 y" x1 o. r  JCXZ $+29 [- |, Y: W! D4 F4 r1 f
  JCXZ $+2   2 l" ~* [. l. `5 l
  IN AL,EC_CMD_PORT                 ;Read PMU status   + s8 t; `# b1 B! E& ~; @
  TEST AL,2                         ;Is Input Buffer Empty?   
1 H+ \# y( ?% V$ ]" ~3 I: K$ f  JNZ pmuWait4IBE                 ;Jmp if no   
' T8 L' g: ^# I- C, L; K, D  ret
0 w, O0 A7 _4 Z1 \+ j7 }- G' ~  i$ N4 T8 i6 P" M
pmuWait4OBF:# m3 u+ }/ l3 s
  JCXZ $+2# A8 f5 X( Q0 }3 J; h
  JCXZ $+2     ' V1 k0 y; T5 m
  IN AL,EC_CMD_PORT                 ;Read PMU status   
) q+ @3 }& ~3 `  TEST AL,1                         ;Is Output Buffer Full?   ! ]) C8 M$ J" I" H& Y! r- K
  JZ pmuWait4OBF                 ;Jmp if no   
2 E! X4 h: H2 }' T" V; y  ret
: P) Q. `. W. ^. L5 h* b2 i  
2 A7 V" F) e$ m  I9 [code ends  , R9 q" F/ B$ M) o* j7 t
end start) H! \& J1 L1 K* N; P* K+ T' _

7 G/ y/ m( n* h2 u, d还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
* }& \8 \+ X) w3 m8 d1 g7 z8 v, H9 _1 ^
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
; ]% s: {0 s/ V9 N1 }
8 K  f4 ~! ?. }' c1 Y' F$ J, a另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
- _1 o- J1 K) s同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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 09:30 , Processed in 0.057231 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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