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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
0 E, m1 |9 s9 N可惜读取不到正确值。一直读的是FEh......1 j* K- {/ f+ j8 R6 G( J+ F3 r7 l
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
5 e7 @7 y: Z& w- H
) \2 u0 |2 }/ N* {代码如下(masm5编译链接通过,DOS下运行):+ u0 @9 j, ?9 p6 x% L

% b* f' `; u' ], p2 H1 ?3 eassume cs:code,ds:data, Z# s  \- k# A& R8 J* D. E8 @
7 p4 E2 K7 m% e8 D9 \3 J
data segment  
9 C# S9 M4 _& G- ]        EC_CMD_PORT equ 66h         ;地址端口   
1 y# A( C" o" ^; G        EC_DATA_PORT equ 62h         ;数据端口   ) e- ]9 M; A: K' J
        CMD_READ_EC equ 80h         ;读寄存器命令   
6 s1 }8 y' E6 r/ n- j3 X        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   1 j  x3 c7 F/ I9 [/ j+ r7 U0 ?
data ends
4 C" n0 g) D+ N  U( t' a  ! @5 P! k+ Q! }6 ?3 ~: R* d; `( m5 y
code segment
6 h0 }$ x' E+ S3 ?, N& R* qstart:   ) l# ]8 A- j5 Q5 O% ~
  mov al,CMD_READ_EC   
2 ^/ j. g& @" a" R9 T- C/ m  call write_ec_cmd                ;写80h到0x66h端口( V0 P* O: J1 ^1 {3 a: z6 D2 W
  mov ax,POLLING_DATA           2 F  y9 A( P6 t* C6 T% w5 ]
  call write_ec_data                ;写ECRAM地址到0x62h端口
; T8 N) F# n) K  call read_ec_data                ;从0x62h读数据
& P* J# d/ e$ {: n* a3 U' U# D! u/ r' |9 P
  mov ax,4c00h  : ~* [( U& |( ^1 S# {1 s
  int 21h
) J0 @' O+ i, z# S6 R1 q
; `1 @+ Z8 k( j5 L$ f1 [write_ec_cmd:
; u) R# L* _  u8 p! S/ m* Z  mov ah,al
2 O' w( @5 P* j$ I  call pmuWait4IBE
; L' v3 T3 r) R; d  mov al,ah
" e8 f8 w- |! `8 g+ v  out EC_CMD_PORT,al$ {( K) R0 n3 d7 {, O
  ret
0 Q7 N: p- Q( b3 L: V) O4 H3 W5 [% Y: {
write_ec_data:8 n! \/ j' v1 {' y- x8 o0 j2 }1 ~  A
  mov ah,al5 X( Z' `0 v3 g( E
  call pmuWait4IBE
+ D$ [# L3 i" s* M( v$ E5 U  mov al,ah
  M/ j! }1 R& L( }, x: p# g" S7 c1 i) k  out EC_DATA_PORT,al
8 ^: S! O; v- l% d  ret
4 m& y: m8 ~% R" G% z5 n( r; x
# A4 e8 e% T* i( _: Uread_ec_data:
- M8 Z3 l- ?2 p! [% \  call pmuWait4OBF
( e6 \2 x8 V8 r$ z  jcxz $+2- a( l. E6 s" @6 P# f
  jcxz $+23 h) o! q4 |6 z- l) O
  in al,EC_DATA_PORT, f$ _& k& c; U8 W+ C: U! O
  ret' d; H4 w8 J- v$ u4 ]7 K
  
' E( b: K6 D0 }1 spmuWait4IBE:
6 B% C/ K- k! _) }& k  JCXZ $+2
3 C: O& y7 {8 P0 R1 E  JCXZ $+2   ; H$ l5 y5 u; `+ v' `
  IN AL,EC_CMD_PORT                 ;Read PMU status   9 t3 r- U! L5 j
  TEST AL,2                         ;Is Input Buffer Empty?   
+ @/ F9 |4 X8 o0 l$ h  JNZ pmuWait4IBE                 ;Jmp if no   
9 O" x+ U  ^  p; s* K$ M8 S  ret
" ?1 r% R$ E2 Y- M' R4 a6 R: {/ L( \+ I& V  K# Q; W" D! u
pmuWait4OBF:9 ^( V0 I0 l  n+ y1 Z
  JCXZ $+2
# \8 H  L$ F# n9 \/ ?/ a  JCXZ $+2     ( C% s' d; Y6 @- S
  IN AL,EC_CMD_PORT                 ;Read PMU status   ; @1 @5 k1 F5 C! y. {0 G
  TEST AL,1                         ;Is Output Buffer Full?   5 v3 o' a9 u3 a+ `
  JZ pmuWait4OBF                 ;Jmp if no   6 ]6 U! ^% b3 \/ E/ J0 i- {2 C
  ret" q0 Q9 G  ?7 q
  6 F: [6 J4 b4 [2 B
code ends  
' o* D) I) b0 d5 i- F, }, Tend start
+ E: ^4 [/ F9 u8 r
+ V# ?( ]; |- F) K: s; |/ g# ]还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。( f  t9 P0 K) K* f) Q% J; P
7 K1 e- i, E$ ~1 {9 `" B
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~: U3 f/ [- }8 E
/ `! U5 B# W" G
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。( S6 B7 M  j; v) E
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-11-1 19:29 , Processed in 0.138262 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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