华为充电管理系统架构
一、概述
本报告分析华为Mate X5(代号"charlotte")的充电管理系统架构,该系统位于Linux内核的kernel/drivers/hwpower/目录下,是一个高度模块化、基于事件驱动和投票机制的复杂电源管理系统。
二、整体架构
2.1 分层架构
华为充电管理系统架构设计:
简单:
┌─────────────────────────────────────┐
│ 用户空间接口层 │
│ (sysfs、uevent、power_supply) │
├─────────────────────────────────────┤
│ 业务逻辑管理层 │
│ (charge_manager、battery_core) │
├─────────────────────────────────────┤
│ 协议与算法层 │
│ (protocol、algorithm、vote) │
├─────────────────────────────────────┤
│ 硬件抽象与驱动层 │
│ (hardware_ic、channel、coul) │
└─────────────────────────────────────┘复杂:
╔══════════════════════════════════════════════════════════════════════════════╗
║ 用户空间 (User Space) ║
║ ┌─────────────┬──────────────┬──────────────┬─────────────┬──────────────┐ ║
║ │ 充电应用 │ 电池UI │ 系统设置 │ 电源管理 │ 认证服务 │ ║
║ │ (Charge App)│ (Battery UI) │ (Settings) │ (PowerMgr) │ (Power Genl) │ ║
║ └─────────────┴──────────────┴──────────────┴─────────────┴──────────────┘ ║
╚══════════════════════════════════════════════════════════════════════════════╝
↕ (sysfs/ioctl/netlink)
╔══════════════════════════════════════════════════════════════════════════════╗
║ 内核空间 (Kernel Space) ║
║ drivers/hwpower/ ║
╠══════════════════════════════════════════════════════════════════════════════╣
║ ║
║ ┌────────────────────────────────────────────────────────────────────────┐ ║
║ │ 业务逻辑管理层 │ ║
║ │ ┌──────────────────────────────────────────────────────────────────┐ │ ║
║ │ │ cc_charger/ - 充电管理器 (Charge Manager) │ │ ║
║ │ │ ├─ charge_manager.c [充电总控制器] │ │ ║
║ │ │ ├─ buck_charge/ [标准Buck充电: 5V/9V/12V] │ │ ║
║ │ │ ├─ direct_charge/ [直充: SCP/FCP/PD/UFCS 40W-135W] │ │ ║
║ │ │ ├─ wireless_charge/ [无线充电: Qi/AFC/私有协议] │ │ ║
║ │ │ └─ hvdcp_charge/ [高压充电] │ │ ║
║ │ └──────────────────────────────────────────────────────────────────┘ │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ↕ ║
║ ┌────────────────────────────────────────────────────────────────────────┐ ║
║ │ 协议层 (Protocol Layer) │ ║
║ │ ┌──────────────────────────────────────────────────────────────────┐ │ ║
║ │ │ cc_protocol/ │ │ ║
║ │ │ ├─ adapter_protocol/ [适配器协议抽象] │ │ ║
║ │ │ │ ├─ adapter_protocol.c [协议路由层] │ │ ║
║ │ │ │ ├─ adapter_protocol_scp/ [SCP: 25-135W, I2C/D+D-] │ │ ║
║ │ │ │ ├─ adapter_protocol_fcp/ [FCP: 18-36W, D+D-] │ │ ║
║ │ │ │ ├─ adapter_protocol_pd/ [PD: 15-240W, Type-C] │ │ ║
║ │ │ │ ├─ adapter_protocol_ufcs/ [UFCS: 统一快充标准 CCSA] │ │ ║
║ │ │ │ └─ adapter_protocol_uvdm/ [UVDM: 华为私有PD VDM] │ │ ║
║ │ │ └─ wireless_protocol/ [无线充电协议] │ │ ║
║ │ └──────────────────────────────────────────────────────────────────┘ │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ↕ ║
║ ┌────────────────────────────────────────────────────────────────────────┐ ║
║ │ 硬件抽象层 (Hardware Abstraction Layer) │ ║
║ │ ┌───────────────────────┬────────────────────┬────────────────────┐ │ ║
║ │ │ cc_hardware_ic/ │ cc_hardware_channel/│ cc_adapter/ │ │ ║
║ │ │ [硬件IC驱动] │ [硬件通道] │ [适配器检测] │ │ ║
║ │ ├───────────────────────┼────────────────────┼────────────────────┤ │ ║
║ │ │ • charger_ic/ │ • charger_channel/ │ • adapter_detect.c│ │ ║
║ │ │ (充电IC驱动) │ (充电器通道) │ • adapter_sysfs.c │ │ ║
║ │ │ • protocol_ic/ │ • vbus_channel/ │ • adapter_test.c │ │ ║
║ │ │ (协议IC: SCP芯片) │ (VBUS通道) │ │ │ ║
║ │ │ • charge_pump/ │ • wired_channel_ │ │ │ ║
║ │ │ (电荷泵: 2:1/4:1) │ switch/ │ │ │ ║
║ │ │ • switch_capacitor/ │ (有线通道切换) │ │ │ ║
║ │ │ (开关电容) │ • power_sw/ │ │ │ ║
║ │ │ • fuel_gauge/ │ (功率开关) │ │ │ ║
║ │ │ (库仑计芯片) │ • dischg_boost/ │ │ │ ║
║ │ │ • wireless_charge_ic/ │ (放电升压) │ │ │ ║
║ │ │ (无线充电IC) │ │ │ │ ║
║ │ │ • buck_boost/ │ │ │ │ ║
║ │ │ • boost_5v/ │ │ │ │ ║
║ │ │ • load_switch/ │ │ │ │ ║
║ │ └───────────────────────┴────────────────────┴────────────────────┘ │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ↕ ║
║ ┌────────────────────────────────────────────────────────────────────────┐ ║
║ │ 监控与保护层 (Monitor & Protection Layer) │ ║
║ │ ┌──────────────────────────────────────────────────────────────────┐ │ ║
║ │ │ cc_hardware_monitor/ │ │ ║
║ │ │ ├─ temp_control/ [温度控制] │ │ ║
║ │ │ ├─ uscp/ [USB短路保护] │ │ ║
║ │ │ ├─ vbus_monitor/ [VBUS监控] │ │ ║
║ │ │ ├─ water_detect/ [进水检测] │ │ ║
║ │ │ ├─ water_check/ [进水检查] │ │ ║
║ │ │ ├─ btb_check/ [Board-to-Board连接检查] │ │ ║
║ │ │ ├─ lga_check/ [LGA连接检查] │ │ ║
║ │ │ ├─ acr_detect/ [交流阻抗检测] │ │ ║
║ │ │ ├─ bat_heating/ [电池加热] │ │ ║
║ │ │ ├─ ffc_control/ [快速充电控制] │ │ ║
║ │ │ ├─ soc_control/ [SOC控制] │ │ ║
║ │ │ ├─ soc_decimal/ [SOC小数显示] │ │ ║
║ │ │ ├─ cpu_buck/ [CPU Buck控制] │ │ ║
║ │ │ ├─ low_power/ [低功耗模式] │ │ ║
║ │ │ ├─ ship_mode/ [运输模式] │ │ ║
║ │ │ └─ smpl/ [突然掉电重启保护] │ │ ║
║ │ └──────────────────────────────────────────────────────────────────┘ │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ↕ ║
║ ┌────────────────────────────────────────────────────────────────────────┐ ║
║ │ 电池管理层 (Battery Management Layer) │ ║
║ │ ┌─────────────────────────┬──────────────────────────────────────┐ │ ║
║ │ │ cc_battery/ │ cc_coul/ │ │ ║
║ │ │ [电池核心管理] │ [库仑计/电量计量] │ │ ║
║ │ ├─────────────────────────┼──────────────────────────────────────┤ │ ║
║ │ │ • battery_core.c │ • coul_interface.c │ │ ║
║ │ │ (电池核心) │ (库仑计接口) │ │ ║
║ │ │ • battery_1s2p/ │ • coul_calibration.c │ │ ║
║ │ │ (1串2并电池) │ (库仑计校准) │ │ ║
║ │ │ • battery_cccv/ │ • coul_nv_pool.c │ │ ║
║ │ │ (恒流恒压) │ (NV数据池) │ │ ║
║ │ │ • battery_charge_ │ • coul_sysfs.c │ │ ║
║ │ │ balance/ │ (sysfs接口) │ │ ║
║ │ │ (充电均衡) │ │ │ ║
║ │ │ • battery_fault/ │ │ │ ║
║ │ │ (电池故障) │ │ │ ║
║ │ │ • battery_model/ │ │ │ ║
║ │ │ (电池建模) │ │ │ ║
║ │ │ • battery_ocv/ │ │ │ ║
║ │ │ (开路电压) │ │ │ ║
║ │ │ • battery_soh/ │ │ │ ║
║ │ │ (电池健康度) │ │ │ ║
║ │ │ • battery_temp/ │ │ │ ║
║ │ │ (电池温度) │ │ │ ║
║ │ │ • battery_type_identify/│ │ │ ║
║ │ │ (电池类型识别) │ │ │ ║
║ │ │ • battery_ui_capacity/ │ │ │ ║
║ │ │ (UI电量显示) │ │ │ ║
║ │ └─────────────────────────┴──────────────────────────────────────┘ │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ↕ ║
║ ┌────────────────────────────────────────────────────────────────────────┐ ║
║ │ 基础服务层 (Infrastructure Layer) │ ║
║ │ ┌──────────────────────────────────────────────────────────────────┐ │ ║
║ │ │ cc_common_module/ - 公共模块 │ │ ║
║ │ │ ├─ power_event/ [事件通知机制: notifier chain] │ │ ║
║ │ │ ├─ power_genl/ [Netlink通信: 用户态交互] │ │ ║
║ │ │ ├─ power_sysfs/ [sysfs接口] │ │ ║
║ │ │ ├─ power_supply/ [电源子系统接口] │ │ ║
║ │ │ ├─ power_i2c/ [I2C总线封装] │ │ ║
║ │ │ ├─ power_gpio/ [GPIO控制] │ │ ║
║ │ │ ├─ power_dts/ [设备树解析] │ │ ║
║ │ │ ├─ power_printk/ [日志打印] │ │ ║
║ │ │ ├─ power_dsm/ [设备状态监控] │ │ ║
║ │ │ ├─ power_bigdata/ [大数据上报] │ │ ║
║ │ │ ├─ power_algorithm/ [算法库] │ │ ║
║ │ │ ├─ power_calibration/ [校准服务] │ │ ║
║ │ │ ├─ power_vote/ [投票机制] │ │ ║
║ │ │ ├─ power_interface/ [接口抽象] │ │ ║
║ │ │ ├─ power_devices_info/ [设备信息] │ │ ║
║ │ │ ├─ power_temp/ [温度管理] │ │ ║
║ │ │ ├─ power_time/ [时间服务] │ │ ║
║ │ │ ├─ power_wakeup/ [唤醒锁] │ │ ║
║ │ │ ├─ power_ui/ [UI交互] │ │ ║
║ │ │ ├─ power_icon/ [图标管理] │ │ ║
║ │ │ ├─ power_delay/ [延迟服务] │ │ ║
║ │ │ ├─ power_firmware/ [固件管理] │ │ ║
║ │ │ ├─ power_pinctrl/ [引脚控制] │ │ ║
║ │ │ ├─ power_pwm/ [PWM控制] │ │ ║
║ │ │ ├─ power_ioctl/ [ioctl接口] │ │ ║
║ │ │ ├─ power_cmdline/ [命令行参数] │ │ ║
║ │ │ ├─ power_debug/ [调试工具] │ │ ║
║ │ │ ├─ power_test/ [测试框架] │ │ ║
║ │ │ └─ power_thermalzone/ [热区管理] │ │ ║
║ │ └──────────────────────────────────────────────────────────────────┘ │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌────────────────────────────────────────────────────────────────────────┐ ║
║ │ 配件与隔离层 (Accessory Layer) │ ║
║ │ ┌──────────────────────────────────────────────────────────────────┐ │ ║
║ │ │ cc_accessory/ [充电配件] │ │ ║
║ │ │ └─ wireless_lightstrap/ [无线充电配件] │ │ ║
║ │ │ cc_isolation/ [隔离保护] │ │ ║
║ │ └──────────────────────────────────────────────────────────────────┘ │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
╚══════════════════════════════════════════════════════════════════════════════╝
↕
╔══════════════════════════════════════════════════════════════════════════════╗
║ 硬件层 (Hardware Layer) ║
║ ┌────────────┬──────────────┬────────────┬──────────────┬──────────────┐ ║
║ │ USB Type-C │ 充电IC │ 协议IC │ 库仑计芯片 │ 电池组 │ ║
║ │ (PD PHY) │ (Buck/CP/SC) │ (SCP/UFCS) │ (Fuel Gauge) │ (Battery) │ ║
║ └────────────┴──────────────┴────────────┴──────────────┴──────────────┘ ║
╚══════════════════════════════════════════════════════════════════════════════╝2.2 目录结构
hwpower/
├── cc_accessory/ # 配件管理(无线光带等)
├── cc_adapter/ # 适配器检测与管理
├── cc_battery/ # 电池管理核心
│ ├── battery_core.c # 电池核心逻辑
│ ├── battery_1s2p/ # 1串2并电池管理
│ ├── battery_cccv/ # CC/CV充电控制
│ ├── battery_charge_balance/# 电荷平衡
│ ├── battery_fault/ # 电池故障检测
│ ├── battery_model/ # 电池模型管理
│ ├── battery_ocv/ # 开路电压管理
│ ├── battery_soh/ # 电池健康度
│ ├── battery_temp/ # 温度管理
│ ├── battery_type_identify/ # 电池类型识别
│ └── battery_ui_capacity/ # UI电量显示
├── cc_charger/ # 充电器管理
│ ├── charge_manager.c # 充电管理器
│ ├── buck_charge/ # Buck充电模式
│ ├── direct_charge/ # 直充模式(SCP/LVC)
│ ├── hvdcp_charge/ # HVDCP快充
│ ├── wireless_charge/ # 无线充电
│ └── common/ # 公共接口
├── cc_common_module/ # 公共模块
│ ├── power_event/ # 事件管理
│ ├── power_vote/ # 投票机制
│ ├── power_algorithm/ # 算法库
│ ├── power_supply/ # 电源供应接口
│ └── ... # 其他公共模块
├── cc_coul/ # 电量计管理
├── cc_hardware_channel/ # 硬件通道
├── cc_hardware_ic/ # 硬件IC驱动
├── cc_isolation/ # 隔离保护
└── cc_protocol/ # 充电协议三、核心组件分析
3.1 电池管理核心 (cc_battery)
battery_core:电池系统的核心控制器,负责:
- 电池状态监控(存在性、充电状态、健康度)
- 温度补偿与NTC校准
- 容量等级管理
- 多电池系统支持(主/辅电池) 关键子模块:
- battery_1s2p:1串2并电池拓扑管理
- battery_cccv:恒流恒压充电算法
- battery_charge_balance:串并联电池电荷平衡
- battery_model:电池模型与参数管理
- battery_soh:电池健康度计算与预测
3.2 充电器管理 (cc_charger)
charge_manager:充电系统的总调度器,负责:
- 充电模式选择(Buck、直充、无线)
- 充电状态机管理
- 协议协商与适配器识别
- 故障处理与安全保护 充电模式:
- Buck Charge:传统降压充电,支持普通充电器
- Direct Charge:直充模式,支持SCP/LVC快充
- HVDCP:高电压快充协议
- Wireless Charge:无线充电管理
3.3 公共模块 (cc_common_module)
power_event:事件驱动框架,定义了大量电源相关事件:
- 连接/断开事件(USB、无线、OTG)
- 充电状态事件(开始、停止、完成、故障)
- 温度与保护事件
- 协议协商事件 power_vote:投票决策机制,用于多客户端参数协商:
- FCC(满充容量)投票
- ICL(输入电流限制)投票
- 电压与温度阈值投票
四、通信机制
4.1 事件通知机制
系统采用Linux内核的notifier机制实现组件间通信:
c
// 事件类型定义(超过200种事件)
enum power_event_ne_type {
POWER_NE_USB_CONNECT, // USB连接
POWER_NE_USB_DISCONNECT, // USB断开
POWER_NE_CHARGING_START, // 充电开始
POWER_NE_CHARGING_STOP, // 充电停止
POWER_NE_DC_LVC_CHARGING, // LVC直充
POWER_NE_DC_SC_CHARGING, // SC直充
// ... 其他事件
};
// 事件通知接口
int power_event_bnc_notify(unsigned int bnt_type,
unsigned int event_type,
void *data);4.2 投票决策机制
系统采用客户端投票机制进行参数决策:
c
// 投票客户端定义
enum vote_client_type {
VOTE_CLIENT_THERMAL, // 温控客户端
VOTE_CLIENT_USER, // 用户配置
VOTE_CLIENT_JEITA, // JEITA温度规范
VOTE_CLIENT_BASP, // 电池保护
VOTE_CLIENT_DC, // 直充模块
VOTE_CLIENT_CABLE, // 线缆检测
VOTE_CLIENT_ADAPTER, // 适配器能力
// ... 其他客户端
};
// 投票表结构
struct vote_table {
int type; // 投票类型
const char *name; // 客户端名称
int value; // 投票值
bool enabled; // 是否启用
};4.3 硬件抽象接口
系统通过操作接口抽象硬件差异:
c
// 电量计接口
struct coul_interface_ops {
int (*is_coul_ready)(void *dev_data);
int (*is_battery_exist)(void *dev_data);
int (*get_battery_capacity)(void *dev_data);
int (*get_battery_temperature)(void *dev_data);
int (*get_battery_voltage)(void *dev_data);
int (*get_battery_current)(void *dev_data);
// ... 其他操作
};
// 充电IC接口
struct buck_charge_ic_ops {
int (*set_charge_current)(void *dev_data, int value);
int (*set_input_current)(void *dev_data, int value);
int (*set_charge_voltage)(void *dev_data, int value);
int (*set_terminal_current)(void *dev_data, int value);
// ... 其他操作
};五、组件联系图

