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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
$ c8 l& j9 G3 E2 _5 m8 Y0 q可惜读取不到正确值。一直读的是FEh......
1 a& h, |1 Y2 I5 n4 H- |% X8 d5 r( q希望各位大神能帮忙看看,指点一二。小弟先谢过了。
7 G: o8 Y8 d  w+ C9 @
  g, j2 |8 Z0 j) T; A, [$ Q代码如下(masm5编译链接通过,DOS下运行):
( i) M+ e% Z. g% w6 @) {0 j' f" N' V. ~9 v3 \4 E* W" ]
assume cs:code,ds:data' a/ \# R' q0 l8 b, V* Y* s  ^

. H/ P7 t. T! g8 J7 M- Odata segment  
# Q( a# m; v! n% K  ^7 l, G        EC_CMD_PORT equ 66h         ;地址端口   8 h- ]) I. q, y2 v/ [" i
        EC_DATA_PORT equ 62h         ;数据端口   
+ Q9 `$ K( q8 C( |  C        CMD_READ_EC equ 80h         ;读寄存器命令   
0 L! z% Y0 Z. w' O        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   0 l0 Y! Z' d7 C9 }5 P. G
data ends% d5 s3 d6 p6 p9 k( G
  
  S3 L, ^& j! E; x$ V: k8 L+ q- h$ Icode segment $ v4 j; w8 ?9 [
start:   
. @5 A4 x. Z: A! R; V6 w  mov al,CMD_READ_EC   
& b0 m, u1 @0 y; F$ w7 W" H  call write_ec_cmd                ;写80h到0x66h端口  m8 r* h3 `3 A+ P* i9 F* x
  mov ax,POLLING_DATA           * U+ c2 _' N9 n
  call write_ec_data                ;写ECRAM地址到0x62h端口: K6 R$ X% _' s4 G0 u* ]: t
  call read_ec_data                ;从0x62h读数据
' C/ {& _* D" L. \) u. i
  Q% p* b8 M4 o4 N$ x+ d  mov ax,4c00h  
( D% Q  A& @; E5 \  int 21h$ Y3 S/ g9 |  O' U  u; C

* m" U* l2 ?( F/ ~7 ^- R+ hwrite_ec_cmd:7 H6 c& V" F( O* B& q8 x
  mov ah,al) a9 a8 l, O( R8 R3 B1 W
  call pmuWait4IBE
. _. u" v7 s$ g1 R; c4 ]  mov al,ah
$ e8 k3 ~: h/ o$ r+ x) M  u  out EC_CMD_PORT,al, _8 E: h7 m/ M" X2 t+ n
  ret
5 U) t" i8 {" Y# ?
. |! f) d- X* W7 wwrite_ec_data:
0 N! z5 h6 g! h0 O% L* F! V  mov ah,al; X2 N& J+ m2 k6 U8 F
  call pmuWait4IBE. Y/ M8 V. X* {/ q
  mov al,ah9 g" x4 w! Y5 O
  out EC_DATA_PORT,al: h8 o7 s4 U% ~1 {0 Q# G  E9 t
  ret
0 c1 t7 l. w2 d5 P# `( i7 \0 B- U* b2 g9 [* J
read_ec_data:; d8 P2 x0 W4 A2 w$ s! a4 C; F
  call pmuWait4OBF1 r! x' H7 v- w2 k; ]4 W8 @3 Y2 {
  jcxz $+2
- S6 F( p/ c# i) i  jcxz $+2+ _7 }0 j0 H4 o2 B8 `
  in al,EC_DATA_PORT# N8 F! n3 x3 t1 G- S& _
  ret
. Q, m8 L' e3 o6 T  
' S) M' q# M* c! \7 [pmuWait4IBE:
  g0 P) f6 i$ X- I  JCXZ $+2  Q. |, c: r5 k9 x6 }' `
  JCXZ $+2   & O7 s& `4 L+ _6 Q0 E
  IN AL,EC_CMD_PORT                 ;Read PMU status   
( l7 ?0 t5 a2 i* p2 ^6 o  TEST AL,2                         ;Is Input Buffer Empty?   1 \5 q' f7 t- N0 `
  JNZ pmuWait4IBE                 ;Jmp if no   ( D' l* Z7 @  D+ K* t8 I
  ret0 [1 m) N# q6 [( ?: z% K
; i7 i' ]* q4 }4 i4 C& v" }
pmuWait4OBF:4 {1 R) l( ]3 M7 z/ g7 R9 D2 v; W
  JCXZ $+2
, i6 j7 G5 \. N( w( l  JCXZ $+2     
3 S# I" _6 F% p  IN AL,EC_CMD_PORT                 ;Read PMU status   
7 s0 G! L" }8 V4 ^  TEST AL,1                         ;Is Output Buffer Full?   
( ^+ Z8 u- ^1 Y, d  JZ pmuWait4OBF                 ;Jmp if no   
% K- E  _  j& P! y$ R/ Q) j  ret, V6 f8 L/ m3 p- I
  
5 B% {2 i/ X. ~# E" q, L, c: vcode ends  5 p7 O1 K6 F8 J
end start
5 }7 u0 y, }$ s5 X& \9 u, @$ R5 F& Z; Q& V  Z( I
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。" C: f8 ]; |7 [4 j5 r+ {, O
# F. |  `# r5 m" ]; W2 u* _
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~, u# {& C' c3 m3 i& o- c

2 W/ k5 F  `7 k另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
+ n% B' ~! l0 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, 2026-4-19 23:53 , Processed in 0.103043 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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