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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。4 E' O' D6 R, K8 ?, g( i
可惜读取不到正确值。一直读的是FEh......
7 [& E1 Q) {# }8 \* d; H希望各位大神能帮忙看看,指点一二。小弟先谢过了。
2 \9 R" s$ j% a5 c6 Z4 E% ~3 i: X  ?* f, C
代码如下(masm5编译链接通过,DOS下运行):7 t$ S; A1 z' r) g
7 k2 f' N0 r$ r  p7 o2 D( F
assume cs:code,ds:data
! K3 g& P  H3 R& v/ ^( |8 p' U6 b; Y" k( n5 N
data segment  9 y3 s+ D) J, |) k- r
        EC_CMD_PORT equ 66h         ;地址端口   0 a6 o  @" i0 g# k* n* u2 O7 I2 P
        EC_DATA_PORT equ 62h         ;数据端口     |7 s1 z0 f  ^4 |1 i0 g2 s
        CMD_READ_EC equ 80h         ;读寄存器命令   
1 @2 B) |  x. B( e9 S: P        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
7 @* I+ R" {& U' Odata ends5 b$ U& q, a# l. ~, G7 Z
  
" _* C, d& b$ e& \) Ccode segment
$ x- a- E' z4 U- bstart:   
3 L3 ^3 n' k' |) \. g( |& Y$ K  mov al,CMD_READ_EC   
( a9 z, G! D. G+ n  call write_ec_cmd                ;写80h到0x66h端口% i5 g. w4 ]& P+ e8 C
  mov ax,POLLING_DATA          
- W3 A( p6 d* A9 t  call write_ec_data                ;写ECRAM地址到0x62h端口
) p( k# z" C8 Z8 d  call read_ec_data                ;从0x62h读数据5 b3 Y9 c+ T& I: Q
& O- X; f1 N- o6 J3 b, I
  mov ax,4c00h  
/ h. l5 x  {# ?+ i) l; W9 w  int 21h
9 n, Z6 W! H+ O3 O! h! @4 H
- t3 n, C* q& j6 J, I# Xwrite_ec_cmd:
6 m& }: q" j) U$ V$ a. I  mov ah,al1 X1 P  t% c* I3 S! h3 _$ W! [
  call pmuWait4IBE
/ _8 F9 B( q# b# a  mov al,ah) ~6 i( ]+ `( m* e; r% C. j# H
  out EC_CMD_PORT,al
8 j0 p$ p) l# S. q. h7 ~7 P, `3 q, E  ret
( R" _6 n) I4 k- Y( g, [0 \
/ @# I4 M; c3 w+ @1 @write_ec_data:2 P8 W+ `4 a7 `2 q: l  P
  mov ah,al
0 B0 f* Z# ?2 |, S  call pmuWait4IBE
4 L1 R: K# z) y! T  mov al,ah$ b1 d& M# m  [; j
  out EC_DATA_PORT,al, y  A2 c7 W5 n* A; ^
  ret6 R+ c6 ~' ^" B, H
4 Z5 D0 l: `2 ~/ K- ]
read_ec_data:7 Q( ]7 s' g8 Q0 D7 V1 P. m
  call pmuWait4OBF
) Z9 t, e, w3 U' K2 R  jcxz $+2# g9 f/ j6 g$ d7 n* G4 \
  jcxz $+2
0 M! W0 w3 f( H$ K# q2 I: O  in al,EC_DATA_PORT
5 ]' |! ^( y2 y$ g2 x  ret" L* r1 j! [% g9 L' j3 S, U; l
  
) i- ?) B- _& R0 RpmuWait4IBE:, G: }6 U" Y$ }- ?4 u3 I8 M. v9 _
  JCXZ $+2
$ Z7 j3 y5 Z+ s! f1 g9 ^  JCXZ $+2   : {9 T  G% E& c% u" `
  IN AL,EC_CMD_PORT                 ;Read PMU status   
& O- j, h& @1 a- m0 w/ G% f  TEST AL,2                         ;Is Input Buffer Empty?   3 Y) y+ y$ D) q0 w- S) N
  JNZ pmuWait4IBE                 ;Jmp if no   8 H( w& K. s. m- g8 O
  ret
) z' B( M9 v% U6 [- r9 K
6 n4 T; L/ V, K! M0 kpmuWait4OBF:
% w6 a* A. K5 w+ w: m' h: ?  JCXZ $+2
3 t) r6 A  d  [9 k  JCXZ $+2     1 I0 F$ f% x8 ~: G
  IN AL,EC_CMD_PORT                 ;Read PMU status   
4 d8 ?% j6 \0 b/ Y2 F6 |  X4 j  TEST AL,1                         ;Is Output Buffer Full?   " l: {( a7 h3 L0 h& d
  JZ pmuWait4OBF                 ;Jmp if no   4 y+ O; [0 h$ x! I
  ret- v$ E5 Q& B, o7 y, S  ]) G
  ) F# o4 @  G2 m9 N/ ]
code ends  " Q6 L: x& j1 |1 W* Z
end start- G9 M. Z: c9 n" \6 w
+ L- b' I5 c8 ?% M
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
+ B( S/ w+ v5 \$ n" I9 d0 l4 M% l
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
4 {6 O, V  ~* w8 O7 n: L0 v- M8 R9 X1 ]0 t8 g4 i( J
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。; m7 p  n: u; y2 X
同期待高人答疑吧。
回复

使用道具 举报

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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