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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。, z6 F; l0 @$ E# i
可惜读取不到正确值。一直读的是FEh......
0 e& p# p; L" j希望各位大神能帮忙看看,指点一二。小弟先谢过了。7 R! N  z! m- e

/ ~* b: V( @) w1 _代码如下(masm5编译链接通过,DOS下运行):, l/ M7 N4 G6 P$ n
6 r2 z3 C! D" F: F. i. P, X. [
assume cs:code,ds:data
" R) l: z: s  ^& O4 f! m) b' J6 `# ^( h5 X' ^$ N1 q1 u+ m  w; F
data segment  3 ~* K; `* T  {+ r
        EC_CMD_PORT equ 66h         ;地址端口   : }, u( r" x0 I; s; ^9 b
        EC_DATA_PORT equ 62h         ;数据端口   
+ h3 Z( z- }' i2 M* x+ x        CMD_READ_EC equ 80h         ;读寄存器命令   9 b5 T6 [, M, ~) H: W. z7 N
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   ; v: w% X" G& Y% h; h
data ends
2 ?; L- M: P; p7 v' ?  & B+ U: D- q1 T, c/ k$ ~6 M
code segment
4 C/ ^/ w: m) l8 N# h) y" L1 gstart:   / O: b! {2 I  @# u$ ]; z
  mov al,CMD_READ_EC   
$ `; ]$ x5 }/ P0 b  call write_ec_cmd                ;写80h到0x66h端口
1 K; \0 L- i1 Q2 B& h  mov ax,POLLING_DATA           ! ~, b3 J9 k  k* c/ U  |
  call write_ec_data                ;写ECRAM地址到0x62h端口
! p- ^  f' f5 ^/ q  call read_ec_data                ;从0x62h读数据
. A% b4 {  N+ E$ ~) ?- j7 d+ C2 G; k; K
  mov ax,4c00h  
+ _$ |- L1 M. o  int 21h" R9 N( I- N/ z" c, ~8 C7 h5 \4 Z

1 b0 c- S; z: X0 @; e7 g9 Y$ W! Dwrite_ec_cmd:  ^* ^2 L, O, I5 u+ a8 W3 f
  mov ah,al
+ h# b* t7 v% D5 Y  call pmuWait4IBE4 [9 m! {- B+ W. s7 p
  mov al,ah
2 l7 z  l5 Q2 b2 Z( t  out EC_CMD_PORT,al
  X) q. r( z/ C7 x! {  ret
  M1 l8 o3 R" b% P2 b( m) X  ^2 f  r
write_ec_data:. z& Z9 f  U0 o* k8 |7 y
  mov ah,al
+ U# S/ X+ A1 L# C2 j4 t  ]* I3 J  call pmuWait4IBE
6 v: ?3 j% K: ~" K0 K( `) \  mov al,ah
5 j" N6 L3 [0 S/ B/ x& f4 i7 ]  out EC_DATA_PORT,al2 Y; ^) W- l- |+ ?
  ret. k; z  Z* k) t/ q1 q9 ]+ w) A) |
& |* r- s. g; [, i" ~5 o
read_ec_data:
7 M' t$ m- ]& M! c8 ?& z  call pmuWait4OBF4 Z# A# S8 @% Z
  jcxz $+2
; D7 X% Q8 O$ E8 O8 Z  jcxz $+2$ @6 l. ?' p3 y4 k# \% k
  in al,EC_DATA_PORT5 A: ~0 C! K6 [7 O! R, u. C
  ret, d$ B4 J# ?9 s* J5 {
  * a; \6 R  F9 U. \9 m, g: k
pmuWait4IBE:9 m- e3 D' x8 ?' u. k7 ^) Y+ z7 q
  JCXZ $+2
+ Z& D. d+ m  f$ e  JCXZ $+2   
: x, Q4 Y( d4 j5 J2 v0 i  IN AL,EC_CMD_PORT                 ;Read PMU status   , y, b7 {: v( c8 m  j
  TEST AL,2                         ;Is Input Buffer Empty?   ' O0 J+ `* `8 L6 s/ k
  JNZ pmuWait4IBE                 ;Jmp if no   9 {1 A  t* B: j' t) A8 |' d7 O7 x
  ret. Y. _; A! x3 G; o, ?: `. P" u# V: \

" o3 p3 ~7 L" C7 spmuWait4OBF:3 P& v% x) [6 ?# `4 E3 }( v
  JCXZ $+2
- S! e2 ?5 ?1 X( a  JCXZ $+2     6 ]9 t8 y9 r7 _+ Z: g5 R. n8 \0 ~
  IN AL,EC_CMD_PORT                 ;Read PMU status   
) S: @& G. W! P5 X* Y4 p  TEST AL,1                         ;Is Output Buffer Full?   
0 d5 o, p, Q  k6 }& S4 Y' C) ^  JZ pmuWait4OBF                 ;Jmp if no   
- i: j1 ^, v% x, Y  Q  ret- @, r& P+ g" t7 r1 S
  
' l9 _$ A* J1 ^5 p4 F7 Gcode ends  
+ r# k. |: l* Dend start
' B* Q. p& |9 z
2 u. l. r9 W: w4 r( H2 ^0 i- R还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。# }9 v% j4 W; i
* u3 I4 V6 y% d
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~5 @7 j/ L. h% k

+ X; S: E9 Q( w5 R1 I, K另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。4 G; u. I: I) v9 w$ \; C- ]
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-10-12 06:54 , Processed in 0.725069 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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