電池充電是由qpnp-vm-bus.c(電池驅動BMS)和qpnp-linear-charger.c(線性充電器)組成;安全
SMMB charger:Switch-ModeBattery Charger and Boost peripheral開關模式電池充電器和升壓外圍設備code
CV:ConstantVoltage恆壓blog
CC:ConstantCurrent恆流接口
FET:Field EffectTransistor場效應管ip
AICL:Automactic ImputCurrent Limit自動輸入電流限制it
QPNP:QualcommPlug N Play高通即插即用軟件
對應源代碼:配置
kernel\drivers\power\qpnp-linear-charger.c
VBAT(電池正極)---------------------->PMIC:VPH_PWR自適應
VBUS(如USB線,USB充電器、DC充電器)--------------------->PMIC:VBUS_USBINim
可見PM8909線性充電器包括LinearCharger和VM-BM部分,下面介紹LinearCharger部分
QPNP線性充電器主要的模塊以下:
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
可參考下面的信息便於理解
kernel/arch/arm/boot/dts/qcom/msm8909-qrd-skue.dtsi &pm8909_chg { qcom,vddmax-mv= <4350>; qcom,vddsafe-mv= <4380>; qcom,vinmin-mv= <4470>; … }
(1) Power路徑選擇和狀態
(2) USB充電器電壓有效性(validity)
(3) 充電器存在狀態
(4) USB充電器過壓和低壓設置
(5) 若是USB鏈接無效或是沒有枚舉到,USB掛起設置
(6) USB枚舉計時器設置和中止位
(1) 電池存在和電池熱敏電阻/ID存在狀態
(2) 電池溫度狀態
(3) VREF_BAT_THM配置
(4) 電池FET狀態
(5) 經過電池ID和熱敏電阻來檢測電池是否存在
(6) 電池溫度閾值調整
(7) 內部BATFET調節器控制
(1) 自適應升壓控制設置
(2) Vbat_Boot_treshold狀態
(3) Boot done bit status。