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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
, q8 Q& k$ y8 E3 l% X可惜读取不到正确值。一直读的是FEh......
3 j* X4 N1 D4 G6 m4 n7 ^  n希望各位大神能帮忙看看,指点一二。小弟先谢过了。# Y" {5 L4 N8 Y3 M1 L

% q! A1 F( U$ ~8 P0 {8 R# @代码如下(masm5编译链接通过,DOS下运行):
  a8 m  K  ?+ N7 W; Q: R4 J
+ ~8 @0 q! A) u! ^$ T0 N) Rassume cs:code,ds:data
) a3 o; h5 C* u% e" l/ f3 q3 x, J* N
data segment  
, E' M; K7 f$ A! X- X        EC_CMD_PORT equ 66h         ;地址端口   ) |! ~2 d+ G9 t" w: d
        EC_DATA_PORT equ 62h         ;数据端口   
- N, j" T  Y+ T  Q        CMD_READ_EC equ 80h         ;读寄存器命令   ' i* Z, C% y- g$ K/ B% h, m0 ?9 }
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   0 v! W2 u5 x3 V
data ends
* \1 {0 g2 o* W( P  
  ?* w5 e/ U% q8 M2 t+ }code segment ' v2 ~$ J2 k% T' D+ r+ }% v' Z* A
start:   
1 j7 l5 {6 Y( ^3 t7 K  mov al,CMD_READ_EC   
2 M4 x' C7 m' \0 Z0 d) I. {  call write_ec_cmd                ;写80h到0x66h端口2 x0 m, j( Z: O3 @( Q6 \9 O
  mov ax,POLLING_DATA           ' o! a; Q/ U: ]# Q0 {( p
  call write_ec_data                ;写ECRAM地址到0x62h端口
) h( Q' v% h0 \; f6 }* a  call read_ec_data                ;从0x62h读数据$ x/ P- {7 J: [
" }. L! e6 s  h9 C7 N/ W
  mov ax,4c00h  $ X6 w5 P0 J1 Z1 w3 ~  v3 R
  int 21h
( u; o$ u( E+ [  R/ {. ]# y
9 k, O: B5 W2 U/ C" G! q7 e3 h: Twrite_ec_cmd:; e) E6 v7 W$ b- y
  mov ah,al
: l/ F4 h3 m, L2 }, X) e- j7 \! M  call pmuWait4IBE
5 t6 G- X+ ^9 n2 ~, n  mov al,ah
- _* ]: H8 J, [% G$ g  out EC_CMD_PORT,al' g" s' P& G. @! a1 H1 O2 a
  ret; O. N! [. Q4 H$ q. Q
& ^: ]0 o1 r2 {9 s+ z
write_ec_data:5 H6 I. ?  V# D4 N4 O. M5 x. o: m
  mov ah,al
* g+ @, M# \- B9 Y( u. F  call pmuWait4IBE
* P# t# g3 a' C) j  `1 U  mov al,ah9 A9 o. _( j6 ]& A: `# B. N
  out EC_DATA_PORT,al2 ?+ P& p7 @# v" U( G8 A) k1 ?# B
  ret
* u5 N0 d* c& N, `
9 w6 O. f8 O  L& b( V  a  a2 [! M4 ]read_ec_data:
7 ^/ b5 w* A( G$ B' W% U  call pmuWait4OBF
( n" x3 }* f$ j- j  jcxz $+2( W) L7 ]6 u9 H9 K
  jcxz $+29 R; k$ Z- D9 {" i2 x
  in al,EC_DATA_PORT
% `3 k0 ]8 S9 P& T, M) N  ret0 v3 Y! R: u$ B
  
' W$ E) M3 V. G5 _4 |pmuWait4IBE:
1 s7 W$ M( h6 W/ i  JCXZ $+28 n  J( R8 ^1 \- }) O
  JCXZ $+2   
1 l$ G, A3 ]& m- f5 M( I2 R- B5 O  IN AL,EC_CMD_PORT                 ;Read PMU status   
# ~% i' `  j, I; G5 n% q3 r  TEST AL,2                         ;Is Input Buffer Empty?   4 L. p; K) q/ i
  JNZ pmuWait4IBE                 ;Jmp if no   / k' Q6 ]$ {0 X% b
  ret& y# z7 ~' N8 [' |- m1 E: {
2 w3 u% T# s0 z  x: A* R
pmuWait4OBF:
  d3 f# V3 V+ x: N* g. w' f  JCXZ $+2/ h( j, C/ l" z" V4 i: P
  JCXZ $+2     
; R# M% ~" \& [  IN AL,EC_CMD_PORT                 ;Read PMU status   
/ Z* E0 |* H  B; O! c9 }  TEST AL,1                         ;Is Output Buffer Full?   6 c1 l9 h5 {. A' A6 p3 v
  JZ pmuWait4OBF                 ;Jmp if no   . Q* b6 [# l  u$ q
  ret
: N5 E9 K& L6 U6 l& U8 `# N0 m  + \# ]' s( K3 }7 U
code ends  6 Z& Y. Y) Z' U5 B. B1 P
end start. X$ e' Y  k% W" m; {% x: ^

; b1 F/ a# q0 `* u- m8 u还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。1 R0 `& m+ A# t/ ]5 J

# \) I6 G. N3 ]1 w[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
& X& j+ q* _5 b, a2 F( ^2 |) Q% {, c
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
# `* n+ H- D4 L同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-9-1 17:00 , Processed in 0.246670 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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