ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MTK私有快充协议PE+2.0:VBUS脉动调压原理与调试实战

MTK私有快充协议PE+2.0:VBUS脉动调压原理与调试实战 最近正好在折腾一个MTK平台的充电方案里里外外把PE2.0的协议流程、硬件接线和软件状态机翻了一遍。很多人一听到“MTK快充”就以为只有QC或者PD兼容方案实际上联发科自己的私有快充协议Pump ExpressPE存在感虽然越来越低但在不少中低端项目里仍然是主力尤其是PE2.0这一代兼容性、成本、实现难度都有它独有的位置。这篇就把我对PE2.0的理解和踩坑记录整理出来给准备调试MTK充电方案、或者想弄明白快充握手逻辑的工程师一点参考。PE2.0全称Pump Express Plus 2.0是联发科在Pump Express基础上进化出来的快充协议。它解决的核心问题很简单让充电器在充电过程中能够动态调高输出电压从而在不需要大幅增加线缆电流的前提下提高充电功率减少充电时间。相比高通的Quick ChargePE2.0的握手方式完全不同走的是VBUS电流脉动而不是D/D-引脚上的电压变化这也让它在硬件设计上少了几根信号线的牵扯。下面按我的理解从头拆开讲。1. 先从认识PE2.0开始1.1 PE2.0到底是哪一代联发科自有快充脉络其实有点容易记混。最早的是Pump Express支持5V/2A这种比较基础的水平之后是Pump Express Plus也就是PE支持到9V/1.67A、12V/1.25A这类高电压档位再往后是Pump Express Plus 2.0也就是这里说的PE2.0这一代把Type-C接口的适配、电流能力的提升都补上了。在PE2.0之后还有Pump Express 3.0/4.0不过后者已经是另一个方向的演进直接走Type-C的CC线通信更像PD的思路。PE2.0本身定位于“低成本、低压大电流/中压中电流”的折中方案。它的典型输出档位可以覆盖5V、7V、9V、12V四档最大电流能力则看充电器和平台早期很多方案做到3A后面也出现过支持5A的变种。虽然联发科官方文档里很少像PD那样把所有档位组合列成一张大表但从实际项目来看PE2.0的充电器多数是按“支持多级电压输出电流最大不超过3A到5A范围”来设计的。站在工程师角度我更愿意把它理解成一种“电压阶梯式协商”的私有快充充电器本身是一颗支持多级电压输出的ACDC电源而手机端通过控制VBUS上的电流脉冲来“告诉”充电器现在要升到哪一档电压。它没有复杂的状态机广播也没有加密握手低成本、容易实现但安全性上相对薄弱这也是后来被PE3.0/PD替换的原因之一。1.2 和QC、PD放在一个擂台比一比很多人会拿PE2.0和QC2.0、PD2.0作对比因为它们的时间段和定位确实接近。QC2.0使用的是D/D-电压组合来协商档位比如D 0.6V、D- 0.6V对应5VD 3.3V、D- 3.3V对应12V等等。PD2.0则走Type-C的CC线用BMC编码传递功率协商消息逻辑复杂但扩展性强。PE2.0不走任何信号线它是把VBUS本身作为“信号通道”通过插入特定时间长度和脉冲次数的电流负载来请求升压。三种协议对比下来PE2.0的最大优势是省引脚、省逻辑。手机端不需要额外接入D/D-检测电路也基本不需要一颗独立的PD协议芯片只要充电IC的VBUS路径上能检测电流、能控制负载通断就能实现。缺点是它抗干扰能力差握手过程中VBUS上的任何毛刺、负载突变或者线材阻抗异常都可能导致协商失败另外它的协议是联发科私有跟其他家的充电头兼容性不好。从结果上看QC和PD都形成了跨平台生态而PE2.0基本只存在于MTK方案的原装充电器和少数第三方配件里。因为不是强制认证很多第三方充电头虽然也叫“支持PE2.0”实际兼容性参差不齐这都是后话。2. PE2.0的握手机制与调压原理2.1 VBUS上的“暗号”三段式电流协议PE2.0的握手过程靠的是充电IC按照协议在VBUS上间歇性抽取电流形成一个个可检测的“电流脉冲”。充电器内部的检测电路会持续监测输出电流当识别到符合协议规定的脉冲序列时就会调整输出电压到指定档位。我试着拆一下这个过程。手机插入充电器后充电器先默认输出5V。手机端的充电IC此时处于初始状态主控通过I2C配置充电IC进入PE协议检测模式。然后充电IC以一定的周期拉开一个负载比如从几十毫安跳到几百毫安持续一段时间再关断形成一组电流脉冲。充电器端检测到这些脉冲后回读自己的输出电压状态按照协议规定将输出电压切换到下一档比如从5V升到7V或者从7V升到9V。这里说的“三段式”是我自己总结的更准确的说法是协议里有几个关键状态初始检测detect、电压阶梯上升step up、电压阶梯下降step down。检测阶段会有一个特定脉冲序列验证对方是不是支持PE2.0的充电器通过验证之后再根据充电策略请求升压到合适档位如果中途识别到VBUS异常则降回5V重来。实际调试时最好用带电流监测功能的电子负载和示波器同时抓VBUS电压和电流波形。我自己第一次调试的时候就吃了个亏只盯着电压看以为电压升高就是握手成功了结果电流波形完全乱套后来发现是充电IC的脉冲参数没有匹配上充电器的检测阈值。2.2 电压阶梯与回退策略PE2.0的电压调整不是无级变速而是按照档位跳变。典型的档位是5V、7V、9V、12V。在一次完整充电过程中手机端会根据当前电池电压和充电策略决定请求哪个档位。例如电池电压低于某阈值时请求12V档实现大功率快充随着电池电压升高又回落到9V或者7V避免在满电附近因为压差过大导致发热失控。升压请求做起来相对简单难的是回退策略。因为PE2.0没有独立信号线反馈回退也是靠VBUS上的电流脉冲但这时候要冒一个风险如果充电器没能及时降档而手机关闭了负载VBUS电压可能会短暂反翘打掉后级的OVP。我遇到过不少次“降档瞬间VBUS冲到15V”的现象后来方案里专门加了dyn_mim_ovp和safety timer一起保护才算压住。回退策略里还有一个细节是“重复请求确认”。PE2.0协议里对某一档位的要求通常需要充电器在几个连续周期内都收到相同电流脉冲才真正执行切换而不是第一次就切。这个设计是为了抗干扰但也让调试变得更加考验时序。如果芯片寄存器里没有配置好确认窗口宽度很容易出现“档位切一半”的情况。2.3 硬件上谁在干活充电ICPMIC协议芯片从系统架构看PE2.0握手涉及的硬件包括电源路径上的充电IC、PMIC里的ADC和LDO以及负责状态控制的主控SoC/嵌入式控制器。充电IC负责VBUS电流检测、负载拉载和路径切换PMIC为充电IC提供I2C接口和参考电压主控运行PE2.0协议栈根据电池电压、温度、充电电流设定值决定下一步脉冲动作。MTK平台在软件上是有参考驱动的具体路径一般在kernel的power/mtk_charger目录或者vendor/mediatek/proprietary的模组里有pe_plus模块。这个模块会读取充电IC的寄存器值比如VBUS电压ADC、IBUS电流ADC、充电IC的状态位再通过GPIO或PMIC控制一个虚拟负载通常就是充电IC里的icurrent path来产生电流脉冲。我接触过的多数MTK方案PE2.0的检测负载都是直接复用充电IC本身的恒流/恒压环路让充电IC在“模拟负载模式”下工作通过调节目标电流拉出来一个精确的电流阶跃。这样做的好处是不需要额外增加大功率电阻坏处是充电IC在握手时不能同时给电池充电否则脉冲会被充电电流淹没主机必须把充电通路先关断。3. 一个实际项目里怎么把PE2.0调通3.1 原理图设计该留的引脚一个都不能少PE2.0虽然不依赖D/D-但硬连线上有几个关键节点需要留意。首先VBUS必须连接到充电IC的VBUS sense引脚用于实时监测输入电压其次充电IC的USB端口电流检测电阻要选得够准通常1%精度的10mΩ或者20mΩ采样电阻位置要靠近充电IC的引脚避免长走线带来的寄生电感干扰脉冲波形。很多参考设计里还会在VBUS到地之间预留一个ESD保护管和TVS这个在PE2.0项目里不是可选项而是必选项。因为握手时的电流脉冲通断会产生一定的电压振铃如果TVS响应速度太慢振铃可能直接打到电源管理芯片的耐压上限。我见过一个方案因为省略了TVS闪断测试时VBUS后级输入电容啸叫甚至在连续插拔时损坏了PMIC的电源轨查了很久才定位到是握手脉冲的瞬态过冲。还有一点容易被忽略的是充电IC的I2C上拉电源域。PE2.0握手过程频率高I2C通信频繁如果上拉电阻接到不稳定的LDO上电压跌落会导致寄存器写入失败。最稳妥的做法是上拉直接接VBUS稳定后的3.0V到3.3V电源树并且预留22pF对地电容帮助滤除噪声。3.2 软件配置要点充电状态机与异常保护软件方面要做的第一件事是把充电状态机配置成“允许Pump Express”。MTK原厂代码里一般有对应的config例如在mtk_charger的充电策略表中添加PE2.0支持。需要注意几个关键阈值Vbat_threshold电池电压门限、Ibat_threshold电池电流门限、以及IBUS最大输入电流限制。这些阈值决定了主控什么时候允许烧录脉冲去请求高档位什么时候必须回退到5V。我实际调过一个MT6739平台配置文件里PE2.0的初始条件写的是“电池电压低于3.4V时不允许进入快充”结果样机在3.45V时就反复握手失败。后来看了协议流程图才明白那是因为低于该电压时电池内阻较大脉冲拉载会让VBUS瞬间跌落到4.5V以下充电器误认为线缆异常。解决方法是把进入快充的最低电压提高到3.6V同时把握手时的VBUS最低维持电压寄存器配到4.2V左右。除了进入条件回退条件也一样重要。电池温度超过45度、输入电流超过限流点、或者充电IC上报OVP中断时软件必须立刻终止PE2.0握手并切到普通5V充电。如果这一层反应慢了轻则充不进电重则烧充电器。这里我建议开发者把PE2.0的终止逻辑放到中断上下文里处理而不是放进几十毫秒的轮询线程。比如充电IC的VBUS_OVP中断触发后直接在ISR里写寄存器关闭快充请求等系统确认安全后再恢复。3.3 实测波形怎么看VBUS电压与电流变化调试阶段最有效的工具是示波器加电流探头。把示波器带宽限制在20MHz采样率至少10MS/s重点抓两个位置VBUS对地电压以及VBUS串联电流。正常握手下你会看到VBUS一开始是5V然后充电IC开始周期性拉载电流波形上出现一串1Hz到几百Hz的方波脉冲每个脉冲宽度和间隔都有固定关系这就是“暗号”。当充电器识别到脉冲序列后VBUS电压会发生阶梯式跳变比如5V直接升到7V再升到9V。这个跳变过程一般需要几十毫秒到几百毫秒视充电器内部环路速度而定。如果电压上升沿附近出现了明显的过冲比如9V冲到了10V以上说明充电器端补偿不够或者手机端在升压瞬间没有把输入电容的充电电流限制好需要在软件里做一个“升压后延迟启动充电”的小延时。还有一种常见波形是电压已经升上去了但电流上不去。这时候要看充电IC是否进入CV限压模式如果VBUS一直稳在9V但IBUS只有0.5A大概率是充电IC的输入限流配置写错了或者电池充电电压门限偏低导致系统直接进入恒压阶段不需要那么大电流。4. 影响范围与兼容性为什么现在越来越少看到它4.1 充电头与线材的兼容性PE2.0对充电头的要求并不低。充电头既要支持多级电压输出又要具备足够灵敏的电流脉冲检测能力还要在负载切换时保持输出电压稳定。市面上很多所谓“兼容PE快充”的充电头检测电路做得很粗糙脉冲宽度识别窗口和V/I阈值偏差大导致握手成功率低。线材方面PE2.0对线阻极其敏感。线阻大了手机端拉载脉冲时VBUS电压下跌严重充电器端检测到的电流幅度不够就容易判断失败。所以调试时一定要用短线粗线24AWG甚至更粗的电源线。如果项目里发现PE2.0时好时坏先换一根高品质线材测试往往比改软件更有效。4.2 与PD、私有协议的较量手机端主控直接支持PD2.0/3.0和QC已经成为趋势Type-C接口默认就会跑PD协议。PE2.0作为私有协议没有公共标准组织推动在充电器侧的普及率一直上不去。PD拥有标准化的PDO/APDO协商机制从5V到20V甚至48V全覆盖而且支持角色互换、功率回灌等高级功能。PE2.0在电压档位上只有固定几档也没有精细的功率协商只适合“低成本的定点快充”场景。当Type-C口普及之后很多MTK平台干脆把PE2.0的代码裁剪掉只保留PD或者BC1.2。我见过不少项目虽然芯片支持PE2.0但客户要求直接disable因为认证麻烦、测试用例又多省掉可以降低很多沟通成本。4.3 生态碎片化的原因PE2.0没有形成统一认证体系是它衰落的重要原因。QC有高通官方的合规测试PD有USB-IF的认证流程而PE2.0基本靠联发科自己那一套文档和参考代码第三方充电器厂想做兼容只能自己摸索。这就导致市场上支持PE2.0的充电器要么是原厂配的要么是少数专门做兼容的工厂做的互操作性问题非常多。从开发者的角度这种碎片化带来最直接的影响就是测试量大。每次有新充电器样品回来都要跑一轮握手成功率、升压稳定性、回退可靠性测试还要和原始驱动逐条对照。一旦遇到协议细节理解不一致的地方联发科原厂FAE也不是每个都能讲清楚最后只能自己拿逻辑分析仪抓波形一层层对。5. 常见问题与故障排查实录5.1 插上充电头没反应不进PE模式先确认手机能不能正常普通充电。如果不能优先查VBUS通路比如充电IC的VBUS输入是否超出OVP触发点比如误配了OVP5.5V导致7V以上档位直接触发保护。如果普通5V充电正常但就是进不了PE抓一下充电IC的interrupt寄存器看有没有进入PE检测模式很多方案需要一个特定的GPIO来使能PE检测负载如果GPIO没配正确脉冲根本产生不了。另外要注意Type-C口的CC逻辑。虽然PE2.0握手走VBUS电流但进入DCP/充电模式还是得靠CC检测或者BC1.2CC引脚状态不对会导致系统识别成SDPStandard Downstream Port禁止大电流充电路径自然也就不会发起PE握手。5.2 电压能升起来但电流一直拉不满这种问题很常见。先排除软件层输入电流限制查看充电IC的Input Current Limit寄存器是否被某个policy覆盖了。MTK的mtk_charger里有些平台会根据电池温度或者充电阶段自动下调输入电流比如高温降载。如果没有降载再看VBUS的电压是否稳有一种情况是因为线材压降太大充电器输出9V到手机端只剩7.5V此时充电IC为了维持目标功率自动拉高了电流结果触发了输入限流保护表现为电流只能到1.2A左右。我调试时习惯用电流探头同时看IBUS和IBAT如果IBUS波动而IBAT持续上升说明电池侧在正常吸收问题在输入限流配置如果IBUS和IBAT都稳但功率上不去那就是电压档位没协商到位需要检查升压请求的脉冲时序是否满足充电器要求。5.3 频繁回退到5V普通充电这个问题一半以上是线材引起的。PE2.0对线材动态阻抗要求很高线材接头氧化或者内部线芯偏细在电流脉冲出现时压降过大VBUS瞬间低于充电器的检测窗口充电器会认为手机拔掉了马上恢复到5V。换成几十厘米的quality线缆测试如果回退消失那就是线的问题。另外一种可能是充电器端对脉冲响应太慢。有些充电器为了兼容QC和PD内部会先跑其他协议的检测PE脉冲需要等待一段时间才被识别。手机端如果在一个窗口时间内没等到升压就会主动降级到普通充电。这时只能调整充电器固件或者从头选型。5.4 充电时机身发热明显PE2.0中高电压方案如果在小电流下工作效率并不差发热明显要先看是不是档位选择不合理。比如电池已经充到4.2V还在请求12V档位中间压差有将近8V即使电流只有1.5A整机内部功率损耗也有12W发热自然严重。优化方向是把升压档位的触发电压改高一些让系统在电池电压上升后主动降档。还要检查充电IC的结温保护设定。很多芯片会内置NTC引脚如果NTC电阻选配不当芯片可能误报高温导致充电电流被限制得很小但仍在高电压档位下运行这种状态也很容易热。把NTC的温升曲线拿电子负载实测一遍再和寄存器上报的温度对比能有效排除误报问题。最后再说点实际操作中的体会PE2.0这个协议在今天的快充市场里属于老面孔了但它身上那种“只用一个VBUS就能协商电压”的思路放到现在看仍然很巧妙。我后来调过不少PD方案总是会想起PE2.0调试时那种“用最简单的方式解决问题”的纯粹感。如果你手头的MTK项目需要兼容老款PE充电器或者想在极低成本下实现快充PE2.0依然是值得认真研究的方案。不过一定要记得它的可靠性和兼容性高度依赖充电器和线缆别在硬件验证阶段偷懒多换几种配件跑握手测试后面量产才不会到处救火。
返回列表