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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
, l. I/ I$ _* G! [% @可惜读取不到正确值。一直读的是FEh......
# a4 W: |; _1 C. e( W希望各位大神能帮忙看看,指点一二。小弟先谢过了。2 P8 A% E# h  }0 u4 U

9 U( M9 d6 ?# B4 ]代码如下(masm5编译链接通过,DOS下运行):
$ l6 `: ~6 Q: s7 [
  @3 g& K3 j( F  q2 i' @9 passume cs:code,ds:data
2 F& X4 g7 v0 O+ y' D5 [6 S
% X5 |1 d% y1 l% _, w, ddata segment  
$ R% C, k) G( B% E0 Y* I        EC_CMD_PORT equ 66h         ;地址端口   
& d- D* o- J! E7 s        EC_DATA_PORT equ 62h         ;数据端口   
4 z) E. @5 j7 ]& P        CMD_READ_EC equ 80h         ;读寄存器命令   / F# v8 _/ I" S
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
0 K1 u$ q" v+ F  p) U& Ydata ends
9 n7 t( p1 g) b/ F  
1 m5 x4 f1 {3 C! a; A4 M% p9 p3 _code segment ' D) h: |& g# S2 g) ^+ X9 X0 f
start:   
( ?  W) W: P: p  mov al,CMD_READ_EC   
4 I7 Y( D. h  z) Z  I& a" @0 Q. j! j  call write_ec_cmd                ;写80h到0x66h端口+ |9 v/ [; m! X$ ]% T2 N
  mov ax,POLLING_DATA          
8 M! w) {, [) D& q* G4 Q; y  call write_ec_data                ;写ECRAM地址到0x62h端口
8 N( }3 c0 p: {; b# Z% u; Y% p" S  call read_ec_data                ;从0x62h读数据. n4 X/ c7 q$ R' j1 z1 t
5 r$ C/ p% U3 F7 }; Z
  mov ax,4c00h  
7 g" U' h; I; E5 O" s& d, {  int 21h
% v; e6 D8 O+ C8 h
0 Y3 L5 o4 Q9 I/ i3 m/ P" Lwrite_ec_cmd:
2 n0 a" v/ i$ p/ y  mov ah,al
* G( N+ b4 V- Y3 k) Q! U  call pmuWait4IBE
7 i8 n  w+ n% T7 |% a4 A. K6 x' s  mov al,ah* i# @8 a0 d9 ]9 z9 N5 o- p+ Q
  out EC_CMD_PORT,al$ H7 t( |: k: F- O/ U
  ret
; J8 v2 Q. e2 X) C9 }  f  n) l. p; p  E/ {
write_ec_data:) b: [: ^2 _* D
  mov ah,al
3 m2 j  k* Y2 ?- X  call pmuWait4IBE$ I' k7 k# ?  w5 |7 Q$ j* |
  mov al,ah1 v/ p3 A2 q9 W+ O
  out EC_DATA_PORT,al9 n: K8 G2 P: O" Y# K' S% B' \
  ret
0 [# P; h7 l: ^# I! z: J5 l# u& q
read_ec_data:
' i" b  n7 Y# `* e$ i/ a  call pmuWait4OBF6 {2 p* }" Z8 M3 c
  jcxz $+2
+ ?( F( a$ E, e! a& q+ d, I# k  jcxz $+2
" j4 U- e( ~; g, \. n6 v  in al,EC_DATA_PORT
! f5 {7 Y, n" `- ?/ q; Q; K  H  ret
* l- n6 M5 t. ~- H# A3 R  
9 T) Q4 {2 K% b; d: l1 DpmuWait4IBE:3 A, N! f' ]5 v2 q' N2 e2 H& M9 o
  JCXZ $+2
1 i  T/ y2 {% ^$ z  JCXZ $+2   
- v" p1 \" T; t) l  IN AL,EC_CMD_PORT                 ;Read PMU status   
' D$ H( b- ^+ f, k) x  TEST AL,2                         ;Is Input Buffer Empty?   
, f. r3 K2 s, ?  h/ p" e  JNZ pmuWait4IBE                 ;Jmp if no   
/ @5 g- {) e* |- }8 [  ret2 o9 _9 @8 N8 ^/ A, f3 W- h9 Z, n4 C0 K

8 h! n* ?1 W% o! _5 n1 tpmuWait4OBF:
/ \0 b& D- S2 \) [; n  JCXZ $+2
( Q+ M( v8 g2 _; r# ?* A, s& Z  JCXZ $+2     + }. }. q4 o1 W3 X4 ~$ a* V
  IN AL,EC_CMD_PORT                 ;Read PMU status   
/ Z" ]# z4 u# o. t: S  TEST AL,1                         ;Is Output Buffer Full?   . _. t$ z+ a# g6 t' k( f( {
  JZ pmuWait4OBF                 ;Jmp if no   ' V: ?' i4 q; N' q0 H
  ret
8 p) B2 _' l* V1 n  $ f* T7 ~6 E! E2 x( J0 m3 R& f+ v
code ends  / n* Z1 A" r& R$ r9 o1 t5 \6 \
end start
  V- m5 c3 N% q- Y& h3 K( h
0 n6 X* }9 ^4 s* ~还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。6 k5 x* n: M5 n# R* h$ \3 u
0 P5 f; l/ b/ u* x. j% i) n# K; S5 X
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
, d' F: g. b0 s/ g2 B+ z9 C
& v+ X: H; t' ~6 O; ~5 C另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。6 s. r# _0 ~  Q
同期待高人答疑吧。
回复

使用道具 举报

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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