Bios工程师手边事—battery

公司的电池又出问题了。对于电池,只是解决问题的话,不会困难。但将整个电池的知识点串连起来,却不是件轻松的事。

电池部分可以分成二块来看待:

1,ECBIOS读取电池,并处理

2,SYSTEMBIOS写ASL代码,提供给驱动

附:驱动和EC沟通,报给内核

 

嵌入式BIOS部分

嵌入式BIOS工程师做电池,手边的事情一般有:

1,侦测电池插拔动作

一般有两种方式来作这个功能:

(1)通过一根GPIO PIN的电平高低来检测,需要提前去抖;

(2)通过ADC控制器来侦测电池温度,其实在软件的眼中,不管温度还是阻值或者其它什么东西,都是电压。我们可以通过电压是否在一定的范围内来确定电池是否存在。

 

2,获取电池信息

EC获取电池信息,要通过读SMART BATTERY IC的寄存器来获取。比较重要的寄存器有:

BatteryCurrent

电池电流

BatteryVoltage

电池电压

DesignCapacity

电池设计容量

RemainingCapacity

电池现有容量

FullChargeCapacity

电池满充容量

RSOC

电池现有容量百分比

CycleCount

电池跑的CYCLE数

BatteryStatus

电池状态

 

CycleCount的值代表了电池使用的程度;RemainingCapacity和FullChargeCapacity的比值就是WINDOWS显示的百分比,由于算法的原因,可能和RSOC不一致;而电池剩余时间可以通过BatteryCurrent和RemainingCapacity的比值得到。

读取这些寄存器需要遵循SMBUS协议。

 

3,电池充放电

(1)当AC和电池均存在,而batteryStatus的FULLY_CHARGED位没置1时,要充电。充电IC一般接受DAC或SMBUS的通信方式。

(2)其余情况下,不应充电。

(3)电池充放电过程中,要点亮一些指示灯给终端用户使用。

 

4,通知ACPI驱动更新电池信息

电池信息的传递需要通过62/66端口来实现。EC代码的一般做法是用256 BYTE的内存来作为ECRAM或ECSpace,HOST端驱动或应用会通过约定的时序来读取。

当电池拔出时,我们应该将ECRAM有关电池部分清0,然后通过SCI中断发送Q事件号来通知电池驱动来读取电池信息。

当电池插入时,我们不应立

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值