android 添加电池

说到电池,也许大家觉得没什么神秘的,确实是没什么神秘的,大家也没重视,先问大家一个问题,一般手机电池的电压是多少?一般到多少电压会关机?哈哈,是不是似懂非懂的样子,,电池分为高压电池和低压电池,低压的一般为3.7V,高压的有4.2V,4.35V,高压电池一般是平板之类的才会用到,手机大多数是低压的。关机电压就需要根据电池的规格书来通过曲线分析。电池是手机最重要的一部分,没电搞毛线啊,UI再牛逼,有什么用。。。。但是要弄清电池算法,还是比较复杂的,在搞清楚电量算法之前,先从添加一块电池说起。。。

1.首先拿到电池曲线和截止电压对应的acc,对应电池的规格书。
现在有专门测试电池的软件,充放电过程,测试一个电池的充放电过程,大概需要一个星期左右,那么测试完成后会生成两个文件,一个是截止电压对应的acc,一个是dtsi,有了这两个文件,就足够了。
eg:
static struct ibat_temp_acc_lut ibat_temp_acc = {
.rows = 6,
.cols = 3,
.temp = {-20,0,25},
.ibat = {2,1.5,1,0.8,0.5,0},
.cutoff_mv = 3600, //截止电压
.acc = { //对应的ibat-acc-lut
{11,1372,3002},
{17,1948,3458},
{90,2903,3752},
{180,3296,3878},
{714,3740,3962},
{3952,4008,4016},
},
}
};
上面就是截止电压为3.6V时对应的acc。
2.按一定的规范修改电池曲线设备树。注意rbatt-sf-lut项的对应个数。若不够,在其他文件复制一个,参照上面两个文件编写一个*.dtsi文件。

3.电池曲线设备树修改好后,修改qpnp-vm-bms.c(这个文件什么用呢?下一篇再说)添加该电池,,若兼容几块电池,注意匹配的交叉、重合。

到此,电池添加就完成了。

eg:
一. kernel/arch/arm64/boot/dts/chinachip/msm8916-mtp.dtsi
/ { //GG_4v2
mtp_batterydata: qcom,battery-data {
qcom,rpull-up-kohm = <100>;
qcom,vref-batt-therm = <1800000>;
- #include "batterydata-GG-4V2-6000mah.dtsi"
+ #include "batterydata-GG-4V2-4000mah.dtsi"
+ };
+};
+
+/ { //SKS_4v2
+ mtp_batterydata_sks: qcom,battery-data-sks {
+ qcom,rpull-up-kohm = <100>;
+ qcom,vref-batt-therm = <1800000>;
+ #include "batterydata-SKS-4V2-4000mah.dtsi"
};
};
@@ -482,6 +493,7 @@
qcom,battery-data-tg = <&mtp_batterydata_tg>;
qcom,battery-data-gg = <&mtp_batterydata_gg>;
qcom,battery-data-sk = <&mtp_batterydata_sk>;
+ qcom,battery-data-sks = <&mtp_batterydata_sks>;
qcom,resume-soc = <99>;
qcom,use-reported-soc;
qcom,charger-detect-cv;


@@ -129,8 +129,8 @@
#define BATT_ID_MAX_SK_4V35 1530000
#define BATT_ID_MIN_GG_4V35 1100000
#define BATT_ID_MAX_GG_4V35 1300000
-#define BATT_ID_MIN_TG_4V35 800000
-#define BATT_ID_MAX_TG_4V35 1000000
+#define BATT_ID_MIN_SKS_4V2 800000
+#define BATT_ID_MAX_SKS_4V2 1000000
二, kernel/drivers/power/qpnp-vm-bms.c
int64_t read_battery_id_for_smb;
@@ -3554,10 +3554,10 @@ static int set_battery_data(struct qpnp_bms_chip *chip)
node = of_find_node_by_name(chip->spmi->dev.of_node,
"qcom,battery-data-gg");
pr_err("BMS 4.35V found");
- }else if (battery_id > BATT_ID_MIN_TG_4V35 && battery_id < BATT_ID_MAX_TG_4V35){
+ }else if (battery_id > BATT_ID_MIN_SKS_4V2 && battery_id < BATT_ID_MAX_SKS_4V2){
node = of_find_node_by_name(chip->spmi->dev.of_node,
- "qcom,battery-data-tg");
- pr_err("BMS 4.35V found");
+ "qcom,battery-data-sks");
+ pr_err("BMS 4.2V found");
}else if (battery_id > BATT_ID_MIN_SK_4V35 && battery_id < BATT_ID_MAX_SK_4V35){
node = of_find_node_by_name(chip->spmi->dev.of_node,
"qcom,battery-data-sk");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值