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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
* ], a, x- \; L4 I$ O可惜读取不到正确值。一直读的是FEh......
8 d9 A% d. C* b, Q" y- U  [0 Z( }希望各位大神能帮忙看看,指点一二。小弟先谢过了。; r9 H2 e" e5 Z2 @. \3 b
$ `6 r# L$ p$ h. J, H- {6 \5 e
代码如下(masm5编译链接通过,DOS下运行):
* V/ C4 ~' w# D* e5 a2 b
0 W' {, E% O# H8 g% g' Fassume cs:code,ds:data1 ?% h$ E6 C5 J
6 c: ?" n0 z- E  @+ @
data segment  $ ]* `/ {% j! w0 S
        EC_CMD_PORT equ 66h         ;地址端口   9 A* |; N5 S" b# l& b1 E2 P
        EC_DATA_PORT equ 62h         ;数据端口   
. R$ B4 S+ g' t: {% x3 ~% A        CMD_READ_EC equ 80h         ;读寄存器命令   & Y6 b4 k& ]3 @6 `' w8 ?
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
" a0 q5 {; e$ f3 {3 Q% Vdata ends) j6 G' a( V7 f2 _) B& g5 S& `, _
  , d$ V/ C* q0 Z
code segment 7 {0 a0 q# y& `0 q
start:     }2 g# m$ ~+ R  Z8 f  D
  mov al,CMD_READ_EC   
2 q4 O+ Q9 A/ `' ?+ B: h  call write_ec_cmd                ;写80h到0x66h端口
( j5 s' R5 g5 d9 K5 }" A# h  mov ax,POLLING_DATA           ! \/ K  H+ H# W. L6 a* l
  call write_ec_data                ;写ECRAM地址到0x62h端口
8 F7 D7 K% Y% K  call read_ec_data                ;从0x62h读数据
- v  g) Q5 c9 i! s% V( l! \) A
+ p1 l9 N! V: ~  mov ax,4c00h  
5 p5 _: b/ n) `) f& v# |  int 21h/ L3 Q# c- b8 n! \. `, T2 H

: B& O1 g+ Y0 O. }1 T# i8 O. e: r' qwrite_ec_cmd:( P# f% m) M% n+ E: |
  mov ah,al
' T- v9 L7 }/ u  call pmuWait4IBE
! z: @1 H. a$ Z, E. u  mov al,ah
/ }* C% r( ~9 F) \  out EC_CMD_PORT,al$ l8 T$ C2 C! M: y
  ret3 t3 O* A# X  i: n- S
  z: Q1 _7 s  ]" o, j; W
write_ec_data:0 b. X0 R* G% J; x& Z; I
  mov ah,al5 ]& M5 l3 u2 D5 j  \8 p1 {; A
  call pmuWait4IBE
/ D. E- ?( \# r2 ]! P  mov al,ah1 A$ ~5 S. ?/ A" b
  out EC_DATA_PORT,al
. i& z/ a3 L& L' A5 R% U+ I  ret& c$ Q/ r% g# f0 Q2 O: U

5 y  D# v- v4 O( _' x- a0 ^# eread_ec_data:
  W* p' P! H6 O  call pmuWait4OBF
% ~: G1 e. B4 i+ t. O4 R# }5 g  jcxz $+2
! R+ Q* E' h+ K4 t  jcxz $+2( @7 U1 W) m: C
  in al,EC_DATA_PORT
/ w% x/ v) G: k8 |2 Q) K  ret
- b9 p6 J  [: i, U( t0 s  4 Q+ o+ U/ v2 p" s
pmuWait4IBE:9 T- s3 U7 E. _  g4 L! s
  JCXZ $+2
5 Q- n! R+ Y- _9 ]- u  JCXZ $+2     A! o1 R2 W/ A" L
  IN AL,EC_CMD_PORT                 ;Read PMU status   $ U1 V9 \4 S0 _# _, ]6 O' F
  TEST AL,2                         ;Is Input Buffer Empty?   
, D% Y! c& M7 ~9 E" `+ \  JNZ pmuWait4IBE                 ;Jmp if no   # I$ N. ^) m% p/ j( e
  ret
) L9 t  Q( o; N) D% f( G! r1 i9 z3 H, @0 Q5 ?
pmuWait4OBF:
/ q! {7 w5 |6 j/ F7 e+ H" S7 R; ]  JCXZ $+2
5 W( I8 W* G: P: V% Q  JCXZ $+2     # R/ _! G3 |- ^
  IN AL,EC_CMD_PORT                 ;Read PMU status   
3 p& Z. l6 J5 R; Y4 M" X/ [6 o  TEST AL,1                         ;Is Output Buffer Full?   
2 ^3 a7 L% M0 T7 |8 f! ]  JZ pmuWait4OBF                 ;Jmp if no   
# I! u0 o0 `# D$ j  ret/ c" ^9 X* M" y3 P/ @+ Q' D+ T
  
0 c' R7 I5 [/ H/ U5 l( T5 Pcode ends  $ R3 b7 }) D! f: ]$ ^( H
end start
* w1 P2 U% u0 u" \4 f- S3 H
! ?, h, z  ~0 f1 t8 M+ x/ ]还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
0 a+ @2 [' d; A* ]8 H2 K1 v' i9 f0 [! j8 J: r  C
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
- _- B1 Z- \; A
" f; V5 e" @1 |1 W  u! |另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
! A3 ~/ S3 Z4 q$ X3 T" n同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-21 09:46 , Processed in 0.047961 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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