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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。; p5 T) X, k0 I
可惜读取不到正确值。一直读的是FEh......
  l6 N8 F) j& I4 I( O希望各位大神能帮忙看看,指点一二。小弟先谢过了。
. U/ P/ W% @- [1 T3 t3 ]: z( e7 y7 c' q3 w- J) d
代码如下(masm5编译链接通过,DOS下运行):
8 k2 |+ E- ~' _# C8 E- |1 q1 H
. A8 l0 T" E- [$ b8 \* b0 Vassume cs:code,ds:data, A8 j5 y) O1 [5 k
2 N- T# q- K  F
data segment  
. F4 D7 F8 H, Y2 q: B        EC_CMD_PORT equ 66h         ;地址端口   : T, B: e3 r/ ~
        EC_DATA_PORT equ 62h         ;数据端口   
  i1 [0 |" R8 @, P; K# G        CMD_READ_EC equ 80h         ;读寄存器命令   / q5 J# _/ L& v) o
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   7 |$ `- \9 W5 P
data ends3 ?' T* \4 R4 C
  # H* L) [) ]& d4 k
code segment 7 Z" @- v4 s- W: J, x6 @( |
start:   & F! E) n9 M; e. d+ S
  mov al,CMD_READ_EC   6 T: ?) P3 m& y; M
  call write_ec_cmd                ;写80h到0x66h端口
7 H1 s+ M  g3 N$ a! U& |  mov ax,POLLING_DATA          
2 X4 E4 l2 @! U8 D, j3 s* s3 V  call write_ec_data                ;写ECRAM地址到0x62h端口
; j! z  F& l) v6 O  call read_ec_data                ;从0x62h读数据5 u8 r3 p2 C1 R$ u: g2 k) s& f

# m0 a/ H# j" ]* m" [  mov ax,4c00h  
" ~! C6 y  t2 d; E4 _) [6 r3 G  int 21h: \" t. q5 N  k9 F

; H9 n8 a6 W' S0 R" pwrite_ec_cmd:
( I0 R: P- O" `! F  mov ah,al
. p. y) Z( |5 i1 [. _  call pmuWait4IBE
4 d* E- t2 ~; Y. ]  mov al,ah9 p! D+ B) \3 _' n% H% Q% G; E- |( K; G
  out EC_CMD_PORT,al
9 N' F: p2 z9 d" I  ret0 U$ H3 n( {6 `
) p* n. V. c; m0 z
write_ec_data:' L3 o9 j' H, m
  mov ah,al
- x' I/ j7 P  r  call pmuWait4IBE* r- m6 B) S- {3 O+ P
  mov al,ah
6 b& M3 K" ^( O* V5 r+ r  out EC_DATA_PORT,al3 @+ r8 _- e9 d1 K" i$ e0 E1 F
  ret
! @5 y( X; d8 P
7 ]. q4 R0 P4 _7 ?7 U& ^! K! h" Dread_ec_data:; [8 ?4 Z; P1 O! w* }2 ?9 O
  call pmuWait4OBF
! d4 P- A2 H2 U  N& e, w  jcxz $+2! W4 T- ^  b# |! N
  jcxz $+2
! u* C' f$ @; F4 A2 S8 ?1 V% f  in al,EC_DATA_PORT
/ ]* A" w2 W% z2 S  ret
* O* s! K0 w2 K4 H0 C; t) C  3 {5 E5 H) r3 I* a( v; Z
pmuWait4IBE:" d. N+ H5 [3 L  V
  JCXZ $+2- d1 r3 G5 B$ v- Z$ c
  JCXZ $+2   6 f/ I+ g& B2 z
  IN AL,EC_CMD_PORT                 ;Read PMU status   % u: [# P$ k. y$ V( C) _) ?; j
  TEST AL,2                         ;Is Input Buffer Empty?   ; E; F5 T- {/ [! A9 K& J2 w
  JNZ pmuWait4IBE                 ;Jmp if no   
+ `/ J( |8 D) q4 Y6 q  ret2 y8 ?3 o' ^/ s% w; Z% v8 {

  K+ I% F, N4 b: ^  `* [pmuWait4OBF:' _. s5 X% W5 M( W! M
  JCXZ $+2' {9 {4 f# \" J' U
  JCXZ $+2     
2 Y- q! x+ L( Z; [4 c) @  IN AL,EC_CMD_PORT                 ;Read PMU status   
) g7 {7 f/ C' L( o1 L, L  TEST AL,1                         ;Is Output Buffer Full?   
3 |& v& }1 e- u9 Q  JZ pmuWait4OBF                 ;Jmp if no   4 v, \) U  A& M$ v
  ret
5 b/ o; c' c  f3 `  
7 X$ F' o* ^* [code ends  - w: ?1 I) `, Y- Y5 ?' q
end start
. [) ]' `% y0 b5 l: ], g% J; f. Z. I# _. u! V
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。0 s3 o9 \3 E. ]6 h- `" H
" `# i; X- P9 [8 c, t2 s% }
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
* B2 }; y4 l& x
  }# A2 g9 f) K4 w8 P2 Z3 N另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
8 X+ o5 m$ B, I! T8 a3 b+ _# B6 }同期待高人答疑吧。
回复

使用道具 举报

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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