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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。! {: n3 {/ B0 u% M$ c  a
可惜读取不到正确值。一直读的是FEh......4 n2 ]: w) i  i% I6 r. \& R
希望各位大神能帮忙看看,指点一二。小弟先谢过了。, \5 A8 b% c) P$ M2 R* X5 U
( j0 y0 {% i. C1 T; l1 [
代码如下(masm5编译链接通过,DOS下运行):
4 c! o8 \0 K2 K3 o3 a. U# W) W$ Q' N
assume cs:code,ds:data
+ O* J; {& x2 d5 h8 r6 V, r9 H9 G$ r- z. H6 t
data segment  
6 j1 V2 L' p4 X+ h5 y7 w% O        EC_CMD_PORT equ 66h         ;地址端口   
+ ~) P% W3 _5 F. s        EC_DATA_PORT equ 62h         ;数据端口   
, S" T& c* T9 c- o        CMD_READ_EC equ 80h         ;读寄存器命令   3 V" Y8 l2 W( o6 r0 X
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   / J. Y, w5 M  A. S8 E" E
data ends7 H2 x" W( {' s  R
  3 L: B' I7 c, d/ j$ _* ]
code segment
4 a, X" }' K, c6 o- t- v2 c& L  ~start:   
5 D9 h; B/ J. T! c6 C5 _, D' ^  mov al,CMD_READ_EC   
, P$ F, E# E, Q" u  call write_ec_cmd                ;写80h到0x66h端口
8 X4 ^" A( f3 J2 R  mov ax,POLLING_DATA          
: ^6 O5 C) ~7 ^- v% e+ ?  call write_ec_data                ;写ECRAM地址到0x62h端口
4 R- a4 ~# Z7 T* v5 T  call read_ec_data                ;从0x62h读数据
: O/ E& ]6 O4 ?& u$ K( X# t/ M2 c* V; Y1 M. A  P0 g2 O5 @
  mov ax,4c00h  
  x2 {" o. q" t& `; ]/ R  I  int 21h
4 U+ r& D4 |; ]& E
( ?3 [4 b' a0 |5 K8 q2 v: I  owrite_ec_cmd:
1 z: s0 P' G/ D/ h: h, j  mov ah,al, q9 ^  V  \. y* [4 I% l+ g
  call pmuWait4IBE
; @( }' l1 |5 \  mov al,ah
0 Y" Q: d* k* [( m1 z  out EC_CMD_PORT,al8 m+ F/ F4 e) K
  ret
: f2 O4 B7 f! T8 ?2 Q; C: Q. R" Z
write_ec_data:, L5 f; Z; ~4 i2 S2 ^
  mov ah,al) O3 F$ }* ~4 [% p% D$ M5 u
  call pmuWait4IBE
; l) E, J: b$ r- k. L5 g! c  mov al,ah  a+ Q2 [- [. H, n
  out EC_DATA_PORT,al, V, v" ]) V+ Z" M. M8 b) i
  ret4 ]8 t4 M, ?- q8 B" \8 p
( y$ }* F! w1 ~8 m& g& i: }
read_ec_data:8 z/ _6 J' p$ c! ?, [$ m) \" F8 T
  call pmuWait4OBF+ k5 Y7 {* j8 a3 c4 _
  jcxz $+2' K+ M, u* t+ V
  jcxz $+2, S% @$ K3 Z. H5 }
  in al,EC_DATA_PORT6 w: T0 v  E9 K) M% {+ G
  ret
9 u+ q% ~# X( Y+ i+ V  # M# b& `8 [; e( Z# r4 R+ E
pmuWait4IBE:7 p0 \' r6 a6 L6 g
  JCXZ $+2
- _" h5 \. ~* r, c  JCXZ $+2   
# d3 A1 q5 Z; F& ?3 \+ E  IN AL,EC_CMD_PORT                 ;Read PMU status   
  b) Y+ ~$ N3 U1 `0 A' P3 C, O  TEST AL,2                         ;Is Input Buffer Empty?   4 u4 y" W8 y3 L9 p, |0 G5 p9 \
  JNZ pmuWait4IBE                 ;Jmp if no   
7 n" Y: E4 M4 \% c  ret
% T4 t' p) K4 |8 b) p  j9 q- W0 E6 N: i/ W! x3 @0 r$ F9 Q
pmuWait4OBF:; R' y; R- D8 O; W0 i) \
  JCXZ $+2
! D" F8 v4 r; U5 ?: p& [  JCXZ $+2     
- @8 a+ K$ ]# x! U6 F  IN AL,EC_CMD_PORT                 ;Read PMU status   1 F8 I+ |3 ?/ [! f& \7 r- {
  TEST AL,1                         ;Is Output Buffer Full?   : }! x; @) \4 g: E$ T$ K
  JZ pmuWait4OBF                 ;Jmp if no   - z+ g* b' k8 ?+ h$ ^
  ret* V. X2 S, x$ ^: h" O
  * y9 t; U6 r, e$ M0 Z7 F- c8 D
code ends  
; P. I7 j3 Z3 e3 send start
9 x; Z! y$ ]5 A9 t- Z; Z0 Y- T1 }  o- T
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
# k$ o) u" W; Z! A
8 t( H8 H) f5 _* y+ k+ n+ \[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~# |* y  S2 S* T9 w

3 w& {. ?4 b6 ^另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。) r  M1 o& d9 d& O
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-18 13:12 , Processed in 0.023405 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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