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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。, f; L# c& n3 ]0 ?2 P
可惜读取不到正确值。一直读的是FEh......
! B. }7 a4 P( l8 e8 Y( p希望各位大神能帮忙看看,指点一二。小弟先谢过了。/ t3 o( t" ]# @( Y4 Q

, Z$ i! l7 D' t* n# n6 F* O7 E' O代码如下(masm5编译链接通过,DOS下运行):( v6 E. s% d# G7 M! t+ K
  M+ ^0 A1 l- c7 U4 H
assume cs:code,ds:data1 w1 z3 ]" B, h
4 ]# {- r# L3 M) q0 P2 y8 B
data segment  7 X+ f9 g8 t) G, Y" S4 I( D+ I  c* }
        EC_CMD_PORT equ 66h         ;地址端口   6 `7 y6 m$ U3 [$ N* ^
        EC_DATA_PORT equ 62h         ;数据端口   
( u- v0 m% {( O- l- c- d9 m        CMD_READ_EC equ 80h         ;读寄存器命令     A, F' A1 Y1 x# D) Y) V# {
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
( x$ S( U; Y, z* cdata ends
, N* H  i% |$ J$ Y& U  
% }  f9 Q" g  n" bcode segment 0 b" y6 p" t* \$ |) q
start:   
5 s  B' ?6 G/ _1 B$ H5 w! q  mov al,CMD_READ_EC   5 D, ]6 K  O8 X# b$ S8 C
  call write_ec_cmd                ;写80h到0x66h端口; W9 [9 p2 I6 k- a+ r: r
  mov ax,POLLING_DATA           ) P" o+ C& K! [1 X% D8 Z, f
  call write_ec_data                ;写ECRAM地址到0x62h端口' t$ ~. l' E1 O6 R+ t0 L7 W
  call read_ec_data                ;从0x62h读数据1 q, h' y, B6 A

8 n4 K; |& i5 D( z  mov ax,4c00h  3 E' V0 \* m/ v, ?
  int 21h! S' D# i' z% d3 `, b8 L
) p/ l1 F$ L' U
write_ec_cmd:
9 k9 {+ e& V7 `0 O; a- N  mov ah,al
0 E8 _. B' ~* P7 Z' q: S  call pmuWait4IBE/ G: k5 m0 w* j3 I
  mov al,ah
3 h) k7 s- k1 Y, ^7 Z  out EC_CMD_PORT,al
$ J$ a1 y# C3 N$ W  ret
* |( N( d7 z* |  c5 E2 |; [, j6 Z9 q) c
write_ec_data:" e/ ~$ c* X8 }; b6 ]
  mov ah,al$ @( \) B% `7 |0 |9 m+ S
  call pmuWait4IBE
/ ]3 f' w1 L6 e: u  mov al,ah
( v" v* N! W+ N4 P, Y  out EC_DATA_PORT,al
$ ]: F6 q: U- b/ O0 b  ret- o9 ?" a% \0 H; g
; p3 V) E5 E) [8 C
read_ec_data:' v# ]& j+ X4 K1 a1 k& ]" u$ m
  call pmuWait4OBF
+ h1 x3 }3 I) L  jcxz $+2
( Z7 z3 ?- z% h4 P8 c+ J  jcxz $+2
6 F+ f! S6 g. q; q0 g- [- @  in al,EC_DATA_PORT% _- ^8 Y. v9 E& m7 {
  ret
" L) e' i6 L0 O' s3 O  
% Y, E: G1 F8 \% K% \pmuWait4IBE:$ |" l- D  \1 D" _
  JCXZ $+2
5 r( g& P- U3 Y  JCXZ $+2   + X: M9 v; M$ q- K
  IN AL,EC_CMD_PORT                 ;Read PMU status   
( f- c  b/ C/ L- H6 B& x! g  TEST AL,2                         ;Is Input Buffer Empty?   2 G0 ?+ R% A3 \  F: h/ p( j) [5 Z
  JNZ pmuWait4IBE                 ;Jmp if no   
) f4 b8 J$ h2 ~; r* b2 y/ l  ret
" p. C" U: p7 T7 I9 \$ S7 M: p5 i" ?
pmuWait4OBF:3 Y( W2 N2 t2 ?: X
  JCXZ $+2  H9 W" r6 Q" y! p# S* K, J
  JCXZ $+2     
) l% ?. @) I/ O  H0 C! [) O& }  IN AL,EC_CMD_PORT                 ;Read PMU status   4 C4 m1 Y# b1 _# |
  TEST AL,1                         ;Is Output Buffer Full?   
8 m: |* M& X7 S; i2 Z  JZ pmuWait4OBF                 ;Jmp if no   
% g! i9 B  ^: C- s7 J  ret8 d' g7 T. ^: D
  
6 n; @# T/ E1 A* q, [' w$ e$ Kcode ends    G9 J3 b$ |& N; Y8 P; B
end start
" {4 |* F$ N. o4 [+ w6 S8 ~4 @0 I) h) I& R! f! V8 N1 {
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。* F9 z* s5 t* j; h. Q  J6 s, ?

( [% ^- ~+ s& z! ]3 T$ T[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
+ \) u+ ^' F: \( {* \! N1 K- ?0 o% K5 M4 ]- M8 V; S7 u  {
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
- ?* {. ?) \! h5 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-1-18 19:32 , Processed in 0.085839 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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