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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
2 r/ @8 z* B4 S& v  u可惜读取不到正确值。一直读的是FEh......
0 r7 X8 ]& d8 C0 u; \: f希望各位大神能帮忙看看,指点一二。小弟先谢过了。- v7 F9 I9 A2 ], B
# Q8 Z& m3 w5 g2 K' w( j# i
代码如下(masm5编译链接通过,DOS下运行):
2 W6 N4 h6 h% |$ ^3 d) R/ \/ G; |
( S2 N1 O& U$ L" B" T& Oassume cs:code,ds:data( L8 n2 z8 Y4 s/ }. C- k& s# P
& U2 p2 M7 l* G6 M' _* N0 _0 u- X
data segment  8 K( A1 v1 b3 g1 I
        EC_CMD_PORT equ 66h         ;地址端口   ) o1 f% y3 K# S2 t. `
        EC_DATA_PORT equ 62h         ;数据端口   5 o/ m# K8 c7 y/ _8 C
        CMD_READ_EC equ 80h         ;读寄存器命令   - T- v. b' X9 ?' T% X7 g( |4 t0 {: t
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   ! I4 C9 e6 ?8 y6 h' b$ p. h
data ends
2 q3 _+ Y2 Y6 j) \  ! [. X. h# T" F
code segment / c4 Z. c  s- M
start:   
* Q) i2 O6 i7 a6 [0 \  mov al,CMD_READ_EC   & d' `2 Q, ~$ D2 g$ a9 T9 H& p
  call write_ec_cmd                ;写80h到0x66h端口# @$ F1 b) Z1 ~' @2 p: \- ?9 L
  mov ax,POLLING_DATA          
2 d# ?6 ^- q* Q' d- }6 v5 A  call write_ec_data                ;写ECRAM地址到0x62h端口
) [" A" _* k6 R! `1 S3 r  call read_ec_data                ;从0x62h读数据3 \" l  Z8 E4 D
( O" N% k4 I) P, f. c
  mov ax,4c00h  % T7 u3 {* @& T% x/ a: Z* I
  int 21h" V  ~; {$ V" {/ p' v9 v
% }: E3 h0 A  b' d  o
write_ec_cmd:
4 z$ Q) t8 g8 F( X  mov ah,al
3 {: ^% ?% @4 M$ y1 r  call pmuWait4IBE2 B3 P' {: G$ T
  mov al,ah
, N4 ^( j. Y! o& B' ]( B  out EC_CMD_PORT,al
- T& n# @. S  r: C4 X5 j" J  ret$ q5 H# v) B! q- b* z/ L
4 T# ~% @& L3 Z. z" T- X3 x
write_ec_data:) w" R* y) M+ J& h5 Y
  mov ah,al
2 S! s7 t7 o# J- m8 k; K  call pmuWait4IBE6 [2 a& S$ Q6 n/ `4 D& b8 C
  mov al,ah
+ Y5 S* t, q( j/ _+ J  out EC_DATA_PORT,al' v0 c( m5 s8 |8 h! e. a
  ret- f  R- T- Q0 ]% b8 g2 {+ L$ [

3 H9 T; \2 v8 u# J( pread_ec_data:
; D1 c. f  ^0 P& z+ f% Q  call pmuWait4OBF2 Z7 }8 f# z7 N9 a5 ]" ~) q' z
  jcxz $+2
8 b' C5 a, t! r0 V- `, l  L8 v  jcxz $+2
! \$ |% C3 q5 J' `' \9 f  K8 G" n  in al,EC_DATA_PORT
9 f5 M% }9 s9 I# a. Z' h$ N  ret" D/ b, f+ G: Q
  
' \: D& w% e' {6 q$ n7 _: }" HpmuWait4IBE:& S1 ]) p4 ]: W' _0 j- Q, b" h0 ]
  JCXZ $+2
5 G$ \8 u5 Q& P. u  i4 j9 H  JCXZ $+2   2 K: {) ?% d* P# X, k' b3 x
  IN AL,EC_CMD_PORT                 ;Read PMU status   
) z+ b. M7 N' J' C+ b  TEST AL,2                         ;Is Input Buffer Empty?   
) d, r5 \' ]8 z  JNZ pmuWait4IBE                 ;Jmp if no   
! N) Z/ r2 ?+ b* `8 [/ x8 M" H  ret
& D% A7 P' `3 V1 b
/ o8 f( y  T  ~; L* z1 NpmuWait4OBF:! v3 Q5 q  c; n; z% V/ K1 Q( @! @, Q
  JCXZ $+29 G2 N  L( k, M" U; i
  JCXZ $+2     . w! E% o; H* P) g" v
  IN AL,EC_CMD_PORT                 ;Read PMU status   
! C4 G% o( ?7 Q; v7 ^' `  TEST AL,1                         ;Is Output Buffer Full?   ; Y4 H/ Y% Q" I3 n1 ?3 m
  JZ pmuWait4OBF                 ;Jmp if no   
8 o  [6 ?8 w$ Q3 ~, n0 m  ret
, o. V' z0 B5 e* P  8 r& N7 B' U" \* h3 ]
code ends  
, t! H4 o/ C% T1 {' {end start' t# i# @2 Q* t+ o$ W+ g
8 m% S1 D/ r/ B- h$ R
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。8 A0 N1 E1 l6 \+ Y: R

$ p$ Z9 z7 B1 M+ w2 f& J  p[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
# S2 ]  J  w. y4 ?
: v  V9 u! S+ }+ u! t另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
2 a/ ~! F8 Z9 t% I; L5 G- R同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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, 2024-12-23 21:24 , Processed in 0.046735 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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