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

[原创]我所知道的EC====>Battery

[复制链接]
发表于 2009-4-18 10:00:43 | 显示全部楼层 |阅读模式
我所知道的EC====>Battery

$ X8 m# ^; P( V  G' s3 o( I0 J- o
7 D9 y0 D7 O) z2 q. J# W- ~+ J

) Y' Y5 Q8 c* T8 {5 @- f
1.Battery Information7 k+ z7 o; Y" n
0 M1 P& a6 j0 Q1 S& S0 b7 H( r: ]

2 ^# A' I! u" H1 w2 g

# W& K- O. l9 C: c6 z
   探测Battery的信息是EC一个重要的工作,OS也要通过读取ECRAM中的内容获取电池电量、温度、电压、充、放电电流、Battery是否存在的信息。那么EC如何获得这些信息呢?Battery通常是一个smbus device所以它会接在EC的一组smbus上,而Batteryspec上会给出Batterysmbus的地址以及读取Battery信息相关的命令。EC通过向smbus上送Batteryaddresscmd然后就会取得相应的信息了。
7 X3 D6 L0 `- X0 G# D: ^% c  c
; V4 V3 r/ B. U8 X4 v$ u& n$ }
- ?5 T+ m0 {" C/ B7 N5 w
2.Battery Charge&Discharge Algorithm

. }, h( f* o, S& \0 H9 K$ ]
$ Z; B. i2 v. i$ d; f# k8 e3 I

1 w0 @9 j0 O& A3 z3 N" v& o
1)Charge
, [& a- q1 _2 J* W# e7 F/ w& C
   充电的过程是这样的,AC in 的状态下Battery插入,这时EC会进入precharge mode进行小电流充电。如果precharge时间过长(通常是指超过一个小时)EC就会停止充电并且认为Battery dead,送给host一个Battery FailEvent。在precharge mode如果充电电流增大到特定的数值后EC就会进入fastcharge mode快速充电。Battery 充满后停止充电。在这个过程中如果电池温度异常EC也会进行一些处理。这就充电的简单过程。

5 ^% h1 a& R' x; o
2)Discharge

& h! l  w, F& D2 ^
   AC out & Battery in这时Battery开始放电,在放电过程中如果电量小Critical Low,系统处于S0 EC会发Critical Eventhost,然后OS紧急关机。系统处S3,EC将会唤醒OS。如果电量小于BattLowLowled将会被点亮(Battery Low Policy会详述)。另外放电温度也会被检测,如果温度过高将会做降频动作等。
2 L) O- M& M# {

+ I* g. S9 o+ b$ h# q& F% K4 `& G) B" w5 s

: Q) i5 b- I8 T8 E6 n
3.LowLed Policy  ^2 t' |/ w2 q& [% N. T; \  D& ~

, {  p$ B6 _  ?/ t7 |* ]4 K2 d
* [' Z, v; G! j; e0 k
8 q  d+ \! f/ W$ e! h$ }9 O
    经常使用NB的话,大家可能会发现有一个led很有趣。插入AC充电时会看到一个黄色的led被点亮,电池没电了会看到一个红色的led亮,有时还会一闪一闪的。其实这就是EC导入的一个Function。黄色的led其实跟这个Function无关,它是充电指示灯,不过它和LowLed摆在一个位置。那么这个红色的LowLed什么时候会恒亮,什么时候会闪烁呢?当Battery的电量很低的时候也就是小于BattLow时,LowLed就会恒亮。当Battery DeadLowLed就会闪烁,导致Battery Dead的原因有Prechage时间太长温度过高或过低。

0 {/ `6 O& c+ p- d- _! [) q# D5 f6 {

- P- g" ~7 S% P3 l5 R
- U% X* O" q1 }3 _
4.Battery Event; b) @  J' C! \; K$ Y6 [7 D

! T$ Y( e8 p! U* {- }% U  O
0 Z( _  q1 s5 `

9 g" p% V2 z* d; n$ D    Battery
在充放电的过程中,因为电量、电流、温度等原因EC需要向host端发送SCI Event,用于host在特定情况下采取相应的补救措施。
7 U3 Z9 e) K. E& t' k$ d
9 V) y, }  k+ v$ M  t6 @
1)BattChgEvent

