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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
. ?; p0 D9 G& [- l  `4 ]可惜读取不到正确值。一直读的是FEh......
4 {3 f1 C1 s" g9 O7 T- }- ~6 ^2 e* D7 ^  b希望各位大神能帮忙看看,指点一二。小弟先谢过了。. f, t3 S1 O* h- M* z* f& |! Z* k
( F  G; Y/ [' u9 d
代码如下(masm5编译链接通过,DOS下运行):
2 X' N' _+ A. a  y) j+ Z+ c8 I* Q+ o
assume cs:code,ds:data$ c9 y5 x5 v; a+ M

; X5 X* C0 A2 w" t0 ydata segment  . ]* ^6 Q% S! D+ g! A* U) ]
        EC_CMD_PORT equ 66h         ;地址端口   : Y& X# l5 n2 I0 b5 {
        EC_DATA_PORT equ 62h         ;数据端口   
% X; E, p/ {% u  N4 L4 h5 ?        CMD_READ_EC equ 80h         ;读寄存器命令   1 s9 E- O- ?7 g
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   $ V/ H; f" w2 U) Y! \6 W
data ends# P0 l" W) k8 O" M
  ( B3 d7 D. x5 }4 V4 G, k1 g
code segment 9 z6 W  r& D* ^1 ?; i
start:   
; M2 B5 A4 ?4 R" O; M: N  mov al,CMD_READ_EC   
2 p2 ^4 c2 i' P# x$ j) y  call write_ec_cmd                ;写80h到0x66h端口2 W  @+ F5 S! n. M) ^
  mov ax,POLLING_DATA          
2 n7 J: g' J) L  call write_ec_data                ;写ECRAM地址到0x62h端口
% Y6 w  Z$ g) v3 ?- M( N  call read_ec_data                ;从0x62h读数据. x1 b$ N- Q) c- \' h) O8 ]

! c  ]& q3 H* r! {  mov ax,4c00h  
+ z! P/ V' M  C! x$ G0 Q# }0 r  int 21h7 N8 j7 x" {1 o& U
  \! l6 f: I4 _
write_ec_cmd:2 Y1 d8 D! p0 z  b
  mov ah,al
5 x" w. P) V( D) ]6 e6 {& _! ], x  call pmuWait4IBE
. K; v5 S, p; G1 W' F  mov al,ah
5 C+ A4 [0 v' v/ t% |2 G  out EC_CMD_PORT,al& ~7 u. t' A% V+ m. v( ^* k
  ret
& o# u' G2 g# D+ C, M- s8 Z$ ?* m' e7 R: x3 b- P) v/ e% g
write_ec_data:. o' |9 K, S8 G2 m0 h8 R+ l
  mov ah,al( e5 T$ h) E& A
  call pmuWait4IBE+ J: I) n1 j) b' T8 q$ m% f
  mov al,ah
0 k: c2 o) E0 L! r  out EC_DATA_PORT,al
6 k) H& L! i/ o: a3 b) B  ret
6 A- w( S+ C) O& u) m
" a, K: z) v( r2 Sread_ec_data:0 i* t( T0 E7 p4 t: h3 ^7 y
  call pmuWait4OBF
7 a$ y1 f, _, x) \: t0 J! S$ `  jcxz $+2
  B4 H7 E! n9 ?5 y' H  jcxz $+2
( W5 P9 l( p/ d6 r8 \* w  in al,EC_DATA_PORT) w0 P4 h6 w6 l  s) C/ h
  ret+ u- V" m. G% {: d
  & b& `& N/ Z4 U3 g( D1 Z  z6 T
pmuWait4IBE:$ k6 d: _1 M4 X( ]4 [5 H0 t
  JCXZ $+2
$ K  c+ E' ^! s  JCXZ $+2   
& }' T( @$ i9 `$ @. E* ]' d  IN AL,EC_CMD_PORT                 ;Read PMU status   
3 W5 Y' }" C* v3 Z1 \  TEST AL,2                         ;Is Input Buffer Empty?   3 R' r* O& g( {6 H* ~
  JNZ pmuWait4IBE                 ;Jmp if no   $ h' I5 q% D6 u( W
  ret
! {) g* O9 L1 [9 z- ?) ^  `0 L/ ^/ M+ G3 F( e- M& O( M0 _% {+ u" s
pmuWait4OBF:6 @) o1 Y# P3 u+ i( K' q9 b
  JCXZ $+2, s1 p4 d$ C4 F
  JCXZ $+2     
$ A. A! |1 v0 H, P  IN AL,EC_CMD_PORT                 ;Read PMU status   . o  @/ E2 |! e8 M/ c) I, j
  TEST AL,1                         ;Is Output Buffer Full?   7 B6 u( l) j) ^9 ]/ o& b3 ~4 P+ A( w' F
  JZ pmuWait4OBF                 ;Jmp if no   4 T/ Y: X/ {6 d* M! U2 M8 c, B
  ret  |4 Z! B/ f  @" y
  
, o4 P8 M4 X) u" N1 ], ^- vcode ends  * H3 f! B3 ?0 m1 H5 l
end start5 T) L. s" g$ d/ m) k# b  l6 G* N8 ^

9 `/ _& l9 V7 J/ N还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
2 a) t2 z4 r$ ~. p) U. G) Z
5 |8 S$ J+ R$ h2 s, c4 E[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~% M& X% J, y9 v! t( h

9 `1 t6 f: V% c3 g  S+ g1 K( ]. I另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。5 B" N) v1 Q  h  V8 t9 A+ M
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-8-11 16:08 , Processed in 0.051053 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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