华为电池核心之battery_1s2p模块
一、模块概述
battery_1s2p 是华为电源管理子系统中的双电池并联管理驱动,专门用于处理 1S2P(1串2并)电池配置场景。该模块实现了双电池的智能融合算法,通过加权计算提供统一的 SOC、电压、电流等参数,对外呈现为单一电池系统。
核心功能:
双电池独立监控(主电池 BAT_MAIN + 辅助电池 BAT_AUX)
基于电压阈值的动态加权 SOC 融合算法
容量比例配置与管理
双电池差异检测与故障报告(DSM/DMD)
自适应监控间隔调整
统一 coul_interface_ops 接口实现
二、主要数据结构
2.1 每电池信息结构体 battery_info
说明:
cap_ratio: 该电池在总容量中的占比(默认 50%,即两电池容量相同)weight_chg/weight_dischg: 三段式权重因子,对应不同电压区间:[0]: 电压 < volt_low 时的权重[1]: volt_low ≤ 电压 < VOLT_HIGH_THRESHOLD 时的权重[2]: 电压 ≥ VOLT_HIGH_THRESHOLD 时的权重
2.2 主设备结构体 bat_1s2p_device
三、核心算法
1. 加权 SOC 融合算法 bat_1s2p_get_mix_soc()
算法流程:
权重选择逻辑:
| 电压区间 | 权重数组索引 | 说明 |
|---|---|---|
| 电压 < volt_low | weight_xxx[0] | 低电压区,电池特性差异大 |
| volt_low ≤ 电压 < VOLT_HIGH_THRESHOLD (4200mV) | weight_xxx[1] | 中等电压区 |
| 电压 ≥ VOLT_HIGH_THRESHOLD | weight_xxx[2] | 高电压区,接近满电 |
充放电状态判断:
充电状态:优先使用
weight_chg数组放电状态:优先使用
weight_dischg数组
示例权重配置(DTS):
2. 监控间隔自适应算法 bat_1s2p_select_work_interval()
| SOC 范围 | 监控间隔 |
|---|---|
| SOC < 10% | 10 秒 |
| 10% ≤ SOC < 90% | 60 秒 |
| SOC ≥ 90% | 10 秒 |
设计理念: 在电量极低/极高时提高监控频率,确保准确捕捉关键状态变化。
3. 故障检测算法 bat_1s2p_detect_fault_send_dmd()
检测项:
电池缺失检测: 任一电池 SOC ≤ 0% 时判定为缺失
容量差异检测:
|主电池SOC - 辅助电池SOC| > cap_diff_thr时触发告警
DMD 上报:
四、coul_interface_ops 接口实现
核心接口映射表
| 接口函数 | 实现策略 | 说明 |
|---|---|---|
read_battery_soc | 加权融合 | 调用 bat_1s2p_get_mix_soc() |
read_battery_vol | 按 vol_type 选择 | 主电池/辅助电池/最大/最小/平均 |
read_battery_current | 求和 | 主电池电流 + 辅助电池电流 |
read_battery_fcc | 按容量比加权 | 主电池FCC × 主电池占比 + 辅助电池FCC × 辅助电池占比 |
read_battery_cycle | 按 cycle_type 选择 | 主电池/辅助电池/最大/最小/平均 |
get_battery_temperature | 调用 battery_temp 接口 | bat_temp_get_temperature(temp_type) |
vol_type 电压查询类型
五、DTS 配置
配置示例
参数说明
| DTS 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
cap_ratio_X | u32 | 50 | 第 X 个电池容量占比(0-100) |
weight_factor_chg_X | u32[3] | 无 | 充电权重因子数组(必须配置) |
weight_factor_dischg_X | u32[3] | 无 | 放电权重因子数组(必须配置) |
volt_low | u32 | 3500mV | 低电压阈值 |
cap_diff_thr | u32 | 5% | 容量差异告警阈值 |
六、监控机制
6.1 工作队列 bat_1s2p_monitor_work()
执行流程:
6.2 SOC 平滑算法
七、驱动生命周期
7.1 初始化流程 bat_1s2p_probe()
内存分配:
devm_kzalloc()分配设备结构体DTS 解析:
bat_1s2p_parse_dts()读取配置参数资源初始化:
注册 wakelock(防止休眠期间异常)
初始化互斥锁
mutex_init()初始化延迟工作队列
INIT_DELAYED_WORK()
双电池信息初始化:
bat_1s2p_init_info()启动监控: 调度第一次工作队列
注册 coul 接口:
coul_interface_ops_register(&g_1s2p_ops)
7.2 电源管理
7.3 模块加载优先级
八、调试技巧
8.1 查看实时混合 SOC
8.2 动态调整监控间隔测试
修改 battery_1s2p.c 中的阈值:
8.3 监控 DMD 告警
常见日志:
8.4 验证加权算法
在 battery_1s2p.c 末尾添加日志:
九、关键宏定义
十、总结
battery_1s2p.c 通过多维度加权融合算法将双电池系统抽象为单一电池,核心亮点包括:
自适应权重机制: 根据电压区间和充放电状态动态调整融合权重
智能监控策略: 在关键 SOC 区间提高监控频率,平衡性能与功耗
容错设计: 通过 DMD 机制及时发现电池缺失或异常差异
灵活配置: 支持 DTS 动态配置容量比例、权重因子等参数
该模块是华为折叠屏等多电池设备的核心电源管理组件,确保了双电池系统的可靠性和用户体验一致性。