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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。6 p2 x2 w! o$ {# b9 }
可惜读取不到正确值。一直读的是FEh......
* r; H" D$ X7 J% o9 {+ g; u7 H' }希望各位大神能帮忙看看,指点一二。小弟先谢过了。+ G# r9 K- g+ B+ k& X

! c* s* O7 ~% ?+ O9 p% c, A代码如下(masm5编译链接通过,DOS下运行):3 s+ C# s; N1 ^! v
( y; O: B9 G5 D8 v" v7 h# a
assume cs:code,ds:data
& B8 @' T" m! M  Q# u; p  r: L: [
6 L* q# F' U1 Z$ d( g# ^1 {6 Mdata segment  ( p# s: e; L1 @# P6 Q* ?
        EC_CMD_PORT equ 66h         ;地址端口   
$ Z4 p) k7 Z, c        EC_DATA_PORT equ 62h         ;数据端口   ( g' _3 `) L4 _- {9 T" I( y9 w1 @
        CMD_READ_EC equ 80h         ;读寄存器命令   4 X! G0 Y; u# t  a- P
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   & {& r5 n* w+ I9 X* d
data ends5 b# b: V4 U8 d7 ?# K' V
  
( O; j8 K0 ~* [1 X2 lcode segment
% o$ y! {% I8 T8 @9 r7 c# g4 v( Ustart:   
6 |2 X0 C) u. ]' H* \% m9 l  mov al,CMD_READ_EC   
" L7 W6 j) Y* l  call write_ec_cmd                ;写80h到0x66h端口
6 k+ y6 Z. k) d" |  {  mov ax,POLLING_DATA          
2 V9 v' P' X# Q/ m9 u, ]  call write_ec_data                ;写ECRAM地址到0x62h端口* G* m' s2 k: h
  call read_ec_data                ;从0x62h读数据# k% Z" t0 |. s4 T6 l. g

* W4 C0 w3 e5 t. S8 o  mov ax,4c00h  
% M. u; l" x" g, y% R7 n$ ?  int 21h+ @( w: ?$ _" ^4 ^

% W2 i, [* Z6 f2 q% uwrite_ec_cmd:& }! q+ z3 `9 \0 v; I' A1 _
  mov ah,al- k9 S; _2 [0 i7 n3 A7 T
  call pmuWait4IBE
( [: O! i2 h9 j: |# I: p  mov al,ah
! [/ p/ Y5 O" R4 L9 f  out EC_CMD_PORT,al. t0 v- W* V% D9 b* D; H3 D+ T2 A* c
  ret1 n; ]; D( U  g) a& S

+ `& `. G# o: I+ j' J- c+ Zwrite_ec_data:
% Q% ?# T5 `5 W" I; {  mov ah,al
6 w, h" d. C  ^+ Q$ j- z  call pmuWait4IBE
" l; g( ~4 J$ r  mov al,ah
9 o* ?5 j% Y1 t# b. G  out EC_DATA_PORT,al
8 m; d  ]- L" P$ d0 V- m  ret/ q0 O. D  Z6 X1 \# z  d" |+ x

6 w5 \; s7 o+ T) q; Z! F9 uread_ec_data:
; n: S5 o& D& D) w% v- J  x  call pmuWait4OBF& ?9 E) A$ p) z& h5 R% }
  jcxz $+2
8 W3 o( A. X. C7 Z. r  W2 _) p, u  jcxz $+2
' i5 n7 o, q. y9 _  in al,EC_DATA_PORT
; K% e6 W; d0 p/ C  ret9 i* X# {0 Z" M+ v, A, U: h4 w5 ~
  
# Q8 u  ]! z2 [9 O1 D5 epmuWait4IBE:; y0 J* {/ A2 L$ k4 K  b
  JCXZ $+2
5 R6 a0 o5 L$ `  JCXZ $+2   4 w. G4 l8 j& Q2 |/ S
  IN AL,EC_CMD_PORT                 ;Read PMU status   # _  Y$ ]* k- I& ~) I- i
  TEST AL,2                         ;Is Input Buffer Empty?   
( s+ ]# F. s( ^" p2 k5 n. y- y  JNZ pmuWait4IBE                 ;Jmp if no   
6 b& ?5 I' d+ Y  J) i/ Q  ret' |+ [# W( Z3 a( Q. j

7 n3 t1 A7 j- }5 h* G- b& b9 ^pmuWait4OBF:, S- J8 x, t. _: F) E$ m; P" d
  JCXZ $+2
& P$ [) _7 K1 C9 g6 }* A  JCXZ $+2     
; C: ~* @6 U) ~1 X. b  IN AL,EC_CMD_PORT                 ;Read PMU status   7 T6 C5 @5 O! k/ U( }# s
  TEST AL,1                         ;Is Output Buffer Full?   
" k" t- y+ k0 I9 a; p1 T" c  JZ pmuWait4OBF                 ;Jmp if no   
0 z$ P# K8 G: _, `  \5 A  ret1 b% b$ }( w8 W# f
  
" V7 m# @0 G  o5 Z3 mcode ends  
3 _8 W6 `* r  _* Kend start# }1 @3 H; k: W9 C: k, ^

4 `1 E3 x5 A- h还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。1 r( _! j# C8 M* s' E1 Z$ n! R
4 H0 o" b$ o% P$ E
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~# z1 w& J9 W0 x

# k) z" F$ b# K. }; F另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
% `" y: H* Z) d) t; ~' `同期待高人答疑吧。
回复

使用道具 举报

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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