Android电池电量跳变
高通平台8916/8917
对于第三方Fuel Gauge,跳变多是因为IC内部算法的问题,这样我们可以通过驱动来规避。
例如:usb在位时,要阻止电量的向下跳变。
当电量越级跳变时,要在驱动中能检测到。
问题情形:
1.电量跳变到50%或偏差过大
2.电池ID脚接地
3.温度脚来判断电池是否在位
推测原因:
判断电池在位的方法:
- qpnp-linear-charger.c
- enum bpd_type{
- BPD_TYPE_BAT_ID="bpd_id",
- BPD_TYPE_BAT_THM="bpd_thm",
- BPD_TYPE_BAT_THE_BAT_ID="bpd_thm_id",
- }
先在设备树查找bpd是否有值
- of_property_read_string(chip->spmi->dev.of_node,"qcom,bpd-detection",&bpd)
找不到的话,用代码的定义(通过温度脚判断)
- chip->cfg_bpd_detection = BPD_TYPE_BAT_THM;
把参数配置到结构体中。
计算电池容量:
- get_prop_capacity(struct qpnp_lbd_chip *chip)
如果电池不在位并且或为假电池,返回默认电量(50)
电池在位检测函数:(调用流程)
get_prop_batt_present(struct qpnp_lbc_chip *chip)
->qpnp_lbc_read(chip,chip->bat_if_base+BAT_IF_PRES_STATUS_REG【0x08】,®_val,1)
->__qpnp_lbc_read(spmi,base,val,count)
->spmi_ext_register_read(spmi->ctrl,spmi->sid,base,val,count)
->spmi_read_cmd(ctrl,SPMI_CMD_EXT_READL,sid,addr,len-1,buf)
->ctrl->read_cmd(ctrl,opcode,sid,addr,bc,buf)
温度检测函数:
- get_prop_batt_temp(struct qpnp_lbc_chip *chip)
如果是假电池并且电池不在位,返回默认温度
- qpnp_vadc_read(chip vadc_dev,LR_MUX1_BATT_THEM,&results)
如果读取失败,返回默认温度
->if(channel==VBAT_SNS)
读电压
- qpnp_vadc_conv_seq_request(vadc,ADC_SEQ_NONE,channel,result)
读温度
- qpnp_vadc_conv_seq_request(vadc,ADC_SEQ_NONE,DIE_TEMP,&die_temp_result)
读补偿
- qpnp_vbat_sns_comp(&result->physical,vadc,die_temp_result.physical)
最后返回
- qpnp_vadc_con_seq_request(vadc,ADC_SEQ_NONE,channel,result)
此项目通过软件计算电量,没有专用的电量计芯片
计算电量的要素:温度 电压 电流
虚拟电量计 qpnp-vm-bms.c
所以一旦温度采集不准,必导致电量百分比计算错误
Android电池电量跳变的更多相关文章
- Android 电池电量进度条,上下滚动图片的进度条(battery)
最近,制作一个app,需要模拟一个电池电量的进度条,根据电量多少来设置百分比,进度条不断上下滚动,就像平时手机充电一样的电池电量进度条.我就自定义view实现了电量进度条.修改图片就可以达到自己想要的 ...
- android电池管理系统从上层的java到底层驱动的调用(转载)
1.概述 随着移动智能设备的快速发屏,电池的续航能力在很大情况下诱导了大众消费者的购买选择,android系统对电源管理的合理与否直接影响到电池的续航能力,而电池系统作为其中的一部分,主要用于对电池状 ...
- android电池管理系统
原文:http://www.2cto.com/kf/201408/326462.html 1.概述 随着移动智能设备的快速发屏,电池的续航能力在很大情况下诱导了大众消费者的购买选择,android系统 ...
- Delphi XE5 android 获取电池电量
uses AndroidAPI.JNI.GraphicsContentViewText, AndroidAPI.JNI.JavaTypes, AndroidAPI.JNI.OS; function B ...
- Android中获取电池电量
/** * * @author chrp * *显示当前电池电量 */ public class MainActivity extends Activity { private TextView tv ...
- Android中吐司当前电池电量
/** * * @author chrp * *土司当当电池电量 */ public class MainActivity extends Activity { class BtteryReceive ...
- 【转】android 电池(二):android关机充电流程、充电画面显示
关键词:android 电池关机充电 androidboot.mode charger关机充电 充电画面显示 平台信息:内核:linux2.6/linux3.0系统:android/android4. ...
- android 电池(二):android关机充电流程、充电画面显示【转】
本文转载自:http://blog.csdn.net/xubin341719/article/details/8498580 上一篇我们讲了锂电池的充放电的流程和电池的一些特性,这一节我们重点说一下a ...
- android电池信息简介
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
随机推荐
- java多线程断点下载原理(代码实例演示)
原文:http://www.open-open.com/lib/view/open1423214229232.html 其实多线程断点下载原理,很简单的,那么我们就来先了解下,如何实现多线程的断点下载 ...
- Lightoj 1027 - A Dangerous Maze 【期望】
1027 - A Dangerous Maze PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Y ...
- C#如何使用右下角托盘图标notifyIcon
1 拖放一个NotifyIcon控件,并设置图标,还有显示的文字 2 双击这个控件,即当最小化了主窗体,然后双击这个右下角图标的时候,要显示主窗体(大部分程序的用户体验都是这样干的,比如QQ,双击 ...
- hive中使用正則表達式不当导致执行奇慢无比
业务保障部有一个需求,须要用hive实时计算上一小时的数据.比方如今是12点,我须要计算11点的数据,并且必须在1小时之后执行出来.可是他们用hive实现的时候发现就单个map任务执行都超过了1小时, ...
- react 中的 setState
语法:setState(newState [,callback]) 1.只要有入门基础的同学都知道 setState({...}) 是更新组件中的 state 内容 2.但是,setState 是异步 ...
- 基于 Web 的 Go 语言 IDE - Wide 1.1.0 公布!
公布 1.1.0 这个版本号改进了非常多细节,已经全然能够用于正式项目的开发 同一时候我们上线了 Wide 在线服务 到眼下,我们提供了 Wide 和 Solo 两个在线服务,详情请看这里. Wide ...
- UVa 11582 Colossal Fibonacci Numbers! 【大数幂取模】
题目链接:Uva 11582 [vjudge] watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fil ...
- iOS平台加入Google Admob -1/2(Unity3D开发之七)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com.谢谢! 原文地址: http://www.cocos2dev.com/?p=567 Unity调用iOS还是非 ...
- Spring中定时器实现
在Spring 中使用Quartz,本文介绍Spring3.0以后自主开发的定时任务工具,spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需 ...
- 步长为float
import numpy as np for i in np.arange(0.005, 0.05, 1): print(i)