Android电池电量跳变

  

<强>问题情形:

  

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 ",   }      

先在设备树查找桶是否有值

  

<代码> of_property_read_string(芯片→spmi→dev.of_node,“qcom bpd-detection”,和桶)

  

找不到的话,用代码的定义(通过温度脚判断)

  

<代码>芯片→cfg_bpd_detection=BPD_TYPE_BAT_THM;

  

把参数配置到结构体中。

  

计算电池容量:

  

<代码> get_prop_capacity (struct qpnp_lbd_chip *芯片)

  

如果电池不在位并且或为假电池,返回默认电量(50)

  

电池在位检测函数:(调用流程)

        get_prop_batt_present (struct qpnp_lbc_chip *芯片)   →→qpnp_lbc_read(芯片,芯片bat_if_base + BAT_IF_PRES_STATUS_REG【(】,和reg_val, 1)   →__qpnp_lbc_read (val spmi,基地数)   →spmi_ext_register_read (spmi→ctrl, spmi→sid,基地,val,计数)   →spmi_read_cmd (ctrl, SPMI_CMD_EXT_READL sid, addr, len-1 buf)   →ctrl→read_cmd (ctrl,操作码,sid, addr,公元前buf)      

温度检测函数:

  

<代码> get_prop_batt_temp (struct qpnp_lbc_chip *芯片)

  

如果是假电池并且电池不在位,返回默认温度

  

<代码> qpnp_vadc_read(芯片vadc_dev LR_MUX1_BATT_THEM,和结果)

  

如果读取失败,返回默认温度

  

<代码>→如果(==VBAT_SNS)频道

  

读电压   

<代码> qpnp_vadc_conv_seq_request (vadc ADC_SEQ_NONE,通道,结果)

  

读温度   

<代码> qpnp_vadc_conv_seq_request (vadc、ADC_SEQ_NONE DIE_TEMP,, die_temp_result)

  

读补偿   

<代码> qpnp_vbat_sns_comp(及结果→物理、vadc die_temp_result.physical)

  

最后返回

  

<代码> qpnp_vadc_con_seq_request (vadc ADC_SEQ_NONE,通道,结果)

  

此项目通过软件计算电量,没有专用的电量计芯片

  

计算电量的要素:温度电压电流

  

虚拟电量计qpnp-vm-bms.c

  

所以一旦温度采集不准,必导致电量百分比计算错误

  

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

Android电池电量跳变