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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。, F: T+ b7 X- }& k
可惜读取不到正确值。一直读的是FEh......
9 m5 v! T& `$ H8 a* T5 h) D3 t希望各位大神能帮忙看看,指点一二。小弟先谢过了。
6 l4 ]5 G" Q& ?6 i$ V6 H9 h. ^( Q, V4 w
代码如下(masm5编译链接通过,DOS下运行):/ Z% @6 ^) ]( b1 G" O
5 J2 G  s8 l" O3 }0 n. ~- {
assume cs:code,ds:data5 c0 z- x7 b5 H( j: w( \+ ^
5 Y5 `6 V. Y# x$ k2 ~4 B* T
data segment  
- y3 l' G  e, r3 x% S: \        EC_CMD_PORT equ 66h         ;地址端口   0 G% Z% H. X3 N  j9 @
        EC_DATA_PORT equ 62h         ;数据端口   % z7 |( y$ w3 g" f9 v- Y
        CMD_READ_EC equ 80h         ;读寄存器命令   ( L  ^/ p0 \7 s+ ]
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
7 U: Y! `' @' Kdata ends+ d* }" E; c2 {% {
  " Q! V3 S1 g, t6 p$ }0 Q
code segment " ]2 s7 T. u1 y+ Q" o2 W+ l6 u7 J+ ?
start:   
( {9 z. F9 v5 L! W9 \  mov al,CMD_READ_EC   * a4 {- G+ L1 d
  call write_ec_cmd                ;写80h到0x66h端口
! a; D$ N& e& m& c6 q  mov ax,POLLING_DATA          
* Q/ `) n  N$ v4 P( K  call write_ec_data                ;写ECRAM地址到0x62h端口
8 V0 {4 [! [9 }* t  call read_ec_data                ;从0x62h读数据" {. t% F' ]" i. i- G( d2 H5 q5 P

% m. S6 P# D0 }- x/ I* V  a1 y  mov ax,4c00h  5 H6 p/ S/ \1 |, j
  int 21h. F( `6 V% N1 m7 ]$ {5 e
. c+ b$ X: p$ s$ P; W. n% I
write_ec_cmd:
8 x. n: t. m, z, W, Y  mov ah,al8 l# I' x( N6 H/ y+ p' w8 ?
  call pmuWait4IBE
8 @& j$ a2 o& ]' B  s- ~  mov al,ah& J4 f7 D0 {0 P; H
  out EC_CMD_PORT,al7 b6 I( }2 y& M( P9 p
  ret. V# i) D1 [4 @# s- H* V

, z0 P" v# X* E+ Owrite_ec_data:4 i) s/ q2 S0 n
  mov ah,al
& p( c9 M8 D" d  |( K6 S. B  call pmuWait4IBE
$ L. d: L) u0 U& m% y: O2 r  mov al,ah$ \" L' j4 Y( I! j
  out EC_DATA_PORT,al
8 i  _* v0 l$ ~) |9 @& q5 [  ret
7 c/ g9 `3 {9 ^4 I* g9 _1 Y! E& L9 X0 A2 W& d8 e$ }4 `
read_ec_data:0 }/ T6 ?$ y; a
  call pmuWait4OBF
/ h- w+ Q& l; L* T0 n" {' D' a! c  jcxz $+24 Z: h1 k9 S( r
  jcxz $+2+ U( [" ^* {- q8 ?; j$ z9 d
  in al,EC_DATA_PORT
4 Y* T3 H1 `0 p; ]  ret$ q0 n& j, q0 R# q
  
  F! y# d4 {; zpmuWait4IBE:  L" X: G. t# Z" V+ B
  JCXZ $+2
, z$ a) Q/ D& _2 f  JCXZ $+2   1 n: ~8 E% [' E5 y' c
  IN AL,EC_CMD_PORT                 ;Read PMU status   - f, X* \! |+ x7 z% P4 }' G  \
  TEST AL,2                         ;Is Input Buffer Empty?   - d0 d( e. n* t% ?* }0 y, T
  JNZ pmuWait4IBE                 ;Jmp if no   ( l2 @- |8 D. }% w- I) W
  ret' W5 @/ k2 a: d1 ~9 J5 v8 ?- h

3 j+ @) M; v, j4 N& DpmuWait4OBF:
% ^. n1 e+ T' J' C/ D, [  JCXZ $+2- I1 X2 |4 d1 ]' O
  JCXZ $+2     
: L  }+ t# S# N6 [) m  IN AL,EC_CMD_PORT                 ;Read PMU status   6 j; }) B' Q" L9 |0 G2 x4 W
  TEST AL,1                         ;Is Output Buffer Full?   
. }3 L0 A" d) q, o  JZ pmuWait4OBF                 ;Jmp if no   
+ J, M8 N' {/ O5 Z. Y5 ~6 u, c' Y- u  ret7 j# w) l6 Q: k
  
: X5 N" g# O. T& [' Q9 b0 J6 Wcode ends  8 d- Q- B3 K5 y# a6 T
end start; ^+ c6 U( U: A* G7 F% i

' O0 F% [! t4 d还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
7 m& _8 v* T( Y8 G' F
+ t, s$ _) R' M8 Q' b$ G; E2 ][ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
( a3 u5 M/ c3 ]+ l4 C
. ^( T1 M1 _$ g* u0 e7 O另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。0 q( D2 @6 I* D* }
同期待高人答疑吧。
回复

使用道具 举报

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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