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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
7 u9 u0 D7 V5 d) k可惜读取不到正确值。一直读的是FEh......
" E7 b/ U  X- G/ m希望各位大神能帮忙看看,指点一二。小弟先谢过了。, o- U) J0 O+ T# a: @

! M1 J) @3 Z9 m代码如下(masm5编译链接通过,DOS下运行):# o) `' f  z3 ^9 d" x
! `( J* u$ Q  m" C2 g$ J
assume cs:code,ds:data  {4 {& g* R3 l- C" I

0 m# B# o. q% h/ f* u0 h% m) Edata segment  
, X: T' @! J+ ?$ E9 l        EC_CMD_PORT equ 66h         ;地址端口   
- P6 e( O/ @1 D0 T5 J6 O/ T5 j. S( t$ K& l        EC_DATA_PORT equ 62h         ;数据端口   . c7 V- D& g) o/ ~8 r3 Z  j- e4 Q
        CMD_READ_EC equ 80h         ;读寄存器命令   6 h0 q) L  v/ e' R! `
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
1 n* g$ v+ _4 {9 S4 y# X5 P+ kdata ends
+ v, z  ~. o& ?  G. N  
* w5 ^9 _' X% f4 {& t  J( ncode segment
+ k/ P' [) a" P  z. Q* }start:   
7 q. b  ^9 d$ C* K* A2 X9 ^/ B8 X  mov al,CMD_READ_EC   
! _1 `* u; ]9 W  call write_ec_cmd                ;写80h到0x66h端口
# j$ T; o" ^0 n) Y% d  mov ax,POLLING_DATA           - S# _+ q; b6 x" b" E
  call write_ec_data                ;写ECRAM地址到0x62h端口
' H7 ~( Y! S1 c# s  call read_ec_data                ;从0x62h读数据7 B  H+ B$ S- `

' |& A8 y) F" R1 i. d7 Y: Q  mov ax,4c00h  . B# x! o  ^7 O& e$ T# K
  int 21h
; X" p: _. {+ B( O
+ e2 p" x2 O# b& ]( O5 [write_ec_cmd:; P4 A; U0 q: d: m
  mov ah,al+ S5 c1 S5 ?! E( t+ t
  call pmuWait4IBE1 j. S' H; m9 m2 T
  mov al,ah
* C( _- L- _% z8 Y+ \3 k% M  out EC_CMD_PORT,al$ P& f$ T: K! ?8 J3 ^" b* C
  ret
1 \8 ]& L! Q+ E6 e8 o; D4 [. f# G* Q, H0 ]) D  z# i
write_ec_data:
* b4 X- M5 M3 `5 r9 M  mov ah,al8 E3 W4 a# O9 _- Q3 T
  call pmuWait4IBE& h. }% O! ~* p5 ?7 Q0 v2 Y3 C
  mov al,ah0 V4 l& x5 O( |- O
  out EC_DATA_PORT,al9 n9 N4 `0 K6 \8 k" k; X! A
  ret
$ ^+ H8 g! I$ N6 p9 D$ ?" z( J5 X1 ]2 A8 I: N9 {+ a
read_ec_data:$ e4 U' P! I# q( r$ d$ m
  call pmuWait4OBF$ E6 p  p4 F0 t* h( n$ S
  jcxz $+2- X. h( ]1 K+ @  E$ X; w' `
  jcxz $+2  O2 h# c- Y6 H) K( U
  in al,EC_DATA_PORT
7 s" ], y( |2 P; }) O2 O. ~  ret
: q4 t5 d) Q" Q# }5 E- D9 C% o9 o# e5 ?* N    u" F  O8 a2 g; D5 a
pmuWait4IBE:
; H9 ^  F; o2 @- }/ Z1 e  JCXZ $+2+ ^9 {; z' \( ?' h1 C6 S# n
  JCXZ $+2   
  T9 J* `) f& E  V9 n+ v  IN AL,EC_CMD_PORT                 ;Read PMU status   / c/ z' w3 Q/ d, _( u& }. A
  TEST AL,2                         ;Is Input Buffer Empty?   " U& ]3 \, y4 t7 }6 Y* m% x
  JNZ pmuWait4IBE                 ;Jmp if no   % x4 b. }$ r; h
  ret
8 t1 ~$ p! e' d) E' f$ I- [5 j  c# [
pmuWait4OBF:
2 G5 t2 ^4 @9 g  JCXZ $+2( Q. n% S* v* z
  JCXZ $+2     5 H/ a9 V' Q0 O0 t0 j, e
  IN AL,EC_CMD_PORT                 ;Read PMU status   ; l. ?: f1 R0 V! N0 z( ?& W* Y; {
  TEST AL,1                         ;Is Output Buffer Full?   
/ }+ ^7 |/ ~3 L  JZ pmuWait4OBF                 ;Jmp if no   ) [/ t4 a  d! B7 h8 M% ~
  ret
. g' {8 |- J/ {% H) I7 x6 M  
5 f2 \- S8 z/ C7 P7 ucode ends  9 T, h+ ?0 i! t( G& [
end start
/ i6 T" b! q7 b6 D1 P* [: d/ w% k& }6 M3 p. |+ M) w
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。! i6 X1 Y( R" u: [
1 u1 \2 j7 `# u) v; Z
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~1 f0 E( B$ E$ S& h7 k* M# F: x; l( @

3 i* P  M  u) ]+ i1 x3 m# x" t* J另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
. U  S- C* Q+ N% f) b% n5 ~8 H同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-2-1 04:15 , Processed in 0.055590 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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