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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
, A! b. F8 T1 s: k3 C! l可惜读取不到正确值。一直读的是FEh......3 p1 O6 A5 A; S0 S
希望各位大神能帮忙看看,指点一二。小弟先谢过了。; I) z; a5 k% W, G* y
. V2 N) G8 d# j
代码如下(masm5编译链接通过,DOS下运行):0 _, ~+ K* W/ P

/ n- \8 U) t6 u) \assume cs:code,ds:data
5 S( o" [( m3 @1 w
: U- ]/ Q, S* b; q/ {data segment  
5 R, D8 q/ P1 ^- U, c3 V8 N        EC_CMD_PORT equ 66h         ;地址端口   
. N8 m$ J0 D+ L+ g- ~        EC_DATA_PORT equ 62h         ;数据端口   
$ Q8 P$ C" s  ^% E4 J7 n/ }2 b        CMD_READ_EC equ 80h         ;读寄存器命令   , ]% R4 L! Q. g$ p  K
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   & o' g9 h7 R2 [- w8 M
data ends
! R- x4 p1 n+ f* g' W& y+ ?! A( I! F  
9 s8 i9 E# r7 M; J* g6 k# E( j. tcode segment
6 G/ R5 q8 w8 V; K8 ~( b# X% ^start:   
$ H9 v4 h: M/ B8 R3 j  mov al,CMD_READ_EC   
! j; m  [0 H1 D8 ^  call write_ec_cmd                ;写80h到0x66h端口
! I3 H" x) F8 q4 m' N3 e" d$ t  mov ax,POLLING_DATA           & K, m! w% k6 w& @$ ]- Z
  call write_ec_data                ;写ECRAM地址到0x62h端口
1 `6 R, ?/ R( C$ z, }  _  call read_ec_data                ;从0x62h读数据: {! o$ U9 F$ y  I

9 g, R. j: |4 p; u+ o  k  mov ax,4c00h  
) @5 l  S( _% ^( I, \  int 21h
' {6 c4 C$ ^, D
# f- F% n) G! H6 Y; N) \4 f* \% V3 kwrite_ec_cmd:1 C/ r$ c, H: x- o3 J: Q  j: [+ r0 i
  mov ah,al
. H0 n3 @2 O. C6 }/ L) L' I  call pmuWait4IBE5 o! b/ m0 Q9 O8 E
  mov al,ah
' L: B$ G. n; R! y9 c  }" O; A  out EC_CMD_PORT,al/ ~/ ~7 x4 W1 |: u% \# d
  ret
/ I# y; {+ z) l4 K% y$ m
4 a1 x, @; C# G, ]$ f( |7 m! Zwrite_ec_data:
! h, F% V+ ~' `) o- ~( y( x  mov ah,al
1 O9 t/ r& w' t- L' j! Y  T  call pmuWait4IBE
! k( Y! J# K6 ]" n6 F  mov al,ah0 W0 ~% i! \+ Q1 g9 c
  out EC_DATA_PORT,al% q' e/ P0 e3 p3 q8 h
  ret" O7 a! u) |+ _% g9 T( L& Z
% b+ d2 I9 `' p5 I7 e% G& B1 b/ N
read_ec_data:9 }2 I* G) V* ~. {0 C
  call pmuWait4OBF# J9 t5 j# j% R4 d9 ]" R( E
  jcxz $+29 P6 N9 @* l/ K' Y0 Q. B) V
  jcxz $+2$ U6 M( y% |' Q6 A8 ]. F2 l+ L
  in al,EC_DATA_PORT) b; A, j3 v! I  {' Z* V) r
  ret
$ I. t: W  f! A4 f5 ^6 d  8 f* U( S& S+ z) k9 @0 \. c
pmuWait4IBE:" Q( R, p  M4 Z4 t, {8 I1 d) E
  JCXZ $+2( p4 ]8 _+ P# [" u, A
  JCXZ $+2   5 }3 ]1 T. N5 @, p  t# Y
  IN AL,EC_CMD_PORT                 ;Read PMU status   
+ `( j) U0 u% T( L6 i4 q3 Q$ y  TEST AL,2                         ;Is Input Buffer Empty?   
  T: s7 d2 u' z  JNZ pmuWait4IBE                 ;Jmp if no   
& w& P8 x) n) L2 z  ret; j1 T2 r% P% P, \

$ j% w, ^+ x4 XpmuWait4OBF:
) |: O5 n5 A* Q, _- t% H  j. n! W  JCXZ $+2: P% p, h9 @6 W
  JCXZ $+2     
% q& S/ k' e$ s- V0 ~% a1 d9 j  IN AL,EC_CMD_PORT                 ;Read PMU status   - _5 u3 y6 q" S. _* @4 h
  TEST AL,1                         ;Is Output Buffer Full?   
6 \6 B4 Q& G& ^" B" L  JZ pmuWait4OBF                 ;Jmp if no   
. |; e2 ?3 s( Z4 I  ret6 k$ G7 j0 a) S+ u* o
  ) ~. Q9 K1 r! x  m
code ends  : X1 m! L; `- I! Y1 d# E' Z% w
end start! k0 }+ j. B2 E5 m

9 g& b; c# A9 \" O, ?7 m还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
4 u5 V6 _; }+ j) {# e9 x* x$ r8 }. z% N$ q4 c6 K' _% M
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
( H: ?+ e3 l- ]
: r3 s, u( N/ A/ C) @9 i5 g% e8 J' a另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
1 W0 d! v5 P( \; H同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-10 12:12 , Processed in 0.214159 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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