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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。( w# E& Y$ B+ Y4 r
可惜读取不到正确值。一直读的是FEh......
: M5 E, j) |0 @希望各位大神能帮忙看看,指点一二。小弟先谢过了。
! o& R" v2 z# t& m4 v; e* P% i) ^% y& v: _
代码如下(masm5编译链接通过,DOS下运行):
4 d8 D$ `. m, C* n( g/ V2 J0 Q: @7 r7 |- j+ f8 [2 \0 W
assume cs:code,ds:data
, g* k0 J% J/ M7 ~' d! V) _7 X; a, g' e7 r$ q  g5 U; W) |
data segment  8 l+ r3 J0 A. J0 Z# h, P
        EC_CMD_PORT equ 66h         ;地址端口   
" ]7 O' q% [# e        EC_DATA_PORT equ 62h         ;数据端口   * Q1 }7 [( r/ Q$ O6 q
        CMD_READ_EC equ 80h         ;读寄存器命令   * K; j" d# o( C
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   + ^- [' D* W$ X5 m( D' J
data ends
' g# g* w- u# n' P  4 ?8 Q/ \; B+ }* e2 W: z2 {
code segment . i6 y( t, k1 `9 q- \
start:     ?8 u3 s  j" C) v0 j1 v
  mov al,CMD_READ_EC   
2 }# Q! h5 P4 A$ e7 B' A8 F; k: D  call write_ec_cmd                ;写80h到0x66h端口
" }: H4 D( _9 q: A& u- J# \  mov ax,POLLING_DATA           / B, V4 i9 p# X/ x7 J0 ]  j
  call write_ec_data                ;写ECRAM地址到0x62h端口
: U4 Z' p  j) p6 h2 M  call read_ec_data                ;从0x62h读数据
" I3 w2 A4 W* X: w. z% ]# L! s; D  u' a# d) G1 o4 u! {6 ~
  mov ax,4c00h  - `* r: z! i7 V
  int 21h
' N9 \0 N, u- o' Z& O
% d  \- r# U- n3 a& y1 y: Jwrite_ec_cmd:" ~* N) \8 H1 B" n
  mov ah,al2 a& p& R1 {# p/ P( E3 v
  call pmuWait4IBE; i$ S2 ~7 X0 X* J0 b
  mov al,ah0 P$ @* s( U6 C) R
  out EC_CMD_PORT,al% p( ]2 e2 K  u& A1 a9 Y
  ret0 _" Q  L/ d9 k2 ^- }, H& G

, m( U/ L0 H: g' c8 _2 bwrite_ec_data:6 f! ~/ u+ C# I/ _& U
  mov ah,al
* Q. u: @3 v' ]  call pmuWait4IBE+ }( d8 m. w/ t" p! f" @
  mov al,ah
, w1 m. _- e, y% B& i  out EC_DATA_PORT,al
$ b1 v* ^* G! R( q  ret) ?2 m" R" A: q

1 h9 g, l' ]  uread_ec_data:% ^% a9 w: q. O1 F' A. r
  call pmuWait4OBF: D7 W# O" p, c# u9 r& {! b( ?
  jcxz $+2
9 i6 A* v. {8 Y. H  ^& z4 O  jcxz $+2
8 G, G6 M4 N6 t/ \, a4 C  in al,EC_DATA_PORT# I* {, G- W. \3 n4 M" a, |# B
  ret
, |: Z1 q: l! O9 y; M" F3 }' a1 l  & f: t8 Z0 j1 a* C
pmuWait4IBE:. O0 S  U$ x3 {4 m
  JCXZ $+2
. ^: x. c; k$ ~0 T6 k# k* b1 |  JCXZ $+2   
3 C6 `1 I2 Y0 t. l5 J/ x8 u: \  IN AL,EC_CMD_PORT                 ;Read PMU status   8 h2 Q; U9 e# K' c* e
  TEST AL,2                         ;Is Input Buffer Empty?   
" c" |- T  }+ M2 R# ~3 f  JNZ pmuWait4IBE                 ;Jmp if no   4 }% L. [; @2 p; \
  ret
" }0 Z  }$ A  X0 o  I, Z1 }8 U& ?, p
pmuWait4OBF:
) U8 ~( T1 q1 l2 R6 u  JCXZ $+27 x/ E7 R  w7 Q7 q1 Z1 p. H
  JCXZ $+2     * s9 a$ X6 V5 q6 q
  IN AL,EC_CMD_PORT                 ;Read PMU status   
; W6 `) j  d" b% `  u  TEST AL,1                         ;Is Output Buffer Full?   
$ J4 z2 d! Q+ d; n( Y7 t  JZ pmuWait4OBF                 ;Jmp if no   & [/ z! l. |6 B5 S' K! ]
  ret- e! h6 Z& s6 M! A: i9 k/ ?2 Y
  - |; r7 |+ g1 V2 `0 j( E8 t
code ends  ' G. F" B9 b0 X( Q) M
end start
% b9 L, m. Q1 v, ]- `9 F+ ~0 f: V- u
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。) i( l* l( v# s4 ?, k# Y. ]

3 [  J& j+ I& U2 g- u[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
( k+ T6 P0 u1 f9 {, I2 @$ v) l; [; x# s
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
! v  S. L) I: 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-4-4 12:44 , Processed in 0.192916 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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