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

读取EC RAM

[复制链接]
发表于 2010-5-22 16:46:03 | 显示全部楼层 |阅读模式
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
$ l3 _0 i) ?3 _. u0 X: H; c' _' K9 o可惜读取不到正确值。一直读的是FEh......
4 n7 j7 @# @. i' D3 F希望各位大神能帮忙看看,指点一二。小弟先谢过了。
! H% E0 e! R* w$ E0 W; d3 k  k# [1 |& V& ~! J# u! g4 N0 R% n
代码如下(masm5编译链接通过,DOS下运行):
* E2 _0 a* v0 Q8 @$ y$ k5 k/ U" c: J8 s  y* q0 j9 N: o) O. I$ B8 {  }
assume cs:code,ds:data
1 b: C# o- h# h4 k6 q$ j+ Q* F- }8 [3 |
data segment  8 C6 j) o* ^# B4 m3 L* q
        EC_CMD_PORT equ 66h         ;地址端口     l0 E: W4 i& {9 Z9 M
        EC_DATA_PORT equ 62h         ;数据端口   7 R, M1 V" Y, ^5 \: J
        CMD_READ_EC equ 80h         ;读寄存器命令   * L6 r, q' ]! A3 Y$ P: P# D# r
        POLLING_DATA equ 130         ;EC RAM INDEX要访问的ECRAM地址   
, r- m( q1 [1 J1 S0 |data ends- N: F0 g+ Z$ `7 \! h2 ]
  " o; j7 }1 C. C2 s) x& p
code segment + j5 h" ^* ^3 l+ x
start:   
7 E/ N8 D+ x9 Y7 P4 |  mov al,CMD_READ_EC   
! G  [: Q3 L  C5 P3 q  call write_ec_cmd                ;写80h到0x66h端口
4 f! @6 E. F  J  mov ax,POLLING_DATA           & R3 ^- U6 T' P
  call write_ec_data                ;写ECRAM地址到0x62h端口
  R) T8 f/ n8 F2 Q8 v  call read_ec_data                ;从0x62h读数据
+ j& G- S& Y9 f! I$ k, j% q0 t, P2 e" ^. l& r: R
  mov ax,4c00h  
% N5 r+ I6 ?3 d  |( ^' _( P5 F  int 21h
/ F3 H6 S; u8 F, P7 v1 O3 r( a  w' s: C
write_ec_cmd:
+ [2 W; F. x+ _0 _) H: ^  mov ah,al5 @0 J, n! J- @; H
  call pmuWait4IBE
  p( ]4 }7 t( o# \) ~7 ~; o  mov al,ah
* l' d' b% O1 e9 @  out EC_CMD_PORT,al- D. y% i0 M" p9 W9 N) t
  ret' t- R( {; Q. |, x8 J- p
/ \8 o# j; r; \  P5 m
write_ec_data:
% B. S1 f; l/ j( F% [  mov ah,al
1 m1 \) f2 [4 m6 e  call pmuWait4IBE
2 R1 [' V' {3 G* `( z; i  mov al,ah9 t3 a: J  m8 R! j$ v
  out EC_DATA_PORT,al
+ B6 c! o) R) @+ I0 K  ret7 D! u$ F1 a: z9 f
3 x7 c3 Q' Q+ y0 N4 j  L- a
read_ec_data:* x* k0 ?5 X' r& b
  call pmuWait4OBF
$ W7 L" g) g8 b9 ?& i/ L  jcxz $+2
+ ~. `0 E. }5 g8 R3 [$ V. {  jcxz $+2( b  C( j& V3 B3 O* U
  in al,EC_DATA_PORT
, _* A' W, w3 i* s9 k  ret6 ?" J& p- A( g$ d# [  I4 O
  
, z# x" c: e* m. U# y( d$ YpmuWait4IBE:3 V1 M2 f/ q# J" }  |
  JCXZ $+2+ J$ b; z: Y' v
  JCXZ $+2   " U4 A* p3 i& |2 r9 o0 f/ E) O: h
  IN AL,EC_CMD_PORT                 ;Read PMU status   
- d0 b' n5 A) P$ u) [  TEST AL,2                         ;Is Input Buffer Empty?   
4 f- I& }/ o7 u( P  JNZ pmuWait4IBE                 ;Jmp if no   / G# z+ A! s- c+ ^. @  l4 O
  ret  i: m5 ?  W0 F" K) W  ]

+ k* B: o+ ^7 P8 C! [# epmuWait4OBF:6 d: P6 J8 y6 S2 [) t
  JCXZ $+2
! v# p; N" ^0 h: q7 Y  T  JCXZ $+2     
! P7 C: P7 \8 f* R7 M  IN AL,EC_CMD_PORT                 ;Read PMU status   3 [# e1 g2 R9 k, ]6 \( n% z  N
  TEST AL,1                         ;Is Output Buffer Full?   : J2 q( {% R2 Y2 @7 _" U) F
  JZ pmuWait4OBF                 ;Jmp if no   
, F6 {, I$ q' \6 L  ret$ |8 O2 s; c4 _* d* H2 s7 ~' t
  ; f) G8 b, z  U2 d2 |
code ends  
9 Z5 B( m  p- I: Y& w" s2 X9 Mend start
0 D5 H4 P: U5 w! X: O7 d
7 G6 s; G: A. u% f3 `! u& k还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
' d( p) ?+ P9 `8 G) F2 ?& @# O+ g9 k
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ]
发表于 2010-5-24 16:18:33 | 显示全部楼层

回复 1# yejieku 的帖子

帮顶一下,同关注!~
# S  G, ?& S6 I4 `1 o- @1 l
3 x# U& O/ x, @1 Z2 g另猜测一下,楼主在pmuWait4IBE时,能否正常退出。我在OS下用winio的方式去读EC,采用循环读0x66判断IBE时,总是超时退出循环,而非正常退出,开始猜测可能是SCI的原因,但读之前借用RW工具将SCI屏蔽掉后,再去读也不起作用,目前仍在困扰中。。。
8 }3 Z$ \8 C( q( P同期待高人答疑吧。
回复

使用道具 举报

 楼主| 发表于 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-3-5 14:20 , Processed in 0.205935 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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