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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
7 R) b7 _2 b' H* H可惜读取不到正确值。一直读的是FEh......
# L# P8 ^+ ~; i) i+ T希望各位大神能帮忙看看,指点一二。小弟先谢过了。
0 t$ M+ c4 M# V+ d: I5 `' v; w8 D: Z) ]9 |
代码如下(masm5编译链接通过,DOS下运行):3 f' ~) H2 R% b2 Y( x, w, L" p7 g
' ?# {& x  ^* H7 w' |% G/ l
assume cs:code,ds:data
4 G9 h6 p5 [, f( u& |, f. X! ], U
) p" K+ v; F5 c' adata segment  3 p8 o8 H9 q8 w3 M* a" I/ C! M
        EC_CMD_PORT equ 66h         ;地址端口   
3 R) {+ c+ d: b* Y' o        EC_DATA_PORT equ 62h         ;数据端口   
8 f8 j7 A# v4 \2 M& m! l" q        CMD_READ_EC equ 80h         ;读寄存器命令   9 N6 g9 d, Z, N9 d- u
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
' W* _# L! K1 A5 p, L3 w# }$ ndata ends
7 H& H3 H* b  ~. x  4 A& K6 j- X, n1 ^
code segment
. s* Y: o5 X2 I* ^( astart:   
3 L+ M2 d! `" ]# k4 H$ q, K  mov al,CMD_READ_EC   " S  p* }) C) K5 R; H% _/ X4 o
  call write_ec_cmd                ;写80h到0x66h端口
; n7 R7 b' D8 E) g8 m% \  mov ax,POLLING_DATA          
5 i6 O8 j- G1 X, x  call write_ec_data                ;写ECRAM地址到0x62h端口
5 X0 _, C$ c1 ~/ a- H* {1 \! H: w  call read_ec_data                ;从0x62h读数据6 ~1 L5 E4 N% F2 T
! H4 Y! W& h7 H  V' O  d7 `
  mov ax,4c00h  4 i+ K# A( _: R% c( ]& T
  int 21h
# x6 }' H& E9 `4 Y" w- K* }2 L: `, U+ ]0 G6 `9 ?
write_ec_cmd:2 h0 t  P9 a1 x
  mov ah,al' M5 |+ r2 i0 w3 d0 |
  call pmuWait4IBE/ [8 G1 C  H8 b
  mov al,ah/ ~7 y% ?$ ?+ q  M; f# h- D
  out EC_CMD_PORT,al! z3 b" p. \( V. |% D' P- |; k
  ret2 c$ ?: X; V* K8 Y
9 `9 Q" b" O5 O
write_ec_data:: i1 K# g, r1 }, \  P+ T
  mov ah,al  B; K, [  @7 w; w: k
  call pmuWait4IBE4 x* l1 l2 z7 @5 y7 s
  mov al,ah- f1 P! C& f/ ]3 G* Y8 F
  out EC_DATA_PORT,al) V4 r& `; W2 k* w  m9 A8 ]' R$ X+ W
  ret& u# T! ?- {' l
; n, {8 T: s* d) i1 o! l7 {5 |
read_ec_data:
! h' b# A: j" _3 ]. d  call pmuWait4OBF
3 v4 `9 Z9 y- o7 _& S7 \  jcxz $+2$ J: n/ E5 ]6 F0 {/ U% b7 }
  jcxz $+2
& V9 x3 f* F/ j9 v7 m7 O  in al,EC_DATA_PORT
$ v% S; K$ b- I  z  ret
9 e3 m  @6 {) A$ S  % s: k8 m; N) C5 Q
pmuWait4IBE:7 {4 u. G5 m. g8 V, y
  JCXZ $+2, c1 l) }# |+ D/ V6 k) \$ q
  JCXZ $+2   
# F- q' M8 ?. Q- t  IN AL,EC_CMD_PORT                 ;Read PMU status     W( c4 N8 ^: m, n2 ~
  TEST AL,2                         ;Is Input Buffer Empty?   + ~9 l; I9 j" D+ z, ^
  JNZ pmuWait4IBE                 ;Jmp if no   $ `7 ?$ l4 n5 d/ w* V# j/ J9 f- J
  ret& R, C& c6 ?: t: I* ]( T" g
8 N+ X3 `" U2 E
pmuWait4OBF:5 `8 h0 G7 h* }8 }$ }7 ]
  JCXZ $+20 [, i  D& P8 ~
  JCXZ $+2     - K* d/ b% [) B  F/ Q
  IN AL,EC_CMD_PORT                 ;Read PMU status   9 D) f+ d; k1 A  ^5 n1 I
  TEST AL,1                         ;Is Output Buffer Full?   ( }5 a0 L1 K7 Z; @
  JZ pmuWait4OBF                 ;Jmp if no   
7 a( ^, E3 n9 I. W5 q2 X2 P; B3 m1 G  ret6 k7 @! V; o! L' V, i! O) G5 c
  
* O3 }, n2 m$ ecode ends  
3 X+ g9 f1 I& F3 Q! yend start
: S7 z$ ]+ i8 Y% B( W! T  {" X& |5 ?9 O7 W
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
4 R# C0 c/ U. Q" G
$ p3 J" x9 j& p* v[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~6 W0 `- \7 Q2 X( R" T& Q7 L9 i
# `7 x0 E" q1 z6 |+ w7 y+ |
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
( H! S% K% i5 O+ A) I同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-6-4 10:38 , Processed in 0.047130 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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