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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。* ~" y4 n( h1 ]* _4 t1 ?; B5 e. L
可惜读取不到正确值。一直读的是FEh......4 Z9 u  ]' m& J5 }$ ^8 {2 |  a1 ~
希望各位大神能帮忙看看,指点一二。小弟先谢过了。( h; h: U- S# S- W
, f( N! e% p5 Z6 \! M2 T+ p" U/ }
代码如下(masm5编译链接通过,DOS下运行):/ h3 r* H0 H( B

; D0 ?" d& z9 q: G6 r* l- O& s, x0 [assume cs:code,ds:data
3 h8 {( h, ^/ |: F2 U
0 [* i% k0 i" {' w( rdata segment  % O+ U, I6 B/ ]5 r
        EC_CMD_PORT equ 66h         ;地址端口   ; h5 A# O5 G& \- k9 t& d2 s. [0 [
        EC_DATA_PORT equ 62h         ;数据端口   ) F' t# q2 N1 w/ ^" ?( s) H
        CMD_READ_EC equ 80h         ;读寄存器命令   
3 q/ F6 D2 @1 s5 ^. t  N- W5 K: J        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
$ w3 Y7 _# R& w& w& l, xdata ends2 A/ b9 a/ ?- U3 A* p
  
( j, a2 ~" D9 b: J; b, pcode segment 1 ^$ T9 X/ s% O/ I6 _8 }
start:   
* Q0 [7 w1 w7 |1 e+ \  mov al,CMD_READ_EC   , X' _. C. b- w3 z4 q! V8 j% z
  call write_ec_cmd                ;写80h到0x66h端口
$ Z: G. m9 [1 Q4 s" ]( q# L3 O  mov ax,POLLING_DATA           5 ?$ s; W! |% w: k, o
  call write_ec_data                ;写ECRAM地址到0x62h端口- n3 D$ d3 e* k5 }% W5 s
  call read_ec_data                ;从0x62h读数据% L: l3 J% ~3 X2 e1 |$ v9 p
0 v- N; e- X6 l% l8 d4 y
  mov ax,4c00h  
9 r# a: H! p( ]6 }$ P5 K) Y  int 21h
6 I1 k& U# N* s. }5 [' K# j0 k: V# F+ N4 `$ ^/ o% v# |9 l
write_ec_cmd:0 \6 c$ {$ V2 n* X0 J
  mov ah,al  c$ V) f  Q4 A7 ?! V0 j! H
  call pmuWait4IBE: h; `- |( e5 O1 K- z
  mov al,ah# L3 R/ F2 G3 K- _4 ~
  out EC_CMD_PORT,al
, u$ R4 t# T2 k. ~: F  Y& r+ s  ret
8 s4 {, Q9 A5 W$ E" V; E( k2 j$ S' J& m7 S/ }
write_ec_data:
" T% \& A3 B: h  ^# {! q0 M  mov ah,al; d$ Y, E5 ^* v3 L& S# l
  call pmuWait4IBE; E8 j# f' t4 ]: B4 j9 E. Q0 b0 E6 @
  mov al,ah) r2 v6 }: n4 F0 J: c( Q
  out EC_DATA_PORT,al$ b% t9 [# y2 N' q
  ret# B2 g, u& ]$ b, x

* ]" `6 N! O' t- M, L5 V" b" }read_ec_data:( k  z, V+ O8 `
  call pmuWait4OBF
/ K1 E  |  x+ l7 @' V  jcxz $+2
" s* ?8 \- _3 \7 b9 ^* Z  jcxz $+2/ p5 O  P: \/ P) N9 U& T
  in al,EC_DATA_PORT
5 o' P4 I3 A& \% B* ^, ?) l  ret
0 R5 z7 k7 ?, k2 ?) m$ D9 C  
6 d# L5 F0 Q' w/ h8 xpmuWait4IBE:' P0 z& Q, @; c' ^- s, A
  JCXZ $+2
3 n7 g# \8 \' s6 F  JCXZ $+2   " H' [$ O  K4 \* }; K
  IN AL,EC_CMD_PORT                 ;Read PMU status   4 \: X) E! z: c' ^$ \7 v
  TEST AL,2                         ;Is Input Buffer Empty?   . q1 b4 y1 {: \# _4 }) R5 A
  JNZ pmuWait4IBE                 ;Jmp if no   
: l9 h$ F2 b( }8 C  ret
* d% R5 O6 h' a2 g3 k0 |: ^0 r2 L# H" j2 p! X% r6 {
pmuWait4OBF:  H& [! ~7 a. l8 V5 p0 q
  JCXZ $+2) F* @: P9 }2 X* E  E, _
  JCXZ $+2     * ~# @  h) i% `7 |& z
  IN AL,EC_CMD_PORT                 ;Read PMU status   
( D( o& j$ H) V# s8 M, J  TEST AL,1                         ;Is Output Buffer Full?   
' W/ X4 V: N, p% h, e; h- c  JZ pmuWait4OBF                 ;Jmp if no   ; ~. U: r) a- v+ V: R+ _
  ret# R+ x4 D( G2 D
  
: ?' Z2 I8 `* K  f( k. C  |code ends  
8 M* @% q; `/ @3 ]+ Mend start" {5 _$ F5 b0 r# p

7 U4 ?8 I2 G8 A( w还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。) l( ^$ U8 ~# ?- `. D& G  J

- }  a. M3 {4 V# ~: s$ l8 _8 h( v[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~: x9 C* u$ v2 i# ]6 [6 h

5 [" U! W7 E/ N. R/ ?! f7 i另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。. s; \! \+ w% Q5 x% u1 n( q
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-7-19 12:18 , Processed in 0.063719 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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