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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。: A1 X' q/ g: K/ H6 F
可惜读取不到正确值。一直读的是FEh......' G( }( m5 m# Y  g2 g/ E( c9 o
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
5 G; G$ l; Z5 O3 |. q8 q" D2 [# I4 Y2 E, p% ]( z
代码如下(masm5编译链接通过,DOS下运行):( K. [! J6 W1 Y; B, M! ]
0 W* @9 N; K0 ]/ i& }
assume cs:code,ds:data
8 {2 [3 O- f4 f5 {+ L" _9 s/ x; O1 W0 U" L  G1 Q
data segment  6 _  m) s1 P9 ]" t
        EC_CMD_PORT equ 66h         ;地址端口   
3 V$ {6 ~- O% r" T; K! @, b( N        EC_DATA_PORT equ 62h         ;数据端口   
2 e; J3 q0 |+ t5 R! a2 a        CMD_READ_EC equ 80h         ;读寄存器命令   # z2 V' Y" B9 A- `" i( H
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
" D0 D! u/ q# D1 l: c7 |data ends
$ L1 @4 u5 f8 \3 i; t7 C$ A  3 i# a! a& y2 j$ b5 e7 m
code segment
) t4 |) _; p5 L1 z- e$ S8 d7 K2 E9 Sstart:   
  K4 V/ l9 p" L& m; \" q  mov al,CMD_READ_EC   " ?  O* w. V4 T) K1 P0 w
  call write_ec_cmd                ;写80h到0x66h端口
/ {/ j' D( Z! U/ B" t7 @6 C$ c: Z" P' W  mov ax,POLLING_DATA          
3 y* O1 E1 E  n  call write_ec_data                ;写ECRAM地址到0x62h端口
4 R8 G! e1 {# Q$ |  call read_ec_data                ;从0x62h读数据
4 R" k! V) e! l" y: r) l1 m/ X: G# i3 L
  mov ax,4c00h  
( |8 ]# n5 H7 F7 c  int 21h
" \" y/ F' T# m& A7 o2 d/ o
' V" W& o% v  ~$ y; Bwrite_ec_cmd:9 y% H6 G; H( Q. L) h8 }% w  `' l
  mov ah,al
! v6 I& Z0 `1 W! e1 i1 |  call pmuWait4IBE+ z8 |0 X2 i& S1 {! \
  mov al,ah
# R" g) N- @) G# c% G. F" g  out EC_CMD_PORT,al
% b. @/ Q  p+ z8 V( h  ret. j  P! x9 [4 Q9 {7 L8 X% c# \

( _4 D: f/ a/ ~: j  pwrite_ec_data:
0 V( g1 j" N$ L1 |$ j  mov ah,al$ X' \$ b5 R; d+ y
  call pmuWait4IBE
3 S3 t! i* o3 T2 |$ n; S% _  mov al,ah5 D( q9 R- [; c( k6 H/ H7 L
  out EC_DATA_PORT,al- T6 ~' ?$ x+ j# W2 S: }
  ret3 v( E$ M0 S! s8 n9 L% }% u& D
5 |) _  D: ^5 [" ?7 S
read_ec_data:; S$ ~! f- i; s  ?' h: t# ?# r, M- P
  call pmuWait4OBF5 Q# h. s+ ]# V; u/ Q
  jcxz $+2
6 X( e( i' a8 A! k9 `% v5 ~  jcxz $+2
: S1 q$ Z) I2 x* z! s8 a  in al,EC_DATA_PORT# p+ D% l- X, o& a! M
  ret
& A- o& m$ Z5 X7 f  S  & \4 i+ _  @3 t! r% u0 f% R% |
pmuWait4IBE:& \5 ]. M! ?0 w# T& s
  JCXZ $+2
6 v- G! i# ^$ R/ d3 {4 ~  JCXZ $+2   ( R2 S9 f$ O: [+ j) H/ p  M
  IN AL,EC_CMD_PORT                 ;Read PMU status   8 r* z$ F/ h: n7 I$ }5 E
  TEST AL,2                         ;Is Input Buffer Empty?   
8 v7 h2 F6 f% q  JNZ pmuWait4IBE                 ;Jmp if no   . S7 y8 e% G& v* _
  ret
: u0 x& H( M1 ^9 B( F3 J  |6 A+ \5 u
: x$ n$ ]( Z0 o- g: OpmuWait4OBF:( R! Z  |5 ?( `+ q( \; z
  JCXZ $+27 e, g8 Q$ ]) l, }5 `- b/ j
  JCXZ $+2     * Y# e9 S2 A' ?! M
  IN AL,EC_CMD_PORT                 ;Read PMU status   % h% G- j$ A0 D6 n  z
  TEST AL,1                         ;Is Output Buffer Full?   
0 m, c0 W1 o4 v: Y; P/ Q3 d( M  JZ pmuWait4OBF                 ;Jmp if no   
8 ?0 u+ D5 C% J2 y  ret
% m! {  c9 p$ }3 ~# W% }  
$ e0 W3 I+ Y+ ?- [code ends  " D4 L& T) g# m# U' B
end start
: h7 ]7 a# K1 m7 R
& x0 N- }  I% P1 P还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
' |6 W3 m  I2 v- p. w- V" M& s2 w% k- W" V  E) Z& C5 ^
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
1 f/ Q; v5 J% c. B
/ A( f, p# k# M8 ]另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
' [3 {7 Q8 v3 t0 ]* o2 m' w; {1 |同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-1-18 20:55 , Processed in 0.059152 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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