六、工作流程
6.1 充电启动流程
适配器插入检测
↓
协议握手(PD/SCP/FCP/UFCS)
↓
充电模式选择(投票决策)
↓
参数配置(电流/电压/温度)
↓
充电状态监控
↓
故障检测与保护6.2 事件处理流程
硬件中断触发(连接/断开/故障)
↓
驱动层事件生成
↓
事件系统分发
↓
订阅者处理
↓
状态更新与反馈6.3 投票决策流程
客户端提出参数需求
↓
投票系统收集所有客户端意见
↓
根据优先级和规则进行决策
↓
应用最终参数到硬件
↓
监控效果并动态调整七、关键技术特点
7.1 模块化设计
- 每个功能模块独立,便于维护和扩展
- 通过接口抽象硬件差异
- 支持热插拔和动态配置
7.2 事件驱动架构
- 异步事件处理,提高响应速度
- 松耦合设计,降低模块间依赖
- 支持事件订阅和广播
7.3 投票决策机制
- 多客户端参数协商
- 优先级和权重管理
- 动态调整和优化
7.4 安全保护体系
- 多层次故障检测
- 温度、电压、电流保护
- 软件硬件双重保护
八、总结
华为充电管理系统是一个高度复杂、模块化、事件驱动的电源管理架构,具有以下核心优势:
- 分层架构:清晰的层次划分,便于理解和维护
- 模块化设计:功能模块独立,支持灵活扩展
- 事件驱动:异步处理,响应迅速
- 投票决策:多客户端协商,优化参数配置
- 安全可靠:多层次保护,确保充电安全