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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
  }" F) ?6 d, n: R( P4 L可惜读取不到正确值。一直读的是FEh......" P! I4 T! g$ j4 d) h4 j( ]- b
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
* ?0 m  ]2 F9 O( z$ x
; _3 d& S8 ~* ]& F* A代码如下(masm5编译链接通过,DOS下运行):' I- J+ }+ k" t9 j5 j! x" K' v" v
# Y& i) `3 S4 T+ N) R8 Z) P
assume cs:code,ds:data
0 p' p$ t  o' m0 U7 w/ E6 b4 Z% N' N* i# b% @$ F3 L) h
data segment    D1 }5 F& m' Q0 j+ M% G
        EC_CMD_PORT equ 66h         ;地址端口   0 m/ p# ~" t6 w% y5 X$ C* p* m: z
        EC_DATA_PORT equ 62h         ;数据端口   ' a. x6 `- U2 a0 Z( z: O
        CMD_READ_EC equ 80h         ;读寄存器命令   
# u1 J, j7 ^$ \% F1 o        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   % O3 Y9 n/ _! p, N9 @2 ]
data ends2 z/ }4 h  c' S9 }
  - S8 `) m; H/ K/ w
code segment & F' p5 F; d& c0 e8 j1 @, t
start:   4 u: V3 Y$ O% `8 `; @( y
  mov al,CMD_READ_EC   & |# z. U( R6 M8 w/ X
  call write_ec_cmd                ;写80h到0x66h端口1 Z' s0 P' l% F; K) d4 t
  mov ax,POLLING_DATA           ! X9 ?& z! P* }1 ^+ f2 t8 _' ~* U
  call write_ec_data                ;写ECRAM地址到0x62h端口  ?7 l  [; ^3 C' B8 R
  call read_ec_data                ;从0x62h读数据6 Z& f% |/ F0 y8 S: L" G7 ?$ z$ o

  z! p: V4 R5 ~, ^+ C0 [+ n  mov ax,4c00h  
' V- \, _6 _3 c' J3 v7 I7 G  int 21h
" p1 z$ L5 l; ?! L8 @0 {7 Q$ n" j1 ?2 E
write_ec_cmd:' s+ @! c& u; P6 I+ L
  mov ah,al
& `) o* Q/ s% z  call pmuWait4IBE3 t2 J/ k# V8 [" {
  mov al,ah
& F. r0 C/ {: Q7 B. |, c! `  out EC_CMD_PORT,al6 m4 N: W0 P! b
  ret
8 ^0 f% H8 c9 w. C/ `3 D
3 }9 n2 t4 D* d$ R# y% N+ bwrite_ec_data:4 A. w, R& ^* O- Y
  mov ah,al
+ S0 i+ g1 \  y+ w' B  call pmuWait4IBE+ ?9 Q  _0 c5 p  }; q, H( A9 H3 u
  mov al,ah
3 f  Y! e% \) E2 A6 v, i1 q1 Q# X  out EC_DATA_PORT,al6 g7 F  W' `: P/ i" I$ G! h% c; o. T
  ret# n; a# ?9 ^2 s

# m+ Y+ H# F  V6 @$ l' Eread_ec_data:
' M+ f- m2 M9 I  call pmuWait4OBF' l8 v8 }) @, n8 v$ a6 j( I
  jcxz $+2
- r% k  m2 ?3 u- o  jcxz $+2
- V( K# P+ C$ U( u  in al,EC_DATA_PORT
5 W' X. C7 a+ g  ret1 t: h9 D  j. \
  
5 o; d4 e8 X/ Y& I1 u+ G1 ]# Y/ IpmuWait4IBE:$ }+ U, N1 O/ b0 B" u* K
  JCXZ $+2, q0 T' i' n3 v
  JCXZ $+2   
1 n+ t7 `8 n9 R, ]$ J! g( }; Y  IN AL,EC_CMD_PORT                 ;Read PMU status   
& d$ k4 `" q  F$ L  h  TEST AL,2                         ;Is Input Buffer Empty?   1 z" u4 U0 x; C5 C+ \5 |
  JNZ pmuWait4IBE                 ;Jmp if no   
  i" H) s/ \2 X3 A: X  ret
( a5 c" h: g3 C' Z3 {: \
/ C1 f: A9 S$ ^7 c) i- npmuWait4OBF:- V+ T  m7 G9 a5 C6 C0 R0 R: S4 ?
  JCXZ $+21 b3 k! j# }, H, W" N; C; _( `
  JCXZ $+2     
2 A/ i, ^& ^* H7 S5 Z  V  IN AL,EC_CMD_PORT                 ;Read PMU status   7 G! g2 F1 [1 _- }& X8 Q0 P
  TEST AL,1                         ;Is Output Buffer Full?   
7 j" d7 g: Y# J( o$ Y- H  JZ pmuWait4OBF                 ;Jmp if no   
; i. h% b9 h8 p6 J: N6 s6 ?0 A+ I  ret
- P# \8 T7 @! S+ r# Z6 m" G6 b- q  4 H/ [, U& ?2 A9 H" D* N$ O- B
code ends  8 j4 @* T& r8 S7 D# d9 _, p
end start
. U  |+ Z0 B, H/ v+ a2 y3 }: C! n2 x0 `
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。  w; K* D2 j) H+ z
  k) \4 k5 w, d) z3 N
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~  p/ O' P4 f& m2 i2 O# I( H
$ `1 x  o8 j( W' }
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。$ i; \7 z( o* t* Z
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-19 21:57 , Processed in 3.112811 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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