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

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

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

- |& y, U) i- {4 X$ q6 {1 p

* [; {7 W2 K! h2 \4 |

1 k: r$ D+ b* \+ `# ]: \; j; |
1.Battery Information4 N# i: @7 c1 U; Z9 t9 n
" c4 _& `0 J7 I8 o0 }6 a& Q% W, N
( U4 ^( b( y: ~( ?4 t* y

- i# i4 b# Q& V2 @" T9 d! S
   探测Battery的信息是EC一个重要的工作,OS也要通过读取ECRAM中的内容获取电池电量、温度、电压、充、放电电流、Battery是否存在的信息。那么EC如何获得这些信息呢?Battery通常是一个smbus device所以它会接在EC的一组smbus上,而Batteryspec上会给出Batterysmbus的地址以及读取Battery信息相关的命令。EC通过向smbus上送Batteryaddresscmd然后就会取得相应的信息了。
  F$ ^4 T/ O# v8 m; M5 l4 J1 V
0 P9 h/ _: J, I  u% W1 _. r
& W8 |$ m# p) p: F- _  P; u& c
2.Battery Charge&Discharge Algorithm

% j* |1 {. X8 |% D
" g, \5 |- Y3 ]1 J
1 `) Z/ N& `& v5 i# v
1)Charge

: {& z, W6 R  s* M3 W
   充电的过程是这样的,AC in 的状态下Battery插入,这时EC会进入precharge mode进行小电流充电。如果precharge时间过长(通常是指超过一个小时)EC就会停止充电并且认为Battery dead,送给host一个Battery FailEvent。在precharge mode如果充电电流增大到特定的数值后EC就会进入fastcharge mode快速充电。Battery 充满后停止充电。在这个过程中如果电池温度异常EC也会进行一些处理。这就充电的简单过程。

$ ~! K+ V6 A3 _' A
2)Discharge

! G1 R; ^/ ?: v3 Y
   AC out & Battery in这时Battery开始放电,在放电过程中如果电量小Critical Low,系统处于S0 EC会发Critical Eventhost,然后OS紧急关机。系统处S3,EC将会唤醒OS。如果电量小于BattLowLowled将会被点亮(Battery Low Policy会详述)。另外放电温度也会被检测,如果温度过高将会做降频动作等。
- D8 h* A% t8 M* v6 C, `) k+ G/ w. ]
0 a; O# j) C5 j/ T  E

, f6 G. a* G- r+ h' T% K2 |

4 a) f, ]  J/ N2 e6 d
3.LowLed Policy! `. b9 p' J: h" M' I6 f# _4 a# `
9 I/ V# S5 d, _* S# V! x0 R
7 Y( m0 y0 d0 S% z0 d' f2 N
) ~0 {) _( O! J8 p5 _* R8 p
    经常使用NB的话,大家可能会发现有一个led很有趣。插入AC充电时会看到一个黄色的led被点亮,电池没电了会看到一个红色的led亮,有时还会一闪一闪的。其实这就是EC导入的一个Function。黄色的led其实跟这个Function无关,它是充电指示灯,不过它和LowLed摆在一个位置。那么这个红色的LowLed什么时候会恒亮,什么时候会闪烁呢?当Battery的电量很低的时候也就是小于BattLow时,LowLed就会恒亮。当Battery DeadLowLed就会闪烁,导致Battery Dead的原因有Prechage时间太长温度过高或过低。

% b& a, U$ \4 }% z/ D! L  o

5 w. R: [! ], c' p$ w
6 d; [! J; V. J4 B; q, R
4.Battery Event
! G, ?" N0 X% s/ I* b0 U3 ^: t
9 G6 ^  ~" R% Z# W% @

; H" I5 O7 W3 p9 A# k3 D3 f. G
7 L9 v" r! k4 l+ t3 r4 _' i
    Battery
在充放电的过程中,因为电量、电流、温度等原因EC需要向host端发送SCI Event,用于host在特定情况下采取相应的补救措施。

4 C1 M6 E1 L6 b" r
" r8 q7 R8 U6 n& V1 `+ p2 h
1)BattChgEvent
+ t* i, T- K2 s
     当Battery插入或者拔出时EC会发送BattChgEvent通知Host,这时Host会读取ECRAM获得Battery是否存在的信息并更新系统端的显示。
# n# s  v+ f) l, D* j8 ]5 a( ~1 j8 n

/ n  ]; O8 O0 b- N; P" A& |) w
2)BattWarnEvent

9 U' \- [  d3 B: {+ z
    当Battery的剩余电量到达Battery Warning Level时,EC会发送BattWarnEvent通知HostHost端收到后会给出提示信息。

0 j  y$ w, B" E8 t; G  {+ Q5 w

+ r9 p0 V+ |4 ?) \& z6 q. A
3)BattLowEvent
) U! F! O8 }4 ]% W* E
     当Battery的剩余电量到达Battery Low Level时,EC会发送BattLowEvent通知Host,而且这时LowLed会恒亮。
' k6 a( |# o) i9 J* M( ]- D
4)BattCrtEvent

; B+ V4 V- K5 l. l$ f6 N' \: M
     当Battery的剩余电量接近0%时,EC会发送BattCrtEvent通知HostHost收到后做shutdown动作。如果在很长的一段时间里(几十秒),Host
5 Y' \  h8 U7 q0 t& i没有shutdown,那么EC将会Emergency Shutdown
2 a4 C& j5 p3 M

6 u& }3 Z" @- k

" T. h- J; m) M7 R  P

3 b; \& M6 ^$ F- g# |9 U
  
# X& A& m; G& J- X
3 g2 |4 Y0 U7 [$ @7 n
  

! r+ [- k9 s7 G4 s' C0 k
5.How to Debug Battery?
3 ]5 f$ @5 ~7 g% K2 L  v1 K  L

) W) S/ E+ R$ X3 }

0 C: K, q) _4 k: G9 |
& H; T1 X( T, W  i+ \5 c2 a# n
     EC
通过smbus不断的获取电池信息, 所以电池信息在不断的变化之中。有些时候为了澄清问题,或者为了增加新的Function该如何Debu呢?我的做法是使用debug toolsmbus停掉,然后将一些符合条件的值通debug tool写入ECRAM中,然后验证相关的Function是否生效。另外如果是需要给BIOSSCI Event,我会直接将Event填入SCI queue。然后驱动SCI,SCI Event被发送出去。
; X" b$ i8 c* d; R9 D7 d& w

8 S- `  |& x8 O

( T+ d, e5 |) k; A1 m; t% [2 h
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-4-24 22:40 , Processed in 0.040952 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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