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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。# a  m1 C; B6 d3 f+ F, E3 K2 K& _
可惜读取不到正确值。一直读的是FEh......
4 M6 q- d% E% ]: V8 F9 [, {$ B希望各位大神能帮忙看看,指点一二。小弟先谢过了。
0 {) l0 d0 r$ o0 c: R/ G1 n9 N
/ I% O- I5 I' g1 Y9 Z代码如下(masm5编译链接通过,DOS下运行):
) u4 f- g5 O( P" O8 j  W  `& ~. u5 D6 [5 y3 s7 j( l7 t* i" f
assume cs:code,ds:data8 E1 E' Z, _" `
0 b* x: ~: D6 F  ^& d5 y
data segment  / A  @: D# Q* s/ E" h5 U; R7 E
        EC_CMD_PORT equ 66h         ;地址端口   + _5 x3 w/ G- j: b; |
        EC_DATA_PORT equ 62h         ;数据端口   8 B. m2 ?7 h$ J: y
        CMD_READ_EC equ 80h         ;读寄存器命令   
( N' k$ y* c, B5 N+ u: I        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   6 j9 t4 o3 ~4 R' t; q) \) a" t
data ends8 j# G6 Q3 ]1 i' @! D' Q
  / P* O" g6 ~2 g+ Z0 v% j
code segment 9 _2 }8 [8 J2 D
start:   2 A' Z' V* g: v. O& M
  mov al,CMD_READ_EC   
/ p! O# {7 C8 f; Y2 ?3 W* T# W# g  call write_ec_cmd                ;写80h到0x66h端口
: `) ~) h5 [7 x7 @" J  mov ax,POLLING_DATA          
  w7 @) [: p* H% m  call write_ec_data                ;写ECRAM地址到0x62h端口5 _: @9 N3 D5 [; o. o% k, h  c
  call read_ec_data                ;从0x62h读数据
6 Z  v: a5 U! [! w9 U$ v- _+ K% r0 Z: F6 u6 G3 m/ N
  mov ax,4c00h  
. z# N4 Z# l' W, k2 @  int 21h3 G( I1 S* J# x
5 _( M, ?) H, P
write_ec_cmd:
2 K  I$ O$ ~5 a1 i* c  mov ah,al6 T0 Z* R; o' I# M! Z$ E
  call pmuWait4IBE
* O, s9 F8 x! l; t7 E  mov al,ah' F0 O0 D4 N2 c2 B4 Y
  out EC_CMD_PORT,al
' N1 V; l6 ]+ _6 |  ret
* N1 K8 R7 v  d8 |- |! p4 m/ c: K" _0 S9 Q
write_ec_data:/ ?2 \+ Q- C2 c$ [6 y
  mov ah,al+ L) {2 n/ I% B- e$ y! E
  call pmuWait4IBE
* O- }& u' B7 U2 j5 d& ^( O) X2 h+ H8 ~  mov al,ah! j1 A$ H7 }& [) Y& M5 M' c3 t
  out EC_DATA_PORT,al
0 }! k5 C1 C1 |  ret
# M1 {) |, x) |$ v
0 Y3 Q* b& ^6 f( C; B- Gread_ec_data:/ N- Y; g* R$ d0 @; ?; Y
  call pmuWait4OBF
, O. M, |& T: }' ^  jcxz $+2
; T1 b. k) }' R/ y  jcxz $+2
1 N3 f  @9 H5 s  in al,EC_DATA_PORT
  z* L$ `& w' ^  ret
* ]* z8 Q& `7 ^% K* p  
8 q2 Y! U  S0 s$ x1 Z! D5 HpmuWait4IBE:
" I+ P4 f  \6 Q& s  JCXZ $+2
5 t! v& ^8 F) W! K6 [) @! W  JCXZ $+2   $ J9 X# u* N: x7 n! s3 l
  IN AL,EC_CMD_PORT                 ;Read PMU status   7 f2 c# }# s$ E; g
  TEST AL,2                         ;Is Input Buffer Empty?     x4 A% e* I& T( R5 x
  JNZ pmuWait4IBE                 ;Jmp if no   . ~$ H, z, r, N, }" W  b, C
  ret" H- }, l# {2 K3 k# d, ]3 _5 z
0 p8 g* X- T, R% g2 ~; T
pmuWait4OBF:
' t' O* d) H# @1 [- Q  JCXZ $+2" u5 `3 w# _7 U" b0 j: u! `
  JCXZ $+2     + q; y& R' ~) q1 y/ j
  IN AL,EC_CMD_PORT                 ;Read PMU status   ( x, j0 y! v1 f2 j3 W& ?- ]
  TEST AL,1                         ;Is Output Buffer Full?   ! w* k' ?% T9 K: v6 y) @- i( f
  JZ pmuWait4OBF                 ;Jmp if no   
7 k) a& s: y; [1 v" ~- ^+ J7 u  ret% K% D2 H. x" Z% O& R- {
  
/ M, G, I6 Y$ h! |% @code ends  6 K  A* n& `  n' ~; A5 b% w
end start; \4 p: ?, \$ [9 V7 D

' T# ^  [/ J; o4 z3 n5 i+ V' m还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。  K% q1 d5 H) Q5 |

7 S6 N4 V) v0 V" Q; M/ j; I[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
) ~8 ^; t# t1 p5 q9 I. F+ y+ J
: o' j9 h- `5 p) p另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。9 E( U7 r; s/ T4 n* z5 r
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-8-11 17:01 , Processed in 0.048753 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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