' T6 N. V: D$ p7 a" k% x9 ?' ]
     当Battery插入或者拔出时EC会发送BattChgEvent通知Host,这时Host会读取ECRAM获得Battery是否存在的信息并更新系统端的显示。
/ ?- S0 v1 V3 T

( H' f: r9 q6 R' t; b# V. Q+ k
2)BattWarnEvent
7 m7 u5 ^3 s& d! I' q8 p
    当Battery的剩余电量到达Battery Warning Level时,EC会发送BattWarnEvent通知HostHost端收到后会给出提示信息。

3 l0 V1 R" l. u3 P- o' Z7 v
& C( c0 [4 F7 ~7 z3 l+ j% Z! _" X
3)BattLowEvent
9 u* ^4 T& ]) Q+ \+ h; U
     当Battery的剩余电量到达Battery Low Level时,EC会发送BattLowEvent通知Host,而且这时LowLed会恒亮。

2 f1 _, v/ T9 ^9 @8 @1 R* S  V
4)BattCrtEvent
8 g% p: P$ A6 p' c7 A- G- {& @% l( k
     当Battery的剩余电量接近0%时,EC会发送BattCrtEvent通知HostHost收到后做shutdown动作。如果在很长的一段时间里(几十秒),Host6 x+ u0 B4 ?9 \3 K+ L* @/ C
没有shutdown,那么EC将会Emergency Shutdown
7 y  y" h1 J. V3 K' W

/ l& V6 Q1 Q7 T7 R8 y! g+ Q& t
* `; E  U3 q/ ?6 J' Y
+ ^/ ~8 P) Z( X) f% l9 m
  
- d# p$ E' f& Q9 K+ p: R; [

0 j# `9 P/ c4 G
  
" a: D; n6 x) @$ J( w( C
5.How to Debug Battery?! J9 b+ U8 P; {

4 s5 L5 l* j7 t: ?' p! A

" B- ~& u- K4 b$ [) x) o" a

$ f# d! f8 Y/ G- Q+ {. _/ h     EC
通过smbus不断的获取电池信息, 所以电池信息在不断的变化之中。有些时候为了澄清问题,或者为了增加新的Function该如何Debu呢?我的做法是使用debug toolsmbus停掉,然后将一些符合条件的值通debug tool写入ECRAM中,然后验证相关的Function是否生效。另外如果是需要给BIOSSCI Event,我会直接将Event填入SCI queue。然后驱动SCI,SCI Event被发送出去。
: e) z3 Z, X  o
( u) U! Y( M# R, S# U# z$ p# u

% k( Z9 a3 \/ v* \& R' a! O
Peter

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入计匠网

×
发表于 2009-8-13 16:28:37 | 显示全部楼层
小弟初探EC的世界,看了您的几篇帖子受益匪浅......
回复

使用道具 举报

发表于 2009-8-20 14:00:15 | 显示全部楼层

re:battery

我看了一遍,写的过于简单过于笼统
回复

使用道具 举报

发表于 2009-10-2 09:47:55 | 显示全部楼层
好多Host,请问谁可以帮忙解释一下哪些host分别指的是什么?是南桥还是BIOS?
回复

使用道具 举报

发表于 2009-10-20 13:23:19 | 显示全部楼层
我们想在用的一个smart charger IC,这样好多电流的测量就可以省去了,我们只要根据该IC得一个report pin就可以知道充电的状况了
回复

使用道具 举报

发表于 2009-12-1 14:17:36 | 显示全部楼层

battery

写的简单了点,不过比较概括就是了
回复

使用道具 举报

发表于 2010-1-14 09:11:25 | 显示全部楼层
真的是十分感谢,中国就缺少您这样的标榜
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-9-21 23:34 , Processed in 0.074218 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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