高通Android平台 电池 相关配置

时间:2024-03-04 16:38:09

背景

在新基线上移植有关的代码时,在log中发现有关的东西,请教了有关的同事以后,解决了这个问题。

[   12.775863] pmi632_charger: smblib_eval_chg_termination: Couldn\'t read SOC value, rc=-22
[   12.795914] bcl_soc:bcl_read_soc battery percentage read error:-61
[   12.825428] SMB5 status - usb:present=1 type=0 batt:present = 1 health = 1 charge = 1
[   12.833844] QPNP SMB5 probed successfully
[   12.840495] bcl_soc:bcl_read_soc battery percentage read error:-61
[   12.882968] of_batterydata_get_best_profile: No battery data found
[   12.889234] QG-K: qg_load_battery_profile: Failed to detect battery type rc:-22
[   12.896565] QG-K: qg_setup_battery: Failed to load battery-profile rc=-22
[   12.911117] QG-K: qpnp_qg_probe: QG initialized! battery_profile=Unknown Battery SOC=50 QG_subtype=3 QG_version=QG_PMIC5 QG_mode=QG_V_I
[   12.928491] of_batterydata_get_best_profile: No battery data found

参考高通文档:

  • 80-NL239-4_F_PMIC_SW_Driver_Overview_MSM8916.pdf
  • android\kernel\Documentation\devicetree\bindings\batterydata\batterydata.txt

相关的名词

缩小 全称 意义
FCC Full-Charge Capacity 满电荷电量
UC Remaining Capacity RC 剩余电量
CC Coulumb Counter 电量计
UUC Unusable Capacity 不可用电量
PC Percentage Charge 剩余电荷占FCC百分比
SoC State of Charge 电量百分比
OCV Open Circuit Voltage 开路电压,电池在开路状态下的端电压称为开路电压
RUC Remaining Usable Capacity RUC=RC-CC-UUC,剩余可用电量

使用设备树

假设对应的电池数据为:batterydata-qrd-skua-4v35-2000mah.dtsi

&soc {
	mtp_batterydata: qcom,battery-data {
		qcom,batt-id-range-pct = <15>;
		#include "batterydata-qrd-skua-4v35-2000mah.dtsi"
	};
};

电池曲线设备树解析

特性

首先创建相应的dtsi文件,

qcom,battery-type // 指明电池类型的字符串;  如`qrd-skua-4v35-6500mAh`
qcom,batt-id-kohm // 电池ID电阻 // 当一些电池模型的ID电阻在一定范围内浮动时,电池ID电阻可以作为单电池模型数组以支持多ID;
qcom,chg-term-ua= <100000>; // // 电池的结束充电电流,这里为100mA;就是电池满电的时候的电流;
qcom,default-rbatt-mohm; // 标称电池电阻值;正常温度下的电池电阻值(取中值)
qcom,fcc-mah=<3200>;// 电池完全充满的电池容量3200mAh;能放电多少的电流
qcom,max-voltage-uv =<4200000>; // 电池最大的额定电压;
qcom,rbatt-capacitive-mohm=<50>;//电池的电容电阻;  跟着修改;
qcom,v-cutoff-uv = <3400000>; //电池的截止电压,当电池电压低于此值时设备会自动关机;
qcom,flat-ocv-threshold-uv = <3800000>;// 可以被认为处于平坦放电后的开始下降的阈值;在表格中查找那个电流下降的很快的那个值;

查找表

温度查找表:qcom,fcc-temp-lut:一维查找表节点会将温度编码成fcc查找。该方法的单位摄氏度映射成毫安时。

qcom,fcc-temp-lut {
		qcom,lut-col-legend = <(-20) 0 25 40 60>;
		qcom,lut-data = <2064 2067 2067 2066 2063>;
};

电池ACC查找表:qcom,ibat-acc-lut,一个二维查找表,将温度和蓄电池电流电池ACC(表观电荷的能力)。该查找表的单位应在摄氏度的温度,在毫安IBAT与ACC毫安时。

