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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
4 w6 Q' F! _1 w% K可惜读取不到正确值。一直读的是FEh......
- E% ^  o  b4 r4 y1 m( {, E希望各位大神能帮忙看看,指点一二。小弟先谢过了。
" v9 {* C* m, [% F4 L) y0 z  ^6 [& C; d  k" T- H: [; @
代码如下(masm5编译链接通过,DOS下运行):; a8 q' b  Q" O8 [/ ^* c0 d* Y
% l! o" q7 L- }- C) {
assume cs:code,ds:data. z& \/ O" x- P0 h

( O1 D( c; _' d" P' K* _data segment  
( L& M( l, L9 \$ ^        EC_CMD_PORT equ 66h         ;地址端口   ( `' W- _/ u4 ^( P( u
        EC_DATA_PORT equ 62h         ;数据端口   
. [, c$ E2 D% Q0 m, L2 s        CMD_READ_EC equ 80h         ;读寄存器命令     Y! S; o$ p- t8 m% T- D" Y
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   1 p9 T2 X& i: d, o! e1 M
data ends; g; l/ w5 G: D, T' K( s# L
  
3 y  Q7 S, h2 F! H0 P) J! A% b- Kcode segment + L4 T% m' J+ h1 R( w; `
start:   
/ X4 R) Z, I9 r2 I2 P# a+ A  mov al,CMD_READ_EC   
% b  T4 Z6 `2 ]* |( `1 U  call write_ec_cmd                ;写80h到0x66h端口/ ^% R9 J1 C3 V% L) n0 n+ X
  mov ax,POLLING_DATA           ( t$ e. W/ b. @- d- M3 Z! J
  call write_ec_data                ;写ECRAM地址到0x62h端口
7 J: f% N/ X. x5 U! X  call read_ec_data                ;从0x62h读数据* ^' ]  m; {" i# ]; |6 E. u2 t

) l& H- x/ f7 J. V  mov ax,4c00h  1 {! w, t% h5 z0 {3 c  W' o
  int 21h4 C0 C& Y/ x2 C1 f& d
% [) ~# H9 N8 M# a7 b
write_ec_cmd:
8 @2 {4 P. ~, D- l1 B+ O6 I  mov ah,al( d1 o8 }  t* j- R) ]) c
  call pmuWait4IBE% w7 n8 m: n# R! X! m' ?" T* q
  mov al,ah( F2 k7 ]% @1 ~9 A6 i$ J) ?
  out EC_CMD_PORT,al
9 J# h* o' w; B8 o' M  ret
% T( l; O" U' N0 I' A
* I$ i! w- Q" x- w* \: p: cwrite_ec_data:
0 z1 F' ?) c* C5 ]' r8 ~  mov ah,al
9 J4 u) v! d+ K6 o5 x/ ~  call pmuWait4IBE/ u; q& c0 |2 F2 N) f9 @% [) w* k
  mov al,ah
7 ~" n4 ?- n2 g5 }9 C. h  out EC_DATA_PORT,al
$ S1 e& S( ]# w3 N! V: w  ret+ ~& L$ ]# |# }+ L

$ g* H: Q: a) y1 u) iread_ec_data:
/ C8 o" y) c$ c: c* m# @3 P+ m  call pmuWait4OBF' Y+ M" I2 d7 H+ @# @7 p; J9 Y5 p+ W
  jcxz $+2
/ r1 p4 J7 c4 Q& a6 w+ \6 q7 \  jcxz $+2; Z0 \3 [" r; V, [5 Z' ]1 Z6 Y
  in al,EC_DATA_PORT
, ^! J+ |+ v" o+ b  ret- f5 n3 B3 H, l  r, P4 h
  
) R# {0 Q: [( O# h/ BpmuWait4IBE:
* l6 ^) [- ^$ x9 `  JCXZ $+2* b- ]5 a+ T2 X$ N
  JCXZ $+2   
0 o; p% v# N: H1 l5 @9 h% W  IN AL,EC_CMD_PORT                 ;Read PMU status   - F  A7 T: g7 o% J
  TEST AL,2                         ;Is Input Buffer Empty?   
+ E+ s- d( n* W* }, l! J# s( J  JNZ pmuWait4IBE                 ;Jmp if no   
: s: U* p! w  M/ c" t  ret9 B! L! ~+ F2 H/ X

0 C1 k1 s, o; ?$ ~% WpmuWait4OBF:9 |; P8 I2 O' K3 B
  JCXZ $+2
4 s. x1 O2 g/ p+ l  JCXZ $+2     
. v# j# ~3 @1 H7 p$ u+ R% l  IN AL,EC_CMD_PORT                 ;Read PMU status   ) d7 D" D7 k/ e$ |
  TEST AL,1                         ;Is Output Buffer Full?   
) G0 n8 ]) F: u0 w  JZ pmuWait4OBF                 ;Jmp if no   8 z6 A, \8 r5 w- B' ?3 b
  ret
+ G2 w/ R: r% }1 q4 {  
- Y# U0 p) F1 M3 C5 v- Ccode ends  5 ^0 L% n; g7 S7 X8 d' j
end start
0 I4 s3 h+ v9 }- g" K' S
1 s" H7 y+ O) {$ ?4 J还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。' o" M& [+ S+ L5 }( i6 M+ e0 D
( a4 U+ x. t9 @; |0 d
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~  s! Q- b* [) F0 t) d& H' q

9 l6 w. M- J1 g5 \5 A另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
& ?# U& \$ }4 X! y  j8 _; d) 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-3-5 14:25 , Processed in 0.072961 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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