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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
+ L5 B  e4 b7 u: n可惜读取不到正确值。一直读的是FEh......
3 T8 C2 z$ ~* s! P希望各位大神能帮忙看看,指点一二。小弟先谢过了。# Y/ o9 l% H/ m
. S- J  j8 a6 L  W- }
代码如下(masm5编译链接通过,DOS下运行):
2 S; M8 ~' Y9 f, o3 ]  m+ a  f' P2 t# R/ M9 P
assume cs:code,ds:data
: N; L4 O6 n0 N, t7 N) @5 e
5 Y& f* s( \3 }8 M$ odata segment  
* S( a( a0 G6 H( x; K8 A7 {1 c) x        EC_CMD_PORT equ 66h         ;地址端口   
' {# s' ?' j- ~+ G: K! B        EC_DATA_PORT equ 62h         ;数据端口   9 x3 A- r0 c& y* n+ {
        CMD_READ_EC equ 80h         ;读寄存器命令   " [5 d4 t, y$ T; A4 u$ {
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   6 N  }' P/ D5 v) h' e2 g! E
data ends
% N: A6 d- V0 x  
2 h2 q: S5 [" rcode segment
5 p" Y- l5 J: k2 Ystart:   * w: _& G& c2 ]9 _: B8 k3 j
  mov al,CMD_READ_EC   
  T: z) f- S, ^) A  a- i  call write_ec_cmd                ;写80h到0x66h端口) S! _# j9 T( {5 w# t& ?# a
  mov ax,POLLING_DATA           % {( k) e/ l6 F( d6 }- i& u
  call write_ec_data                ;写ECRAM地址到0x62h端口
% x) K; d4 l( w( y6 N! G; n4 N7 c  call read_ec_data                ;从0x62h读数据
/ ^* N  M4 ?* R9 b8 I) ]  ~
: Y; N/ E2 ^! E  mov ax,4c00h  . d3 o6 S$ d/ v' U* r
  int 21h5 k$ G% L, J/ S! K; D
2 F! C) J- z/ C
write_ec_cmd:1 U, ^- n5 }4 D  Q7 }+ S4 _: z
  mov ah,al
+ `8 R8 J; G' ~  |( ~  call pmuWait4IBE
- M! R. g5 e( N  mov al,ah8 o, N. ^3 ?( V7 |2 N
  out EC_CMD_PORT,al
6 R  L7 N% G8 a  B" ^# z: J  ret+ P* J0 k2 T3 C; D

0 ?& V. U7 m9 m. C, Q6 O# k, o) }( Rwrite_ec_data:" O8 c8 _5 z0 d
  mov ah,al! `- v9 H7 d2 x1 m  v5 {
  call pmuWait4IBE
' A3 r( @" Y. D" D  mov al,ah
' Q5 Y4 [( v  I1 I9 M  out EC_DATA_PORT,al0 ~) P/ ~9 q. M$ X. ?7 L7 \
  ret. g( W1 ^0 z# x2 ]) e8 t
3 u3 W6 P9 u  q
read_ec_data:' y$ J. E6 z: q* F
  call pmuWait4OBF. m: F/ a8 Y; j$ h
  jcxz $+23 j; Y0 ^( s. Q& G# o% [' o' V; R
  jcxz $+23 A; b$ Q+ g1 f; W" J$ w6 G: o
  in al,EC_DATA_PORT
1 ?, m- S! C1 y1 t  ret
2 d. h7 Q" e. }6 W( v" F) \9 S* V  
! [$ m) r2 j; [pmuWait4IBE:
7 k# O5 i( a8 O* L6 M$ \7 w! o  JCXZ $+22 j5 `: D+ M) I2 x9 V
  JCXZ $+2   ' `. P7 K2 z/ }' [1 R
  IN AL,EC_CMD_PORT                 ;Read PMU status   # @  d  v8 @* y5 d
  TEST AL,2                         ;Is Input Buffer Empty?   + @. U- m3 \1 g* Z, P& o
  JNZ pmuWait4IBE                 ;Jmp if no   , q* P* P+ K$ [' f; Y
  ret) R8 O+ F  z& v1 O# B& w

9 c+ p) R$ s7 f. bpmuWait4OBF:0 X) k$ {' t7 c
  JCXZ $+2
- x7 [8 Q0 _  j  JCXZ $+2     
2 V& s- B) t" {  IN AL,EC_CMD_PORT                 ;Read PMU status   7 q, L+ P; _9 u" x' ]0 x
  TEST AL,1                         ;Is Output Buffer Full?   # O. u; S, ~6 f
  JZ pmuWait4OBF                 ;Jmp if no   
$ w! B% c! u; c. z0 x  ret: S  Y: [% z, g. K( g, M3 ?
  
/ X  N0 R9 B5 U7 u; d" \code ends  ) R/ h0 I; _6 S( d1 T" a
end start
# `- C: g( j5 H% W) D4 j, Q& i0 G2 M0 X, b
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
' G0 L; C0 W2 r3 t
6 q2 y3 w- O' G' K[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
* l- f5 H% V$ t  y; L* T
2 H, p' q1 d" Q" V3 Y- ~( }& T另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
/ u( G. Y; R# }. Y. N! g, s同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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, 2025-4-5 00:42 , Processed in 0.061347 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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