qcom,ibat-acc-lut {
		qcom,lut-col-legend = <(-10) 0 25 50>;
		qcom,lut-row-legend = <0 250 500 1000>;
		qcom,lut-data = <2022 2046 2046>,
				<1151 1962 2024>,
				<680 1864 2008>,
				<51 1548 1970>;
};

内部温度电阻:qcom,rbatt-sf-lut,一个二维查找表对应于电池充电的内部温度和内部电阻

qcom,rbatt-sf-lut  {
		qcom,lut-col-legend = <(-10) 0 25 50>;
		qcom,lut-row-legend = <100 95 90 85 80>,
					<75 70 65 60 55>,
					<50 45 40 35 30>,
					<25 20 16 13 11>,
					<10 9 8 7 6>,
					<5 4 3 2 1>,
					<0>;
		qcom,lut-data = <1355 273 100 81 74>,
				<1352 273 100 81 74>,
				<1268 280 102 83 75>,
				<1197 286 106 85 76>,
				<1143 285 110 87 78>,
				<1109 281 116 90 79>,
				<1090 272 124 94 82>,
				<1080 269 134 100 85>,
				<1077 267 133 108 91>,
				<1079 266 111 100 90>,
				<1090 266 101 83 76>,
				<1116 267 101 84 77>,
				<1156 268 103 86 79>,
				<1205 270 103 88 83>,
				<1266 274 106 88 82>,
				<1337 276 108 87 78>,
				<1431 276 107 85 79>,
				<1560 284 104 84 78>,
				<1680 293 99 81 75>,
				<2078 306 99 81 77>,
				<2438 318 100 83 78>,
				<2875 333 102 85 80>,
				<3411 354 104 87 81>,
				<4092 392 108 89 84>,
				<5118 448 116 92 86>,
				<6939 551 121 95 85>,
				<10433 791 120 90 81>,
				<17054 1280 121 93 84>,
				<29375 2077 133 101 92>,
				<52518 3457 173 135 133>,
				<230352 176376 150360 117059 92159>;
	};

温度和百分比查找表:qcom,pc-temp-ocv-lut ,一个包含温度和百分比的开路电压2维查找表,查找表的单位是百分比和电压的关系

qcom,pc-temp-ocv-lut {
		qcom,lut-col-legend = <(-10) 0 25 50>;
		qcom,lut-row-legend = <100 95 90 85 80>,
					<75 70 65 60 55>,
					<50 45 40 35 30>,
					<25 20 16 13 11>,
					<10 9 8 7 6>,
					<5 4 3 2 1>,
					<0>;
		qcom,lut-data = <4328 4328 4322 4318 4310>,    //100%电量
				<4234 4252 4252 4250 4245>,        //....
				<4164 4191 4193 4191 4186>,
				<4098 4132 4137 4135 4131>,
				<4036 4074 4084 4082 4078>,
				<3980 4019 4035 4033 4029>,
				<3932 3967 3990 3989 3985>,
				<3891 3923 3950 3950 3945>,
				<3856 3886 3909 3912 3909>,
				<3825 3855 3862 3868 3867>,
				<3800 3828 3829 3829 3826>,
				<3782 3805 3807 3806 3804>,
				<3768 3786 3789 3789 3786>,
				<3753 3770 3775 3774 3772>,
				<3737 3757 3764 3761 3755>,
				<3718 3740 3753 3746 3734>,
				<3695 3719 3733 3725 3712>,
				<3671 3702 3705 3698 3684>,
				<3650 3691 3677 3668 3656>,
				<3630 3681 3670 3662 3651>,
				<3619 3676 3668 3660 3649>,
				<3605 3670 3665 3658 3647>,
				<3590 3664 3662 3655 3644>,
				<3573 3655 3658 3651 3641>,
				<3553 3643 3652 3647 3635>,
				<3529 3622 3639 3632 3618>,
				<3498 3590 3605 3595 3576>,
				<3460 3543 3547 3535 3519>,
				<3401 3476 3467 3455 3443>,
				<3306 3368 3347 3336 3313>,
				<3000 3000 3000 3000 3000>;
};

基本上,根据厂家电池曲线表格对应数据编写填写DTSI即可(或者直接让厂商提供)。