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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
* e& w8 i6 t! Q# n+ K. u1 {1 ^9 W可惜读取不到正确值。一直读的是FEh......, Y' p9 O' [. `8 I+ i
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
- b6 K* c$ I. S6 a
0 h. Q- ?, _( T; r$ V4 R代码如下(masm5编译链接通过,DOS下运行):
0 b0 G  K& l! G" e- v+ D! l, O  v
assume cs:code,ds:data: f6 g9 o; m" u2 C* o, ^

  d; C! v# D# N) \5 |  Z6 Edata segment  
# C% s; l6 H, K$ Q3 M/ A        EC_CMD_PORT equ 66h         ;地址端口   
0 i7 u' F/ l; W; b( e1 }6 b        EC_DATA_PORT equ 62h         ;数据端口   
9 T/ Y% M0 t/ G, l        CMD_READ_EC equ 80h         ;读寄存器命令   
; w  d' W! H; ]/ l! e6 H        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
! O9 g8 @2 p. [: [$ Qdata ends, i/ l/ a+ ^4 d; p$ q" Y. _
  + p: ~3 l) W* C, A% C2 h3 t5 F' H9 X
code segment ! b3 c) N% Z; K9 B5 ^) @# A
start:   0 s* v7 x: x/ k+ y
  mov al,CMD_READ_EC   7 ?+ B- S( X% X4 ^, n' ]2 ?
  call write_ec_cmd                ;写80h到0x66h端口
, p$ X* J( r2 `, D  mov ax,POLLING_DATA           ' i6 ~* X2 s4 c: X4 p& j
  call write_ec_data                ;写ECRAM地址到0x62h端口
6 \% Z6 e, W/ m  O$ t0 c5 G. k  call read_ec_data                ;从0x62h读数据
( L# E: H% L) R& d! }1 K0 E/ m* {- }
  mov ax,4c00h  2 }" E, O$ M8 ^# _% K! [% ?/ b
  int 21h
$ z! u+ F5 P0 p' I7 R) ?
  q, _7 B% c( _write_ec_cmd:9 I% e' Y$ ~" B# D
  mov ah,al
; @6 H# X: f- A- e3 j* S1 p/ J  call pmuWait4IBE9 ]7 t2 o4 s; c3 q1 N6 F
  mov al,ah
1 t1 E' l' t& O. R  out EC_CMD_PORT,al
$ a$ T$ e. B6 v! j2 }  ret4 O; y! H' W' r  P: g+ u5 e

/ V) R9 g$ H& E4 S, Iwrite_ec_data:1 l) `/ d; b. h9 I4 w
  mov ah,al  Y2 J7 N/ e6 c
  call pmuWait4IBE
: i( Y# c# A- t! ?& ?  mov al,ah) l' e3 t; F8 v# b
  out EC_DATA_PORT,al
- ~. |; O! g/ Z# U  ret: ], B, d4 @3 N/ d' D! z/ r6 x7 X3 ^
: H/ c( b0 y9 W6 U" O: R
read_ec_data:
5 o& U4 q: T5 ~9 |) W. S  call pmuWait4OBF
: J9 b4 [6 n" u+ l5 O3 U$ a  jcxz $+2
* y4 w8 b8 h! S  jcxz $+2( T9 D& ~7 r9 I$ {2 W" ?
  in al,EC_DATA_PORT
0 g3 O" `; {4 u9 V3 j0 e8 h" c  ret0 l* c/ L& z5 S/ U* M* k
  
' v" s+ S) o- n* {1 _6 l" UpmuWait4IBE:
- q+ t8 @# _+ b5 E% U  JCXZ $+2# i3 ]5 o3 F# X
  JCXZ $+2   
) B+ |# Q+ Z: X! S* @# ?0 i7 J  IN AL,EC_CMD_PORT                 ;Read PMU status   . D) F# e6 E2 N+ Z4 F% j8 }
  TEST AL,2                         ;Is Input Buffer Empty?   
3 {7 N* U$ q2 R0 K: j# |# C  JNZ pmuWait4IBE                 ;Jmp if no   
4 s  X* @  t/ g# v/ I7 S" Y  ret' b$ Y/ r) O4 b* A3 ?
% v; Z- k" H6 ]: h  s2 j3 V
pmuWait4OBF:
' D3 U  h- D( G: V5 X  JCXZ $+2
4 `% m5 o/ N( ], ?% G" p  JCXZ $+2     2 W% b5 H' H8 y$ O2 h1 E; X
  IN AL,EC_CMD_PORT                 ;Read PMU status     U- \7 S  h* |+ X/ j7 c8 U
  TEST AL,1                         ;Is Output Buffer Full?   
7 G- D3 h+ h" X/ q( l: P' \  JZ pmuWait4OBF                 ;Jmp if no   ( p% v: [: z- Y6 I" d1 c' m" R
  ret
; F, c4 U5 a  M( |- U% N9 D5 o1 [  
6 [# Z4 f6 c2 }, Rcode ends  / ^" c. L6 X" u- V) p) j
end start
# X+ `8 q# ^; Q* Y/ _$ I# F/ {4 L5 L8 W7 i! t8 V* X% }$ P- p
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
' H! @/ p% R- h7 _2 S9 U5 i0 V' l
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~6 o8 E8 S2 l+ ~
2 `. N+ o- G! L" z  Y5 @/ K
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。( {, N+ |: A* E6 ]! A. x
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-5-16 06:53 , Processed in 0.049150 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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