背景
在新基線上移植有關的代碼時,在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即可(或者直接讓廠商提供)。
