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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。3 z4 o" G' I: n
可惜读取不到正确值。一直读的是FEh......
. u! ]0 f$ z8 p/ ?; q) o希望各位大神能帮忙看看,指点一二。小弟先谢过了。7 {( g# f" l! r  ~0 S- I
. G1 q6 T3 t& d
代码如下(masm5编译链接通过,DOS下运行):1 ~+ y! t+ Y5 K( x, z

4 E7 f" p! F! I* ^, q6 B, Y, Jassume cs:code,ds:data
3 i; p( |5 q  o; Y$ M/ b% c" m7 C& h5 t7 B& J0 t
data segment  7 A+ d, n, N0 J
        EC_CMD_PORT equ 66h         ;地址端口   % h* ]9 h. M; s7 W
        EC_DATA_PORT equ 62h         ;数据端口   8 Y: c1 J% W8 o8 Z5 I- R7 f
        CMD_READ_EC equ 80h         ;读寄存器命令   1 z) q7 D2 Q  w
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
6 ^0 v- j% a, Adata ends
2 r/ ?- x6 t( Z7 S7 _( q6 k    d6 Q1 ~5 T$ W7 t; N7 U0 A& m
code segment
& `" J+ j1 T- V5 p) r( Lstart:   $ n4 H7 d  d1 Y* a# S
  mov al,CMD_READ_EC   
- k/ X% u  t7 n0 B! B$ }( ]" }  call write_ec_cmd                ;写80h到0x66h端口
+ W9 p# O- q4 F4 y6 U# T( x# I  mov ax,POLLING_DATA          
& Y7 \, H- v! G6 F) @- Y% z. \! s  call write_ec_data                ;写ECRAM地址到0x62h端口( T* D( `2 W' Y
  call read_ec_data                ;从0x62h读数据$ b# F8 F0 w% ?# d' C4 t3 a2 P
6 _- l5 K) I# A9 t# S9 p
  mov ax,4c00h  
7 b' J* |4 _2 u" ^" W  int 21h. m& p( F" g' ^% h/ m

5 T3 i7 E" o9 o, Swrite_ec_cmd:% L1 X, a$ N/ `+ b' d5 h
  mov ah,al
* |; s: {) v5 l# v" f  call pmuWait4IBE( b) p; r. J+ X
  mov al,ah  L  A1 g/ p8 O  `& y* D* {' a; {2 }
  out EC_CMD_PORT,al: l3 k7 J2 C2 A
  ret" J2 F9 i0 ~/ t% `3 v
; l" t  t8 H7 a: \
write_ec_data:
8 A$ s8 |% V, o0 j8 m5 W, ?7 P/ Y  mov ah,al5 C  H4 v1 G( I) H* b9 r! }% _
  call pmuWait4IBE
/ I7 d' B6 O. c, p' B/ b  mov al,ah
9 |( X, t4 g) J- b) J+ p  out EC_DATA_PORT,al
# R6 {8 L# K, S, p2 I7 s$ N! K  ret! Z5 v3 ^( I6 |( z

$ {6 V8 |% h& J, ^) ~5 Rread_ec_data:- S4 L) W% b; K' x9 H2 c
  call pmuWait4OBF
7 [. k( g; c* @. s  jcxz $+23 n+ L4 Q6 r1 Q8 `3 k
  jcxz $+2( v8 b" u, b: v0 N+ S
  in al,EC_DATA_PORT4 x/ P" |; |$ b' ^  x8 w! S
  ret5 B/ c+ p" B/ g
  
  E# X$ S; t6 ^: e3 wpmuWait4IBE:
/ x) p2 r/ T9 O  JCXZ $+2
5 Y( u7 v; t: p8 R: x  JCXZ $+2   ( F) n5 M/ r$ ?) P1 w0 y( a
  IN AL,EC_CMD_PORT                 ;Read PMU status   0 E6 O, P8 ]' t' s' ]1 ], k
  TEST AL,2                         ;Is Input Buffer Empty?   
0 s6 [* b* X# f  JNZ pmuWait4IBE                 ;Jmp if no   
) [* ?, n' A0 v( {. w  ret" B# D: q9 l' f+ C
* F9 P/ \5 Z8 y  y5 w; g
pmuWait4OBF:
. }( j" p$ @, J3 Z) ^% w  JCXZ $+29 Z! t( p& }4 `4 y9 c- d
  JCXZ $+2     
  x, ~9 L$ ?0 H* A" [  IN AL,EC_CMD_PORT                 ;Read PMU status   6 G2 J* m3 v- U
  TEST AL,1                         ;Is Output Buffer Full?   & f3 R6 T, G* l5 ]: I! c
  JZ pmuWait4OBF                 ;Jmp if no   
# L, d7 M* y' O5 A  ret6 ^! _$ _7 h0 A8 P; `
  
& V. I4 b- D  _code ends  : a, l" J: T3 E: \
end start7 q! T/ h4 m+ P1 o  w: V# X- H. C0 v

" u% T( a( E5 M. z& Y还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。1 D8 e6 N) X$ W

; y4 i8 O5 m& i, ^/ n[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~; u( a9 a, L% i- o, T$ _2 S; m' E

# `8 h5 @8 I% d; U" U0 ^4 B9 ~( h另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
4 l) o/ U7 Y, ]- p同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-3-5 12:50 , Processed in 0.057047 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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