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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
+ _( C8 x6 j- S1 ?! B: p可惜读取不到正确值。一直读的是FEh......, S$ U, H" l2 d5 B# m$ q8 ?
希望各位大神能帮忙看看,指点一二。小弟先谢过了。- z, e8 m. ?' _% y/ ~! o6 V" H, Q6 C

5 _$ G3 u5 G" C" n4 r代码如下(masm5编译链接通过,DOS下运行):8 x- k2 e% f$ E5 o0 @* F& u
( j* x& A: ~8 d# i# I' ?
assume cs:code,ds:data
8 O4 A, F$ R4 a2 B% A5 L( M$ j
: p, |5 t* X7 N: _: f* xdata segment  * X, V. o, e* Q" X  s' n
        EC_CMD_PORT equ 66h         ;地址端口   / o) D3 J5 }% \( \
        EC_DATA_PORT equ 62h         ;数据端口   
2 h4 U( _: `; ?: a. q! P  e' n        CMD_READ_EC equ 80h         ;读寄存器命令   % o% a; {4 O* y" Q) L9 L
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
6 m  _& O: k, r: d9 M6 [data ends* x' d1 n  D; `# V8 Z6 h; |2 _
  
- c' ?, A" Y" h5 fcode segment ( B* }* Q& w" p" q5 |/ F2 ~
start:   
8 z% J( \/ U, D5 J( D' C  [  mov al,CMD_READ_EC   
7 E/ M6 p1 ~7 U3 ~# W  call write_ec_cmd                ;写80h到0x66h端口5 G" L. i( g+ ?3 |
  mov ax,POLLING_DATA          
/ Y! G9 R" @4 C7 S/ }  call write_ec_data                ;写ECRAM地址到0x62h端口2 k: D% j. W1 Z# T  ~) T
  call read_ec_data                ;从0x62h读数据
# X: P0 w0 ^+ u. x4 f
# l* G, L; T2 h# O: T  mov ax,4c00h  % ]# ]5 H1 E; @# U7 O5 x3 u. b
  int 21h: R6 w4 t! w  H: o! l" Z

7 K* X  F9 o+ iwrite_ec_cmd:
/ M& S9 k1 i) ]+ r- `) f* Y& Z  mov ah,al
% F$ K2 ~) `" V5 y2 \  call pmuWait4IBE6 l( q/ W) l& y9 E( j
  mov al,ah2 M9 Z+ y+ J) B* i; F& T
  out EC_CMD_PORT,al
  h" a7 u9 c" X$ K, f& ?0 X  ret' h: W' d1 D7 N9 \5 q
2 ^+ \- {% l0 o
write_ec_data:' `5 I9 I! s8 r8 |
  mov ah,al
; w4 N7 I0 a) d0 `0 o8 |1 x9 `7 W: Z/ q  call pmuWait4IBE
6 F6 E$ j& Z8 N( t  i  mov al,ah
5 e7 a. F' K; u; c6 H  out EC_DATA_PORT,al
! e$ A7 A* T2 A& o7 S3 I/ y; D  ret
6 q+ g4 u; z, R8 v* N" A
6 G6 F  S* c/ Xread_ec_data:3 K7 S: U2 a! y" H3 f; p# ^$ l
  call pmuWait4OBF  _: c1 i: }1 O# Y
  jcxz $+2
& X' K2 |6 n7 Q. c4 b  r  jcxz $+2
% U7 y: R, P3 q7 V& w) S! A0 n; v' d  in al,EC_DATA_PORT
, d# u) x& k+ U, Z; Y  ret
- z& y, B2 u/ f5 ~  
0 R3 P& j4 s: }* qpmuWait4IBE:
  \; l8 s# J, e( \5 `7 y) R1 B" @  JCXZ $+28 |2 y9 j) v7 X8 P9 k4 s9 @* }
  JCXZ $+2   - C+ Q7 k% A6 Z% [" B  {( I
  IN AL,EC_CMD_PORT                 ;Read PMU status   
; [& J7 v" t% A5 z. h( K+ A  TEST AL,2                         ;Is Input Buffer Empty?   # k) D8 x4 B$ k1 ?) e8 O- F/ @5 @! w, T
  JNZ pmuWait4IBE                 ;Jmp if no   / S- U8 i* o8 O9 P
  ret
: F$ Z$ h9 E" l. |& D
4 G/ m9 _8 l- k. \( F+ F; rpmuWait4OBF:( H5 U7 B( S& [9 r
  JCXZ $+2
0 w# |3 o- N# t: S$ g9 x$ T+ R; e  JCXZ $+2     
- Y' ^& U" C4 i# ?! U0 S  IN AL,EC_CMD_PORT                 ;Read PMU status   - V3 G5 H* h9 K6 e  t8 ]; d9 ]- c" x, S
  TEST AL,1                         ;Is Output Buffer Full?   1 ?& n* w% J! i$ r
  JZ pmuWait4OBF                 ;Jmp if no     i' A8 ?  @8 ~) C
  ret
! R# c& [- I# ^* ~  N/ I3 D  
0 B! X( i; h0 n4 M+ K3 y5 mcode ends  
. ]3 S- K2 D5 wend start/ M  C  U$ z+ B" a

$ J; E6 `; p5 l$ F还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。, v0 c3 y! Y4 _6 O- C, K
8 Z; S% Q9 E! j
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
6 n( m7 u, z. p( ]
& Q; `+ \- q# m# D' d9 l( a另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
* n8 c6 U. f5 l( F同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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, 2024-11-13 14:25 , Processed in 0.091313 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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