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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。- H3 ^0 c( @" C& Z5 P
可惜读取不到正确值。一直读的是FEh......$ [9 ]% ~$ {$ @5 [9 e1 j. j& s
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
' u. N, T' m4 |$ b* l8 Q; k# f! T% i' l: ?1 q* B
代码如下(masm5编译链接通过,DOS下运行):# ~- R5 a7 z9 h7 e2 O+ X" d, q. I+ n

5 B2 z: e! H" ]/ oassume cs:code,ds:data
% R5 F* \5 j+ i7 K4 U' e
* Q5 @( K. G4 r- v' B+ ]data segment  
" r. f6 _% H: ~( m        EC_CMD_PORT equ 66h         ;地址端口   
9 \1 F; b2 a! ^2 X" S        EC_DATA_PORT equ 62h         ;数据端口   
: ~: o9 W5 r+ Y7 v. R, Z        CMD_READ_EC equ 80h         ;读寄存器命令   
, V! F2 D# p3 D* J0 _0 L5 j# q        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
: V7 x7 a  \) _/ E: ^7 Q1 j3 T" edata ends
. T+ H. E9 N9 E/ x$ `  2 Y$ T5 r  W& O- o/ p- a
code segment
2 U& |# d% w: o1 a3 Kstart:   ! L3 g. n1 q+ U$ z/ B9 _+ e
  mov al,CMD_READ_EC   ( `3 g0 T' {; Q# i( l" E9 w9 e
  call write_ec_cmd                ;写80h到0x66h端口
- {& B$ Q5 f  B' n; C  mov ax,POLLING_DATA          
6 X+ a4 g  a& ~8 o3 c' r( ]  call write_ec_data                ;写ECRAM地址到0x62h端口$ L+ G+ F. W% n$ \7 A# L
  call read_ec_data                ;从0x62h读数据
& A& `0 h4 f2 F% }  ^( d9 \+ V5 t7 t* ^/ G
  mov ax,4c00h  
; E1 [* b7 a4 p$ M  int 21h
& o7 R6 l) x2 ?7 n% o- {/ A4 G; a  ]  {, C
write_ec_cmd:, o2 V9 t6 V" m0 q5 i6 c
  mov ah,al( F% g* D) H/ ]
  call pmuWait4IBE) H, P+ t7 I, X7 i$ [8 R* i
  mov al,ah1 ^( |2 |# v5 m+ K
  out EC_CMD_PORT,al  o1 F  ^+ K! C+ `0 y1 e
  ret. H+ q" v7 _6 G5 {/ G8 V* P

+ x$ j+ h0 r0 N8 Dwrite_ec_data:
* @2 S3 E6 G1 @8 B  mov ah,al) O8 @9 }, S9 ?/ T
  call pmuWait4IBE( [) E# W$ M; \
  mov al,ah
* G1 ]% k  k. Z( b  out EC_DATA_PORT,al
- l) g7 H4 E  G3 u* H  ret6 r/ b! l# x! F/ d& `/ {

7 q+ d/ }) _! Oread_ec_data:# D7 C" A" S, F8 [0 L
  call pmuWait4OBF
1 U% Z" [+ [; N8 r  S" t7 B8 B% [  jcxz $+24 {: Z- S) t7 E" _. t3 a
  jcxz $+2
' A! r6 F8 r% i  in al,EC_DATA_PORT
  `" \# A: k$ W  J3 S  ret
) D, m( ^3 H* @1 W  
% T+ W2 q% R' _! U, w% tpmuWait4IBE:- N, Y# b% }7 l( y. F+ y6 V( y
  JCXZ $+2
6 z' s  m' \; V+ h  JCXZ $+2   0 m+ h: {) {! F1 u
  IN AL,EC_CMD_PORT                 ;Read PMU status   * C" t5 k3 u; g
  TEST AL,2                         ;Is Input Buffer Empty?   2 W  u0 Z- ?- W
  JNZ pmuWait4IBE                 ;Jmp if no   3 b+ `4 Q% C1 s
  ret
' M& ~4 z$ v; P# U
7 T/ ^2 ?9 E4 X. E! z9 z) t: fpmuWait4OBF:, V" z- a" b# b
  JCXZ $+2# I! `  Y% o3 r% b! e
  JCXZ $+2     / k0 j2 N4 b. ^6 H' G) B
  IN AL,EC_CMD_PORT                 ;Read PMU status   
, u- r. ?% e9 H8 j6 o  TEST AL,1                         ;Is Output Buffer Full?   9 N& E/ n8 B2 E( J% F
  JZ pmuWait4OBF                 ;Jmp if no   ' U- ]* ~  _. L' ?/ v( c! l
  ret
8 @6 c1 A& G+ v) E* e  ) Q3 v7 B' V$ T" l2 Q! H# X, |
code ends  9 w/ t) n- [* l
end start
4 l( P7 k4 z3 w/ M9 I7 S7 U  d! k4 ^2 }8 R5 \
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。8 N% q3 U) o5 o+ _

$ L+ O. u1 p/ c% R- k  d1 F6 J[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~  Y4 a: ^; z! V' N0 ~; T
% G; ]6 _, }* ~. J
另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。5 m- Q* J* B  t( I3 }9 b! I
同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-6-15 17:10 , Processed in 1.607948 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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