该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零)
因为要看usb charging的问题,所以需要补充一下battery的相关知识,算是入门吧
BAT SCH

(1)VBATT_VSNS_P (2)BAT_THERM (3)I2C_SDA (4)I2C_SCL (5)VBATT_VSNS_M

(1)BATT_ID 没接在电池上,外部下拉的100k电阻,如果电池电压不同还是能做区分的,当然battery-id不一定非得使用adc去读取,既然battery是基于i2c的设备,就一定能做到区分,通过power_supply_desc的get_property的方式同样可以客制化获取电池区分信息包含id。
BAT_THERM
玩转移远SC60 Android开发板------(5)充电和电池管理
VBAT_THERM 引脚若不连接,则会导致不开机、电池不能充电、电池电量显示错误等故障。
如果客户使用的电池没有热敏电阻,或者客户使用电源适配器对模块进行供电,则只需连接VBAT 和GND。
此时为防止系统误判电池不存在而导致无法开机,客户应该将VBAT_THERM 引脚通过一个47KΩ的电阻连接到GND。
可充电电池在不断的循环充电和放电过程中可能会导致电池温度的过高,导致电池原始性能下降,所以需要监控电池温度保持电池性能。
QPNP: Qualcomm Plug and Play(The input can be supplied to the device via either a DC or USB path. Output paths are
the VPH_PWR rail via the buck and a reverse boost feature on VCHG.)
Kernel
power/supply/qcom/qpnp-qg.c -> iio/inkern.c -> (batt-therm - chip->batt_therm_chan)
&pmi632_qg{
io-channels = <&pmi632_vadc ADC_BAT_THERM_PU1>, //SCALE_HW_CALIB_BATT_THERM_30K
<&pmi632_vadc ADC_BAT_ID_PU2>;
io-channel-names = "batt-therm", "batt-id";
}
&pmi632_charger{
qcom,connector-internal-pull-kohm = <30>; //write register BATIF_ADC_INTERNAL_PULL_UP_REG 电池ntc电阻
}
power/supply/qcom/qg-util.c -> iio/inkern.c -> qcom-spmi-adc5.c(pmi632) -> qpnp-vadc-common.c
qg_get_battery_temp(batt-therm_chan) -> read_raw -> adc_read_raw(based on kernel iio/iio_info) -> lux_table_30(vadc_map_pt)
依据电池spec去修改30k对应的lux_table_30的vadc_map_pt表
XBL
DalVAdc.c -> VAdc_DeviceInit -> VADC_BSP 获取vadcbsptype = VAdcBspPMI455(vadc_props.xml)
VAdcSettings.c -> gVAdcChannelsPMI455 (vadc channel)
/* BATT_THERM_PU_30K (BAT_THERM pin) */
{
.pszName = ADC_INPUT_BATT_THERM_PU_30K,
.uAdcHardwareChannel = 0x2a,
.eSettlingDelay = VADC_SETTLING_DELAY_100_US

本文深入探讨了Android系统中高通(Qcom)USB驱动与电池管理的细节,包括电池ID识别、温度监控、JEITA充电标准以及SBL1阶段的充电参数配置。内容涉及Kernel、XBL和Battery数据结构,阐述了电池状态检测、充电阶段及电流、电压的调整策略。
最低0.47元/天 解锁文章
1743

被折叠的 条评论
为什么被折叠?



