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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
+ X( N% t# Q2 Q6 ]$ u可惜读取不到正确值。一直读的是FEh......
, a- b. @* t# t" \7 w0 E7 ?希望各位大神能帮忙看看,指点一二。小弟先谢过了。
% D: t- T. _& {- P. G2 h/ y
' N5 f) g0 f# ]! U! _1 R代码如下(masm5编译链接通过,DOS下运行):1 \5 P7 W& j) u4 L

* i- }8 b- V4 oassume cs:code,ds:data' V' e" A5 \+ I! g' ~
' S; ?4 u4 F& W6 D
data segment  & p4 [7 i$ @, w! z
        EC_CMD_PORT equ 66h         ;地址端口   
& w' c! j4 I. y3 E        EC_DATA_PORT equ 62h         ;数据端口   ; u9 F. q' n. w  Q- o5 }$ d
        CMD_READ_EC equ 80h         ;读寄存器命令   + Y( Z9 N! o, B
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
, |* O7 {% z2 M9 o6 w- \3 rdata ends) X/ Z" f" V) q! _, S
    c; e4 T7 N8 d6 k6 i' y
code segment - L( v# T0 Q8 Q4 `. Y
start:   ' ~: M* r9 b$ ?- b' G" ]
  mov al,CMD_READ_EC   ' |) T% `' ?9 D+ a: i) w
  call write_ec_cmd                ;写80h到0x66h端口* f3 ]7 P, ~6 D3 n/ y/ q
  mov ax,POLLING_DATA           2 O9 t; u: m1 }- k: D; E7 b" |0 f
  call write_ec_data                ;写ECRAM地址到0x62h端口
" t( |: E9 k, x' @, F+ I  call read_ec_data                ;从0x62h读数据/ m* H  y$ G0 p2 n0 h

+ B( u9 G3 c0 N3 H/ j; s  mov ax,4c00h  : n* E! B& R1 K# n( j
  int 21h; a' z' ^6 S8 [/ U3 m
* F2 X5 h5 h8 w: v
write_ec_cmd:/ M# N7 M$ M/ X  e1 }
  mov ah,al
% P( J: k6 j: D$ F2 L8 B  call pmuWait4IBE
% m; C/ q, h0 A0 b  G  mov al,ah7 D% f5 R) E0 T/ m
  out EC_CMD_PORT,al* p. n, N$ L' @# @
  ret/ R' c/ _0 V7 p4 a% f5 V" h

) R6 o5 d+ p; lwrite_ec_data:
8 w5 V$ k# B2 y  mov ah,al
  f/ b( t) U  v- L  call pmuWait4IBE
0 b+ h8 C% B" m/ Q( a5 e  mov al,ah: Y! ^2 B5 y1 h' m, I; N
  out EC_DATA_PORT,al
6 M: I5 L4 p& K  ret6 U# b, @4 F7 |; B

  P# f" d" @  G: s' d; ]  b0 Lread_ec_data:
% [; [* I: }  Q5 c1 S  |  V  call pmuWait4OBF
2 O, u- K) J5 ^+ w4 }  R4 |7 Y  jcxz $+21 R$ y" b' Q3 t0 s/ j" _$ a
  jcxz $+2
6 Z3 U5 }9 K4 N0 W, D4 u( i  in al,EC_DATA_PORT0 w  y) Q! _$ N; _& f/ S8 D: z
  ret2 w$ C' b; j! P" C" V, R" U$ n& V4 @
  
& c, c8 Q, D5 H; KpmuWait4IBE:% F& o7 G  e2 w( m
  JCXZ $+2
2 [. C# P4 Y/ f' c/ i/ h  JCXZ $+2   5 [9 |0 D8 t" R6 g$ D
  IN AL,EC_CMD_PORT                 ;Read PMU status   # {. W! f. @/ e, e: J6 H7 p
  TEST AL,2                         ;Is Input Buffer Empty?   3 ^, Q/ }9 ~/ i! \7 Z* N
  JNZ pmuWait4IBE                 ;Jmp if no   
6 o; A3 L% @' w: K  ret
9 Y+ W# v, S( ]; |+ j8 S5 E0 H; K
" U2 ?/ o+ @/ h1 X- mpmuWait4OBF:0 B* ?0 S7 [8 F( _" X9 v" ?: B
  JCXZ $+2
* k/ \7 C0 o3 A4 n  JCXZ $+2     / z# I4 @& c  ]
  IN AL,EC_CMD_PORT                 ;Read PMU status   ! Q8 `  ~7 u' t) m  L4 x1 g& C9 l
  TEST AL,1                         ;Is Output Buffer Full?   
' M! C" ^# F/ F8 x8 B. W$ W  JZ pmuWait4OBF                 ;Jmp if no   3 p7 D5 S5 H# K( u
  ret$ m' L+ x# C  k9 h( Z' w1 a# }
  
# f/ |' j" ^8 ?8 V9 u. ]code ends  & Z; \9 r( }! l8 i/ r$ t, I
end start
0 q% H6 T( f8 j, Z! P$ r! |8 I, Q" U3 t+ \6 D* @0 E' Z6 S0 A! [$ `  O
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
+ E7 p0 P. a6 F: ?5 u& m  ^$ V' W' S9 K7 l$ K  e8 Y
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~  Y8 f+ j6 ?3 M3 O; U2 Z
3 |5 I0 C# g& H% ]
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
  w% q5 x# t0 ]+ z2 V. V4 A# K同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-4-24 22:40 , Processed in 0.065574 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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