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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
0 s# W0 s; A" E! S/ X; ~7 b可惜读取不到正确值。一直读的是FEh......( D2 x% P1 S$ S8 v
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
' m* R6 i0 }, ~$ }, j+ w
3 O6 \# @( g( n, D  \代码如下(masm5编译链接通过,DOS下运行):7 [# O% ^1 c& w0 D+ q
: n: S" l& K/ T9 e# m& n
assume cs:code,ds:data/ w# C# S$ Z& G& |- P% C
- ]% p5 Y6 S/ K
data segment  
& S- ~: u3 O: V        EC_CMD_PORT equ 66h         ;地址端口   0 ^0 s9 C" X4 K# l# |: \
        EC_DATA_PORT equ 62h         ;数据端口   
+ ]  Y6 S) n- q6 t! T8 V4 @        CMD_READ_EC equ 80h         ;读寄存器命令   
, q) [$ f$ H+ \3 I        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
0 N6 P4 U, `' A/ N& F, {# ?- ddata ends
% l2 Y2 E7 V2 W& y9 p( Y  ' c' C3 j+ K# \9 F7 f  ^
code segment & f9 Z' H& g) {4 M
start:   
1 n$ ^" \5 }* I" G9 a  v  mov al,CMD_READ_EC   
/ D/ x1 T: Z9 R: w' l  call write_ec_cmd                ;写80h到0x66h端口% P& Z4 K( K! b% P8 A
  mov ax,POLLING_DATA           ; i% q: ~- F) k! H
  call write_ec_data                ;写ECRAM地址到0x62h端口$ @% s8 E: n- v% q4 d4 [
  call read_ec_data                ;从0x62h读数据
8 N: t( K; k7 p  _/ V
+ s; `8 M4 ~5 N# ~7 G" h7 Y  mov ax,4c00h  ; z+ {* y1 [. b1 P" }2 R+ S* K7 ?
  int 21h
& c0 {: `/ N4 k0 q) \
3 w0 f" n& `) V/ w. Twrite_ec_cmd:
! z7 }, B( j8 X, {0 u. L  mov ah,al# o# s6 Q, ?- G( |
  call pmuWait4IBE
8 g9 a' ]3 l! K4 R! ?$ ^  mov al,ah1 P1 L7 w" B( }+ j1 p. K7 Y0 O2 Z5 t
  out EC_CMD_PORT,al
; s/ @# ?5 u: x; r; l; R+ e& |( E  ret' s: d5 p4 Y0 I) ]2 a, h( @
5 S  T3 u. P- D* a. v1 m6 A2 ~
write_ec_data:
% o/ C! v; z6 |6 b* s1 q, S) K" B  mov ah,al* i8 a0 s# G  b  a
  call pmuWait4IBE
5 G  o+ [9 d/ m, K1 J% g5 E6 d  mov al,ah
3 m* Z7 f9 l% P5 i  out EC_DATA_PORT,al0 W0 W1 C! s3 s: {! H2 V: S
  ret0 k) m: m; I; s2 v. p- r( g6 E, \

/ D/ a% ]! D* G1 J$ i; v  q5 Sread_ec_data:  B4 `' o9 a) j4 B
  call pmuWait4OBF8 G' p/ T* Y: T7 |+ S
  jcxz $+29 ~" I( G: v4 ^5 C/ {2 [5 o
  jcxz $+2$ q" k, }/ e( ~" m4 o
  in al,EC_DATA_PORT
) ^  s  G& m6 \8 i% h( @  ret
  a# H4 N! x5 `* h  
! N* J0 N' n/ W' M( i0 p% `pmuWait4IBE:
3 c+ x+ h+ z, ?; y  JCXZ $+2
" g4 @7 x) F& T! Q$ J  JCXZ $+2   # ^5 H1 `6 r) v0 I2 T7 O+ Y+ ]! i
  IN AL,EC_CMD_PORT                 ;Read PMU status   
: x2 F% ]" X+ a8 N/ e  TEST AL,2                         ;Is Input Buffer Empty?   ; x; }- K  ?1 }. ]7 V
  JNZ pmuWait4IBE                 ;Jmp if no   , |2 A5 f6 E% G" O6 u
  ret7 m1 B, e" X$ t
) \: @4 b1 w' k, p2 w( S4 @. N
pmuWait4OBF:' _0 d1 ~, b# |) s6 t
  JCXZ $+2
& P3 _: [4 Q9 T8 V# v. H  JCXZ $+2     , M" g4 q! e# W* L* w
  IN AL,EC_CMD_PORT                 ;Read PMU status   6 s) n! Z' D6 P  R
  TEST AL,1                         ;Is Output Buffer Full?   
6 R" H4 M# u- l$ O& g2 [  JZ pmuWait4OBF                 ;Jmp if no   3 W9 F8 c* @0 s9 Q6 ~
  ret" @6 T6 W% j, D
  6 T; i4 n7 z8 U: `  I( M% H
code ends  9 h# E- `) P: L0 ]
end start/ ~7 y- |! h9 o4 N  P$ r* J
1 y8 n% P4 [% t$ w
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。6 h$ N4 h9 r) G
2 F* E! t) |4 A$ l
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
- a4 ^( a' I2 L  s0 r" o* J& y- _6 Z: W& c$ \0 K
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
0 X  Q& U" ?0 a# u" t0 `! }同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-3-15 05:17 , Processed in 2.080115 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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