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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。) r1 _. Q  T  p7 g
可惜读取不到正确值。一直读的是FEh......
" I  B! \' q4 Z希望各位大神能帮忙看看,指点一二。小弟先谢过了。
0 g. _' g5 T7 W% T; X  `6 z' |5 ~* o; _
代码如下(masm5编译链接通过,DOS下运行):
# k/ P' O; _% u( A7 }, }4 z& L4 P' @5 h7 K$ y0 a* K
assume cs:code,ds:data
7 i) Q% ~2 v/ T9 w2 \
4 u2 `& P) r% ^0 `9 g* ydata segment  / N: W* {; Y+ ]% H/ k
        EC_CMD_PORT equ 66h         ;地址端口   , C7 b  d. A! ~7 ^' Y  @% R! U
        EC_DATA_PORT equ 62h         ;数据端口   
0 {- `2 r! k4 x  W        CMD_READ_EC equ 80h         ;读寄存器命令   
) }& Y: T1 y& o* ]' i        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   # t' V# @+ ]: b5 y3 A* O. |
data ends
; U9 P0 ~5 ~8 f; q# W& t% D9 h  
( x% c5 [, d8 x8 vcode segment
$ H0 Q5 B% Y$ ystart:   ; u, Q  R6 f: ^5 d+ s  Z7 V+ ]
  mov al,CMD_READ_EC   
7 U/ L8 n# t6 M, X8 u- r# H  call write_ec_cmd                ;写80h到0x66h端口
) S1 M# ~* ^4 V$ m" T4 D4 {$ ?  mov ax,POLLING_DATA           ( y" t, }# p9 h1 W/ ~
  call write_ec_data                ;写ECRAM地址到0x62h端口$ b6 B/ W* m3 C9 P) k( o7 O" f
  call read_ec_data                ;从0x62h读数据- S- S8 T$ A) ?8 [

) q* J9 p/ e9 C3 v# w  mov ax,4c00h  . \) f" e8 f1 ]: h* ~
  int 21h( n7 ~% r' y# F( \5 ~# v

* q8 O4 ^# ?+ Xwrite_ec_cmd:" l6 Y, \! }1 b% i; ], ~0 A
  mov ah,al& D0 v9 g4 C4 m, K4 v! @0 S. U
  call pmuWait4IBE
3 m3 W. J' ]5 V( `) m2 O0 n7 g( }6 h  mov al,ah; n: h9 I" c& Y7 t
  out EC_CMD_PORT,al
  x+ J2 ^! M8 ^" n5 n1 p  ret' b8 i: K; q& Y' X8 j

" _; ~) q5 \+ |4 H" z9 r0 A. B+ i4 Wwrite_ec_data:2 U: x/ R( m. d* Q
  mov ah,al$ W$ r5 O+ {$ @+ y4 R1 b4 G
  call pmuWait4IBE' K3 w8 Z* L" l7 j9 D* u
  mov al,ah; }9 p- j2 w+ }) S, s9 _. M/ d
  out EC_DATA_PORT,al# S5 Y( H1 X% c7 C7 L6 _/ {
  ret
5 T3 U  S; t  e9 G
: j5 K" b' c, e* _/ x1 E3 p! d( \read_ec_data:4 c: H8 V3 V) f) M9 I4 o
  call pmuWait4OBF( l* Z) {( H7 I$ n1 [
  jcxz $+2
; G" A$ q8 z; W+ t( T+ |: M" o  jcxz $+2
! y  b# C5 l' B* o  in al,EC_DATA_PORT8 P6 g6 V* J  w" {! C! v+ Q
  ret* V% r( L: T( N. P' ^
  
' j8 R) j$ b$ l) A( VpmuWait4IBE:
/ k6 b( s4 A5 E/ k/ G  JCXZ $+2
3 o# i5 P  d+ x" f  JCXZ $+2   
5 T2 X3 I8 ~/ l& E  IN AL,EC_CMD_PORT                 ;Read PMU status   
5 J. [6 C1 t+ C- v# ]& l7 j6 o3 I7 v  TEST AL,2                         ;Is Input Buffer Empty?   $ @1 z; _- x6 k) ^1 U
  JNZ pmuWait4IBE                 ;Jmp if no   8 v! d' L! m6 [5 |5 e5 j
  ret
) B! K& t$ E4 v8 a, K; I
6 j7 P7 K* e& L, NpmuWait4OBF:2 U; V% N0 ]8 r, }. N; V
  JCXZ $+2; h. J% `  \0 v. v1 b( g9 T
  JCXZ $+2     ; }* P% S& q) I( H. c' z6 |/ I0 D
  IN AL,EC_CMD_PORT                 ;Read PMU status   
4 I5 x! z2 p3 F; X2 O  TEST AL,1                         ;Is Output Buffer Full?   ) W9 I9 c- k  `) w# O
  JZ pmuWait4OBF                 ;Jmp if no   
3 z+ J% o' G2 F' Z9 ^! n6 o3 _  ret
1 C$ P$ a3 x0 Z' w9 }: N) M  
8 e, N& p7 J8 O+ Lcode ends  / z2 h$ `- y. |$ Y; ]" |6 D2 F0 O
end start: C0 o! E9 U. ?1 _* {

. Z' ~' V' a6 e( D; y4 I- B还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。0 v  R- G& R# P; N+ q1 e
+ f6 Y' ?) [7 y# f% R# u0 y
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~9 [0 A+ e( x+ J# B. A! y8 |

/ e( k  F% @  U, S另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。  E4 ~7 o! H2 |: ^" m7 m  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-5-25 13:18 , Processed in 0.819794 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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