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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
9 @5 Q- y" _" a9 s8 f可惜读取不到正确值。一直读的是FEh......$ P6 Q  T/ z! s: K  d$ i) C
希望各位大神能帮忙看看,指点一二。小弟先谢过了。6 T, }  @. N8 j4 ^- k$ t7 c7 G

* z+ h! S) L7 R" U  U+ h代码如下(masm5编译链接通过,DOS下运行):
8 l0 l7 S5 q3 q' j% \- h/ j$ U5 S+ l
4 _" x: w" p5 n  ~assume cs:code,ds:data- M7 z+ |0 p$ q" h" U6 ]4 \
% ]) z! \9 C; F' O. u4 K
data segment  
  @6 I! D8 r( R        EC_CMD_PORT equ 66h         ;地址端口   
, [6 r% f2 T& X. s, f- a6 V- q* n# z        EC_DATA_PORT equ 62h         ;数据端口   ) q& C8 g# A) p( B/ m+ {  _
        CMD_READ_EC equ 80h         ;读寄存器命令   + o' A. U+ E# i8 A
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
$ m2 \3 Z! J4 t9 e! |1 ~$ [  [1 Vdata ends# Z2 `0 f2 q  X; r, P
  $ e& A/ z, e0 |$ E( u- L
code segment 7 ~! z) {/ t+ x. ?0 [# D: e
start:     B: v% D. J: S0 ?
  mov al,CMD_READ_EC   
5 E! r7 D% n5 O8 I0 M/ a7 z  B  call write_ec_cmd                ;写80h到0x66h端口
8 k1 _" ^) p/ _  mov ax,POLLING_DATA           9 F! `* [4 h' j
  call write_ec_data                ;写ECRAM地址到0x62h端口
9 J6 r8 ?) F" A5 D4 W  call read_ec_data                ;从0x62h读数据
7 m' ^, H$ T4 P. L4 x
+ u7 H- A- i, d3 Q  mov ax,4c00h  8 Z" b: k# i. B8 B* {
  int 21h
; g! b1 h& \4 r  M
; \. y' u. T/ B- n5 ^* N6 g2 Mwrite_ec_cmd:& Q6 U+ o) @2 |
  mov ah,al
! Q, Z% u  w, H: U. H  call pmuWait4IBE
* H- U* ?2 f* }3 x* s  mov al,ah
4 T$ b5 j' T0 H$ N  out EC_CMD_PORT,al
! p+ I2 p# E( T4 R/ b6 _- q! b* E  ret
! D( e. {. `+ l/ h% `) d/ i' w6 J% e% C
) y3 k0 U6 q# Q( s/ Q& hwrite_ec_data:3 _5 d2 p  k4 q' u& u5 u
  mov ah,al
0 t* w0 O  e8 L3 s; W& S  call pmuWait4IBE/ q5 \1 t- v2 c$ K% N  S- O
  mov al,ah; M  N+ g2 A% D2 j' L9 N$ Y
  out EC_DATA_PORT,al2 m1 j* G) K! ]7 r6 r0 Z( k
  ret6 g& E3 l  u& h& ?& h
% s" ?; |7 P1 O# [
read_ec_data:" ?- n1 H7 ]& t# V' E2 D
  call pmuWait4OBF4 x! {4 V# M/ ^" Z. @
  jcxz $+2% w. I' }$ d/ X; y% A: ~
  jcxz $+2
$ r+ P$ _, i0 u4 G( G+ U  in al,EC_DATA_PORT
  ~# @* N4 b' C8 y  ret
1 k% Z" Y9 N3 \) o  
9 E0 F0 ]" b- U" U7 ~pmuWait4IBE:
6 D+ q8 Z+ ?/ E6 [) P+ n  JCXZ $+29 Z1 z1 `% S3 Q9 w7 n% j' D1 \
  JCXZ $+2   8 Y$ b8 x! M7 z2 O' Q$ y
  IN AL,EC_CMD_PORT                 ;Read PMU status   
3 E7 \  j* S! U3 R/ H  TEST AL,2                         ;Is Input Buffer Empty?   
( m$ h9 v; @$ Q3 j/ T# O  JNZ pmuWait4IBE                 ;Jmp if no   9 W! [! O0 z/ d+ q+ i& `0 v7 k
  ret8 |& X# q  \: a

( w2 g/ t" W6 P9 T$ DpmuWait4OBF:+ s4 y5 x! S0 V  d
  JCXZ $+2
) D% n" x" G+ }' _% E+ s; M  JCXZ $+2     
9 Y1 b% k/ m. b, h6 |  IN AL,EC_CMD_PORT                 ;Read PMU status   
) o! f3 I) u! J- i* R  TEST AL,1                         ;Is Output Buffer Full?   
6 w+ b, _; ~" a4 z( o; r7 Z  JZ pmuWait4OBF                 ;Jmp if no   
  H3 y4 m4 g8 j7 [2 E/ O# W  ret6 w% |  [% |, ?7 _
  
& e' S" v' j4 _9 B- N2 v- ]: Pcode ends  
4 p; t$ O. c& P: u# Mend start
# g5 }- s0 C) L# [5 I
- }/ N; J: f2 N' j% O( s还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
' y' w" N( F, b9 a7 U& z1 x' E) ?( w9 ]( `" Q5 D
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~! j2 A1 F1 i1 u# _% H' r( G* j

0 P4 T7 f6 u/ K6 t- e另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。7 D* e2 O6 D: [9 I
同期待高人答疑吧。
回复

使用道具 举报

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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