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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。6 O+ E/ t' }' z/ V
可惜读取不到正确值。一直读的是FEh......
, ^, j: i3 i) q希望各位大神能帮忙看看,指点一二。小弟先谢过了。
7 u. g4 w9 g% ^! x" t  U
/ i' q2 v, w4 R代码如下(masm5编译链接通过,DOS下运行):  L& C8 s# q6 z* F" r

" ~7 i4 W+ O, _2 h, bassume cs:code,ds:data
( n) A' `( n; C. l" `. s+ x& Q! O. p5 m+ L2 |8 E
data segment  
) h) \4 a$ `5 R) S8 B$ y) s        EC_CMD_PORT equ 66h         ;地址端口   0 ^0 O$ q! S& t  n, v2 O6 A" C  a
        EC_DATA_PORT equ 62h         ;数据端口   + W7 g; G/ N; X3 w) P
        CMD_READ_EC equ 80h         ;读寄存器命令   
7 J% q. F8 e' s( Z/ `0 k, Q, x' \0 p        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
. x( @  c# X: Jdata ends- z' }& s" u0 h
  / l( J5 p4 f% \% H
code segment ' C- W5 E3 E6 e: S* _
start:   
: c! m5 e4 U% ~  mov al,CMD_READ_EC   
& p1 z5 O6 y. B( }+ Y  call write_ec_cmd                ;写80h到0x66h端口5 N% v# }! h7 {$ ~
  mov ax,POLLING_DATA           7 v  N& h+ n5 W. s1 d2 l5 Y$ O
  call write_ec_data                ;写ECRAM地址到0x62h端口- M* E$ d; w0 t; Q) y$ o
  call read_ec_data                ;从0x62h读数据' _. m) F/ m# d2 p: l
  x( c% z; M+ X. ?& W% i
  mov ax,4c00h  ! x* J$ L; c. F- p# L4 K0 u& w8 @
  int 21h* g* |# U; V6 h6 y

& {' Z  @- R7 p3 \2 }% [6 owrite_ec_cmd:
+ n2 d: t* {. n  mov ah,al
$ L& L: H: s7 P. B  call pmuWait4IBE6 Q4 F9 H2 B) ]9 n. z$ _8 B
  mov al,ah
) c% U/ x  a7 e. v  i* a' h0 C6 s  out EC_CMD_PORT,al) p; [* a- w+ A, j
  ret
1 L9 b3 E$ m6 a6 U# w) U4 ?; y7 @1 r* F/ m
write_ec_data:
% x' r- G  C0 q" y  mov ah,al
6 ?' A8 o- i: @% d3 A# H  call pmuWait4IBE! ]4 z( `* N& D9 B
  mov al,ah" \3 D* @4 }. m' B9 _0 U2 P
  out EC_DATA_PORT,al
- E) P3 }$ }: }9 s4 {5 Q  ret+ P0 _. J6 p: V0 _

, \6 D+ B) V& {; Fread_ec_data:9 j# b, a+ s: |9 u3 }
  call pmuWait4OBF% I, x7 u" i% u5 o
  jcxz $+22 P0 L  n1 G3 Q7 }
  jcxz $+2
/ R+ E8 G0 Z% [  in al,EC_DATA_PORT
! e9 c9 r4 u7 k% ^0 N  ret
& V6 E; j7 }- J  V4 h2 j  
! Y! P  l& ~6 f- MpmuWait4IBE:. k: _0 a) b& d/ p: v
  JCXZ $+2) O- P# {$ r2 K+ V9 B
  JCXZ $+2   
! r7 t6 G( \3 G/ K" U  IN AL,EC_CMD_PORT                 ;Read PMU status   / m, B8 H" P1 @2 F% D
  TEST AL,2                         ;Is Input Buffer Empty?   * g; d3 u; j' m5 }( Y: [0 y
  JNZ pmuWait4IBE                 ;Jmp if no   
7 q5 y3 U7 N. Q2 E( N- F6 c3 _  ret' D- I8 e" C& Z! z* w) H

$ s9 S- h  c$ u& y* ]/ e8 g  ApmuWait4OBF:
3 j$ X( l& {- \8 B. E# f0 k- p" v3 R  JCXZ $+2
( K, {& h2 v8 x7 y! D3 P  JCXZ $+2     9 j, i6 Z# v: _' h2 W* \
  IN AL,EC_CMD_PORT                 ;Read PMU status   
  m  f, ^9 R; g  TEST AL,1                         ;Is Output Buffer Full?   
; p2 ]! G" L- P  [$ b4 Z# k  JZ pmuWait4OBF                 ;Jmp if no   6 {' @* n7 e5 N  o
  ret
. _# ~0 q- A( P  
3 O! V. Y* j; j" D) }  B- Bcode ends  
! G$ `1 R9 S1 Z# U0 n7 l' Gend start  O% K+ J; e% n, b- ]# H0 x0 G3 E
/ X1 i/ U4 K2 p; f. ^" A; W
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
. ]* _! V7 `# M1 ?3 M2 [
/ U3 a7 ]/ v2 L: ?% e2 T0 y5 z4 E[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
# t1 d# \) {) j# h2 ?( L
3 ~! y# ^- u) e; X/ |2 P9 X另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
2 z2 m, _. l0 p  F/ m% k同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-5-20 08:47 , Processed in 0.024165 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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