阅读:1307回复:1
深圳荣品开发板告诉你一般的 Android电池管理①本文介绍两种android底层的电池驱动方式,介绍这两种电池的移植和调试方式以及此两种驱动方式的优缺点。后面介绍android上层的电池管理batteryservice.java。 先介绍一下,android电池管理框架: 描述:android电池管理框架图 图片:M9FYDE`DP]LEUAMHELE$QEX.jpg 由上图可以看出,android的电池管理主要是由两个部分构成,linux kernel部分和android部分。 Android的上层有一batteryservice.java,主要任务是监听kernel电池的上报事件和调用JNI接口访问kernel更新的电池信息,以及以广播形式发送电池信息。Com_android_server_BatteryService.cpp android电池管理访问kernel电池的接口。当kernel上报电池事件时,将触发batteryservice.java调用Com_android_server_BatteryService.cpp的接口,访问kernel电池信息。 下面先介绍kernel部分的两种驱动方式。 第一种,求平均法。 例子:本驱动的驱动流程和源码,目前应用在三星平台,源码位于…/drivers/urbetter/battery.c。驱动流程如下: 描述:android电池驱动流程图 图片:I0`{S2BNQ@B9$2{@Q34M8TI.jpg 这里主要说说在移植和调试的时候需要注意的问题。 本人觉得最大的一个亮点是比较好调试。驱动中,将ADC电压采集的值通过校准的方式与电池实际测量电压相匹配靠拢。然后再利用求和平均的方法找出电池的电量。通过对电量的平滑处理,最终留给上层app获取。 移植和调试中需要注意的问题: 1 硬件调试。 1, ADC采集通道,本例采用channel 0;通过该函数s3c_adc_register(battery_dev,NULL,NULL,0);注册ADC采样。 2, ADC基准电压,本例的基准电压为1.8v(1800MV)用来修改BATTERY_ADC_VREF宏。这个根据不同平台的电压修改。 3, ADC采集电平转换成battery电压,battery的1/3电平。目前这个参数是用在计算出实际battery的电压时候,根据四季电路修改。 4, 其他GPIO的修改,根据实际电路设计:POWER_STATE_CHARGE、POWER_STATE_AC。 2 软件调试,更换电池盒兼容机型。做一些ADC采样值得校准都在poll_adc_raw函数内进行。具体的校准值要以实际调试为准。 此例子在补偿ADC采样后,采用ADC平均值法,对照电压-电量表,计算出单曲电量值(d_vol=table[i+1].vol – table.vol;d_cap=table[i+1].cap – table.cap;percent=table.cap+(voltage-table.vol)*d_cap/d_vol;),让上报的电池电量值更加贴近真实值。为了解决电压的突然增大后迅速减小,造成电量误报的情况,采用电量的平滑处理,具体做法是累加16次采集的电池电量然后求平均值(具体表现在睡眠后唤醒)。 以上为第一种求平均值的电池驱动方式,移植和调试的加班要点以上都基本提到了,但在实际的调用中,还要记录ADC的采样值,做好曲线的不同阶段的补偿好玩校准。 本驱动的代码实现流程如下: 描述:代码实现流程图 图片:T5VZBFWO6WU}(HLPQ{LLMYT.jpg 这就是android电池管理的第一种。 |
|
沙发#
发布于:2013-12-30 15:00
怎么感觉大家都没有激情啊。⊙﹏⊙b汗
|
|