MTK Pump Express快充驱动:从DTS配置到电流调优的实战解析 1. MTK Pump Express快充技术基础MTK Pump Express是联发科推出的专有快充协议通过动态调整充电电压和电流实现快速充电。与常见的5V/2A普通充电相比Pump Express 2.0最高支持9V/2A18W而Pump Express 3.0更可实现20W以上的快充功率。在实际项目中我们常用的是外置充电IC方案如MT6370。与PMIC内置的线性充电相比外置方案有三个明显优势支持更大充电电流通常可达3A以上发热控制更好支持更丰富的充电协议硬件准备 checklist确认原理图中充电IC型号如MT6370检查VBUS通路上的MOS管规格验证充电接口的CC引脚配置确保温度检测NTC电路正常工作2. DTS关键配置解析以MT6370为例驱动配置主要涉及两个文件mt6370.dtsi定义充电IC基础参数项目名.dtsi配置具体充电参数2.1 中断与GPIO配置// mt6370.dtsi示例 mt6370 { compatible mediatek,mt6370; intr_gpio_num 11; /* GPIO编号 */ intr_gpio pio 11 0x0; /* GPIO控制器配置 */ /* 充电参数 */ aicr 2000000; /* 输入电流限制2A */ mivr 4200000; /* 最小输入电压4.2V */ };同步需要在DWS文件中配置GPIO属性gpio11 eint_modetrue/eint_mode def_mode0/def_mode inpull_entrue/inpull_en inpull_selhightrue/inpull_selhigh def_dirIN/def_dir out_highfalse/out_high varName0GPIO_SUBPMIC_IRQB_EINT_PIN/varName0 smtfalse/smt iestrue/ies /gpio112.2 充电参数配置在项目dtsi文件中需要设置/* charging current */ usb_charger_current 500000; /* USB模式500mA */ ac_charger_current 2000000; /* AC模式2A */ ta_ac_charger_current 2000000; /* 快充模式2A */ /* 电压保护阈值 */ min_charger_voltage 4200000; battery_cv 4350000; /* 电池满电电压 */3. 驱动层关键参数调优3.1 电流控制逻辑在mtk_basic_charger.c中关键函数调用链select_charging_current_limit() → charger_dev_run_aicl() // 自动输入电流限制 → set_mivr() // 最小输入电压调节 → set_charging_current() // 最终电流设置实测中遇到的典型问题电流震荡通常是因为MIVR设置过高导致频繁触发输入限压充电中断检查GPIO中断触发方式边沿/电平电流不达标确认充电器识别是否正确3.2 动态参数调整通过sysfs接口实时调整参数# 查看当前充电状态 cat /sys/class/power_supply/battery/status # 动态修改输入电流限制单位uA echo 1500000 /sys/class/power_supply/battery/input_current_max4. 常见问题排查指南4.1 充电图标不显示排查步骤确认mt6370_intr_gpio配置正确检查内核日志是否有充电IC初始化失败提示测量VBUS电压是否正常4.5-5.5V验证I2C通信是否正常4.2 电流不达标问题典型原因及解决方案现象可能原因解决方法电流始终1A充电器未识别为快充检查D/D-电压电流波动大线缆阻抗过高更换AWG24以上线缆大电流时重启电源路径阻抗大检查VBUS通路MOS管4.3 温度相关异常在驱动中添加调试打印pr_info(BAT Temp%d, Charger Temp%d\n, battery_meter_get_battery_temperature(), charger_get_temperature());温度保护策略建议45℃降低电流50%50℃停止充电60℃触发硬件保护5. 进阶调优技巧5.1 EOC充电截止优化默认配置ieoc 200000; /* 截止电流200mA */对于大容量电池4000mAh建议改为ieoc 150000; /* 降低截止电流提高满充度 */5.2 充电曲线优化通过分段电流控制提升充电效率static void set_charging_profile(struct charger_manager *info) { int soc battery_get_soc(); if (soc 50) { set_charging_current(2000000); // 2A快充 } else if (soc 80) { set_charging_current(1500000); // 1.5A缓充 } else { set_charging_current(500000); // 500mA涓流 } }5.3 日志分析技巧关键日志标记[ 123.456789] chr_debug: input_current_limit2000mA [ 123.456790] chr_debug: battery_voltage3800mV [ 123.456791] chr_warn: thermal_throttling trigger建议在defconfig开启CONFIG_MTK_CHARGER_DEBUGy CONFIG_MTK_BATTERY_LOGy6. 硬件设计注意事项PCB布局要点充电IC尽量靠近USB接口VBUS走线宽度≥1mmNTC走线需做屏蔽处理元件选型建议充电接口支持3A以上电流保险丝采用可恢复式滤波电容低ESR陶瓷电容测试验证项目插入不同充电器的识别情况边充电边放电的稳定性高温环境下的充电降额策略