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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
1 n* `( i. K* s, i" ~, k5 e6 d可惜读取不到正确值。一直读的是FEh......0 Q& q# {5 @* S) h* u
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
  m8 h/ s' S' M/ B0 _# ^# {& S, `
, e* Z* n8 k0 b代码如下(masm5编译链接通过,DOS下运行):
6 }5 a1 u( L3 o4 |  ?( @% h
) D+ x5 v( b6 F% b$ \7 r2 \assume cs:code,ds:data
; B7 G5 `$ P3 Y# F, z! D+ d
# o) O$ c& q4 b  |data segment  
: _) u! N/ P* A( }+ q        EC_CMD_PORT equ 66h         ;地址端口   ) t3 C3 {' W2 C( t' }2 s. N
        EC_DATA_PORT equ 62h         ;数据端口   8 E+ {; L* m9 m" F5 @
        CMD_READ_EC equ 80h         ;读寄存器命令   ; p* A" z2 O, j1 B; k* P
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   1 c9 _" N# f, n% s& m
data ends
: ~) D* E; ?$ R  
* a$ `6 K( ^, U8 V% \" gcode segment 3 d. z- H5 L+ A! J
start:   2 m; E% L: H) N8 D
  mov al,CMD_READ_EC   9 _, U) A3 x* d* {+ {& f1 d9 u
  call write_ec_cmd                ;写80h到0x66h端口
: [& {7 U5 M5 e) D$ C  mov ax,POLLING_DATA          
% H5 E+ A' h, z  call write_ec_data                ;写ECRAM地址到0x62h端口9 \6 Q* ?( q5 ]% n3 O* Y2 j+ U
  call read_ec_data                ;从0x62h读数据4 V2 |$ J+ ]) u

) z9 s' ]# v3 S- T3 ?) p: M  mov ax,4c00h  
( F, _: K: q% J! A" D# E- ~  int 21h
+ `! O) P/ G2 k- |# e- P$ i9 f" T# _6 w; h
write_ec_cmd:$ E$ E& e& |; `4 ]9 v, b! Y, c
  mov ah,al
3 i7 `8 a' k* E8 E# e' D  call pmuWait4IBE  M3 B1 V: E3 B' Z0 D: U& O
  mov al,ah9 o! R2 R0 m" e( y7 K
  out EC_CMD_PORT,al
  H# v$ h5 z% w. P. V' Y% a  ret% p; z" c: E# c; i4 Y2 f2 s
+ p! s/ C2 Q, `+ C1 W2 D0 M$ c
write_ec_data:
5 _4 _% M8 T- o& |* k, ~  mov ah,al
) E( ?& T4 S( m  call pmuWait4IBE
* N  r( O0 m+ L) n  mov al,ah) |6 r& T0 ?6 [9 M/ S
  out EC_DATA_PORT,al% _- P) w, l1 l2 N, p
  ret, ?) T, }) ]( `% \8 G

" o2 V4 e6 a/ N5 C3 A, [  Q+ Kread_ec_data:
$ H6 x/ u+ H) e) F7 t( F2 ?; z5 a  call pmuWait4OBF
2 w4 m) K5 h" d0 t/ G" _+ X1 Q* w  jcxz $+2
3 k% }+ p  j+ X  E  jcxz $+2
8 M& _6 H* l: r3 \  in al,EC_DATA_PORT( \- ~1 M( q8 j
  ret4 X5 R9 D$ p2 n+ J" k) u
  
- D3 F: d  C9 O# gpmuWait4IBE:# p  u  Z( U0 H
  JCXZ $+2
8 H" i9 ]) }  Q/ T  JCXZ $+2   
' P1 I3 b8 F7 W: v! @7 b% f  IN AL,EC_CMD_PORT                 ;Read PMU status   
2 a: H; P& @$ _  j' ]6 k  TEST AL,2                         ;Is Input Buffer Empty?   
+ B$ ?1 `; L3 D) y5 ]" o3 h  JNZ pmuWait4IBE                 ;Jmp if no   
; z9 P$ H  q- C* r4 V! {2 `  Y, c  w  ret& S5 T# D' V  c+ _( T8 x. X6 I

7 T1 r' `- P' }( {pmuWait4OBF:7 b$ e8 J. G3 N# V- U
  JCXZ $+2* I) a" Y2 Y5 \& C1 v
  JCXZ $+2     5 R, _3 k6 ]9 o4 f
  IN AL,EC_CMD_PORT                 ;Read PMU status   5 D& s) r/ w% J" r4 F$ P) I
  TEST AL,1                         ;Is Output Buffer Full?   
1 _8 R: m7 W) N: }: \9 d; P  JZ pmuWait4OBF                 ;Jmp if no   
- _, r6 @  v" G1 ?- E5 u( {  ret; B3 T7 \; a6 y& J' T, z
  
, a! t- v( `2 O; m% m. Q- ucode ends  4 m9 a/ J2 X% c& a/ x
end start
% |; l" x/ h* R6 q2 _5 N
0 Y8 B, @% }+ ^6 x3 e还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
3 [: P- d8 m! N: ]% \" p/ u4 }( L2 A: \) O) _
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
# {9 W3 C1 Q. q! H& P  t3 [1 J) Q3 k! X8 T% {1 a5 Q
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
, r1 t( T  j% X) r; V+ q同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-4 14:48 , Processed in 0.092796 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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