电池充电是由qpnp-vm-bus.c(电池驱动BMS)和qpnp-linear-charger.c(线性充电器)组成;
SMMB charger:Switch-ModeBattery Charger and Boost peripheral开关模式电池充电器和升压外围设备 CV:ConstantVoltage恒压 CC:ConstantCurrent恒流 FET:Field EffectTransistor场效应管 AICL:Automactic ImputCurrent Limit自动输入电流限制 QPNP:QualcommPlug N Play高通即插即用
对应源代码:
代码语言:javascript复制kerneldriverspowerqpnp-linear-charger.c
1. 电池充放电电路连接
VBAT(电池正极)---------------------->PMIC:VPH_PWR VBUS(如USB线,USB充电器、DC充电器)--------------------->PMIC:VBUS_USBIN
2. PM8909 Linear Charger(线性充电器)
可见PM8909线性充电器包括LinearCharger和VM-BM部分,下面介绍LinearCharger部分
3. Linear Charger Peripherals
QPNP线性充电器主要的模块如下:
3.1 Charger peripheral(LBC_CHGR)充电外设
- VBAT_STATUS:电池电压状态(weak,good,ornear end-of-charge)
- IBAT_MAX:最大的电池充电电流设置
- IBAT_SAFE:最大的电池安全充电电流设置(可配置一次)
- 充电中断状态,比如CHG_DONE,CHG_FAILED等等
- VDD_MAX:最大电池电压,典型值为4.2V或是4.35V
- VDD_SAFE:最高的电池安全电压(可配置一次),典型值为4.5V
- VIN_MIN:充电器最小电压输入电压,应比VDD_MAX高100mV,这个是VBUS进到充电IC的最低电压。
- CHG_CTRL:使能/禁用或是暂停充电
- VBAT_TRKL:ATC A阈值,TRKL指Trikle
- VBAT_WEAK:ATC B软件充电阈值
- IBAT_ATC_B:ATC B阶段或是软件阈值最大充电电流
- Safety timers:安全计时器,TCHG_MAX和TTRKL_MAX
可参考下面的信息便于理解
代码语言:javascript复制kernel/arch/arm/boot/dts/qcom/msm8909-qrd-skue.dtsi
&pm8909_chg {
qcom,vddmax-mv= <4350>;
qcom,vddsafe-mv= <4380>;
qcom,vinmin-mv= <4470>;
…
}
3.2 USB charging path(LBC_USB)
(1) Power路径选择和状态
(2) USB充电器电压有效性(validity)
(3) 充电器存在状态
(4) USB充电器过压和低压设置
(5) 如果USB连接无效或是没有枚举到,USB挂起设置
(6) USB枚举计时器设置和停止位
3.3 Battery interface(LBC_BAT_IF)电池接口
(1) 电池存在和电池热敏电阻/ID存在状态
(2) 电池温度状态
(3) VREF_BAT_THM配置
(4) 电池FET状态
(5) 通过电池ID和热敏电阻来检测电池是否存在
(6) 电池温度阈值调整
(7) 内部BATFET调节器控制
3.4 LBC miscellaneous(LBC_MISC)
(1) 自适应升压控制设置
(2) Vbat_Boot_treshold状态
(3) Boot done bit status。