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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
; K- P7 I& H3 [  R; E可惜读取不到正确值。一直读的是FEh......
& P; l7 W7 A$ O: k7 r希望各位大神能帮忙看看,指点一二。小弟先谢过了。
, r/ m5 ?' D% _8 h" Y7 e
/ g' \- d% B6 z, C& n& R代码如下(masm5编译链接通过,DOS下运行):
6 k' m: U4 _9 T* F7 ?0 V7 T# d; Z" w% E% J
assume cs:code,ds:data: C" N& [2 E5 o1 s$ U
) S9 a6 j: C5 B* L4 i) e* a& R( \
data segment  + m2 _5 K/ G* ^% M+ ?1 Q
        EC_CMD_PORT equ 66h         ;地址端口   
, P5 P  O7 ~3 Z% n        EC_DATA_PORT equ 62h         ;数据端口   
( c1 t* ~: `# l9 J/ T5 S        CMD_READ_EC equ 80h         ;读寄存器命令   , N  c4 I1 X& B2 R! U$ J) p
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
. G  _9 j4 x6 I. ddata ends0 i' o; s! O2 D
  
2 d2 Q4 o* H1 c% `code segment
2 \9 z$ J3 H  l7 j2 O8 a' Jstart:   
4 a: r: \/ e. j) u+ B: g  mov al,CMD_READ_EC   
( F* Q% Z+ y( }* B: x" @  call write_ec_cmd                ;写80h到0x66h端口" X5 e) J4 `) d4 p  u
  mov ax,POLLING_DATA          
0 ?0 h7 ?; K" X9 H# Q, J) w* w, K0 a  call write_ec_data                ;写ECRAM地址到0x62h端口7 q" x0 w9 c" I* z: L
  call read_ec_data                ;从0x62h读数据
# L5 L0 Z/ b- Y1 `& X; T& q; V8 A( N5 w3 ~" ?5 J4 Z9 J: h
  mov ax,4c00h  5 J/ G1 ~; {4 P! M
  int 21h! D5 b$ M7 L( l6 z0 N) @
1 ?" V, h- P) ], D% a
write_ec_cmd:
" k$ @- N* f7 y) u) E9 q  mov ah,al
$ c1 \$ J3 u7 Y  call pmuWait4IBE4 @" G4 E' ?3 g, ^
  mov al,ah
4 H( d! ?* n; v# @  out EC_CMD_PORT,al
  @6 `* Y7 O' q" C" C& ?6 Q! C  L3 L  ret
5 h8 C& ]$ U6 P/ h: Y: i) k" \4 z) n% \; ^
write_ec_data:
0 ^9 L. o6 |2 t- W! J* {; A5 T. g  mov ah,al
( p% p! I9 ^7 h! `, z; _# b5 R  call pmuWait4IBE
' K# T" `* T+ X  mov al,ah# c4 g( p# o# ]( |5 I5 B+ j1 @
  out EC_DATA_PORT,al
+ j% o. M% P6 W- P3 V. v* V  ret
3 S1 ~" Q% c# {; a2 A. W0 p& ~& ^6 a% |) H* z% ^
read_ec_data:% k6 n# d4 Y; ?4 l
  call pmuWait4OBF0 w6 G1 i$ o( s2 y2 U  R: N
  jcxz $+2. N$ Y5 r$ Z1 ]( e$ K2 a8 d
  jcxz $+2% P7 D3 j  D9 G, Z! k" \
  in al,EC_DATA_PORT
) \/ D& Q" S$ {* ?4 `, Q/ S  ret2 q* }0 b, S" n# E0 ]
  5 C) s& Z2 O5 t$ y9 q6 B
pmuWait4IBE:0 b* p6 Z8 P, ?. S5 X
  JCXZ $+2
/ v( v( M/ `0 C4 `8 x  JCXZ $+2   8 [" i" D( \) n. ~+ z" e2 g
  IN AL,EC_CMD_PORT                 ;Read PMU status   0 Q; s7 O: {- V# h- F
  TEST AL,2                         ;Is Input Buffer Empty?   
0 A: @* C/ o. x8 W  JNZ pmuWait4IBE                 ;Jmp if no   
- _) i' I2 h# F5 J8 ]& v2 U  ret/ |5 y( Z8 m4 v. T9 r
/ s  Y2 C( o- e3 X" Z! Y' I) ]0 c$ b
pmuWait4OBF:. C+ O) K' \; s- ?# k0 N
  JCXZ $+2
, ^1 b4 o! C* I( v- h6 L! o  JCXZ $+2     ; C% w, J  O* D8 g5 D
  IN AL,EC_CMD_PORT                 ;Read PMU status   
1 C1 X) T1 t# E0 e  D6 z4 A  TEST AL,1                         ;Is Output Buffer Full?   
+ \1 v, w' a+ q6 k  JZ pmuWait4OBF                 ;Jmp if no   
) J( K8 X( J) t/ p% l$ k/ [  ret
& c; |9 @1 W' C5 j$ h  6 ^. A6 _0 q, \% d
code ends  ( y" z6 Q% a0 ~! |
end start. a! q4 k4 T" w0 N) u  a5 ~
# \/ ^7 {! |% U$ g$ ~% ^! a+ l1 w
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
) R' C2 o# B$ U, E3 G  A6 S) j
  x! O2 x* u! Y  }3 |+ z4 C6 d[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~; y& R( |% k. m0 z2 f/ J
1 ~# u! E" H; e( W  D
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
2 H) F* C( N" Y* r" U同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-9-4 15:50 , Processed in 0.059073 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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