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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。. P& S4 x& t. u1 q; A
可惜读取不到正确值。一直读的是FEh......
; @5 L+ p. D) V希望各位大神能帮忙看看,指点一二。小弟先谢过了。
* D$ F0 \  c9 k, I
  n1 k1 g! F+ ?" H$ @- M$ ~代码如下(masm5编译链接通过,DOS下运行):4 W7 v" L" P3 F
3 c4 ~( m% H. O/ J
assume cs:code,ds:data
) Q$ q4 N1 @4 m* \
4 ?) X% J/ U) a2 N2 }! E% Qdata segment  & z* q1 f: t; q0 B4 P
        EC_CMD_PORT equ 66h         ;地址端口   3 _1 s4 v8 d' E& ]% s9 x3 v' F
        EC_DATA_PORT equ 62h         ;数据端口   
3 o9 r( U2 S# J( q) U( M$ z        CMD_READ_EC equ 80h         ;读寄存器命令   
$ b" Q: W7 T1 }; r- k% j" |6 W' Q* c        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
3 A+ }1 T3 u: @0 {7 tdata ends
$ [! F( b3 {9 j* ~  X  & V. Y+ J! n" y  p$ j8 u
code segment
( N* O+ ]6 H9 e' m. z+ N) x4 Pstart:   " g  ?; y$ @: G+ _9 _3 m
  mov al,CMD_READ_EC   - \6 c8 T3 A: Z2 s. E
  call write_ec_cmd                ;写80h到0x66h端口- v4 L: d5 i% `$ l% u
  mov ax,POLLING_DATA           & x* a4 E5 h" G  K3 J. I5 t6 O
  call write_ec_data                ;写ECRAM地址到0x62h端口: P$ d6 O  P1 z. W" N0 z
  call read_ec_data                ;从0x62h读数据+ Q0 |$ U' W# O) L, e4 {
+ l. C' s- ~. T) N+ R
  mov ax,4c00h  
/ {5 e  S2 y/ S+ z) ]* K  int 21h
; |$ E6 }! b7 V4 X
6 O5 i# i: i% F- Qwrite_ec_cmd:" ]2 u; T9 R" D& [' Z
  mov ah,al
# W" P! R9 b5 {6 ]  call pmuWait4IBE9 |8 n7 p! |- B5 M7 f% M- N
  mov al,ah6 H9 J2 b& V( Z5 w6 Y+ e
  out EC_CMD_PORT,al1 ]- C- o5 N8 x2 L. N" {3 s  l4 [' ]
  ret
% X4 y' B& }' f% h0 ^8 I0 b- v: i0 N, W
write_ec_data:. c1 G# Y: Q# L, s/ K
  mov ah,al
4 T0 N+ Z- ~9 u8 I  j! ]  call pmuWait4IBE
- G$ M0 L. i- ?  x9 Q. L5 f  P, ?  mov al,ah/ a  W0 V- T' j7 [4 C* g
  out EC_DATA_PORT,al
$ v. i4 `, z$ H& j  ret
' j7 x; d8 y- W5 v3 t* Q# z+ ], S  k! l+ J1 j. ]) ]6 c# `
read_ec_data:
) l' ^5 R/ n! l  call pmuWait4OBF
9 [' N  O* q  _0 |3 L! S% E! E  jcxz $+2( U2 Z) p% d2 F1 O; Q  K
  jcxz $+2% N  l$ s- y: A
  in al,EC_DATA_PORT0 i' F# t7 C; F" d' X. L
  ret) R7 F* I6 Z: K! z# D, |7 g! t
  1 Z9 T+ \. j5 |. E0 F/ g
pmuWait4IBE:
! I/ w' X7 B8 Z5 k- F/ X' h  JCXZ $+2" N8 i% |( D7 I" E4 h5 Y
  JCXZ $+2   
9 C; ?7 }6 g) I( D: V: b  IN AL,EC_CMD_PORT                 ;Read PMU status   
2 f9 n) B$ X1 K  TEST AL,2                         ;Is Input Buffer Empty?   
9 [/ O$ v: K& s2 u5 M  JNZ pmuWait4IBE                 ;Jmp if no   
5 Z3 ^. ^7 s8 ~$ X, i  ret* K$ C! F+ d7 b( F

, P! h; j5 `; S  Q5 V6 x5 w% u2 R/ `pmuWait4OBF:$ {' M5 k7 p) Z$ u( Z5 \
  JCXZ $+2
/ z& [  ]( k0 O8 e2 f  JCXZ $+2     ; }2 y: x! x: S0 K0 P, A
  IN AL,EC_CMD_PORT                 ;Read PMU status   
( G& w) O* y- B3 A- T1 w, p  TEST AL,1                         ;Is Output Buffer Full?   6 H9 |% ^) }0 w; \
  JZ pmuWait4OBF                 ;Jmp if no   
* K$ A) S9 |/ R- T6 W  ret
" G3 ]  i9 l# a2 A% W1 |& \  
2 O9 B- E# x% C3 Q* Lcode ends  0 D8 ~. l6 t& n* y; `
end start2 i; Y0 @5 ^1 l, X0 \
, v8 k9 d* J; ?
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。) }0 [( B. f8 t+ a3 M) S! ?4 `

0 Y, g! j5 k( S8 @[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
0 ^3 b( T& t  n$ b1 m2 G4 k- x8 {8 s# W4 M, X* _, H4 y- p' G$ Q+ p: D
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
1 F" |8 U0 E( T3 \+ j6 a同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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, 2025-6-16 19:40 , Processed in 0.181256 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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