BQ25895 5A开关充电设计:外围选型、寄存器配置与PCB布局排障 先说一个我在调试现场反复遇到的场景一块手持设备的板子焊回来插上适配器电池指示灯亮了但充电电流卡在 800mA 上不去用手背碰一下 BQ25895 背面的板子烫得缩手。把示波器探头搭到 SW 引脚上波形上是明显的振铃再去看 VBUS电压已经被拉塌了 400mV。很多人第一反应是芯片买到了假货或者是软件寄存器没配对实际上这类问题八成出在外围选型和 PCB 布局上——BQ25895 是一颗集成度很高的单节锂电开关充电管理芯片支持 5A 大电流充电、I2C 全参数可编程、路径管理和 OTG 升压输出功能越多对 Layout 和外围元件的要求就越苛刻。这篇内容我会从它的内部功率级结构讲起把电感电容的取值算法、寄存器配置顺序、PCB 布局的具体做法和联调阶段的排障链路完整走一遍面向的是已经能画板子、但第一次用这颗电源管理芯片做产品的硬件工程师也适合想搞明白开关充电到底比线性充电强在哪的入门读者。1. 这颗芯片的边界在哪里5A 只是标称值不是随便就能拿到1.1 线性充电与开关充电的损耗账算一遍就明白为什么要选它很多人选型的时候看到5A 充电就下单了却没算过这颗芯片在什么条件下才能跑到 5A。先把最基础的一笔账算清楚假设你用一颗线性充电器给单节锂电充电输入 5V电池电压 3.7V充电电流 2A那么线性调整管上消耗的功率是 (5 - 3.7) × 2 2.6W这 2.6W 全部变成热一颗 SOT-23 封装的线性充电器根本扛不住芯片会直接进入热调节电流自动往下掉。这就是为什么大电流充电必须走开关方案。BQ25895 采用的是同步 Buck 拓扑效率在典型工况下能做到 90% 左右。同样 2A 充电损耗从 2.6W 降到 0.3W 上下差了一个数量级。这个差距不是靠芯片更好实现的而是靠拓扑换来的——电感把能量一段一段地搬过去而不是让调整管硬扛压差。对比项线性充电方案BQ25895 开关充电方案5V 输入、3.7V 电池、2A 充电时的管耗约 2.6W约 0.3W典型效率74% 左右90% 左右是否需要电感不需要需要且是关键的选型项EMI 表现几乎无开关噪声1.5MHz 开关频率需要布局配合封装散热压力极高中等但依赖 PCB 散热不过开关方案也不是白拿的。1.5MHz 的开关频率意味着 SW 节点上每秒有 150 万次的高 dv/dt 跳变这就带来了 EMI、振铃、辐射这些问题而这些问题的严重程度几乎完全取决于你的 PCB 布局。所以后面我会花很大篇幅讲布局这不是凑字数而是这颗芯片能不能用得稳的决定性因素。1.2 输入电压、输入电流、充电电流、结温四个约束谁先到顶写软件的时候我们习惯性地认为我配置了 5A 就是 5A但在硬件世界里实际充电电流永远是四个约束条件里最严格的那个决定的。第一个约束是输入电压范围。BQ25895 的推荐工作输入范围覆盖 3.9V 到 14V这个宽范围是为了兼容各种适配器包括 5V 标准 USB、9V/12V 高压快充适配器。但要注意输入电压高不等于充电快因为在充电电流相同的情况下输入电压越高Buck 的占空比越小开关损耗反而会上升。手册里还会给出绝对最大额定值这个值是破坏性边界任何时候都不能碰输入端一定要做好浪涌抑制和过压保护。第二个约束是输入电流限制。这是最容易被忽略的一项。一个标称 5V/2A 的适配器实际能持续输出的电流往往只有 1.8A 左右如果你把芯片的输入限流设成 3A适配器输出电压会被直接拉塌芯片检测到 VBUS 掉压后触发输入电流优化来回震荡表现出来的现象就是充电电流忽大忽小、适配器发烫。正确的做法是把输入限流设在适配器额定值的 80% 到 90%。第三个约束才是充电电流。电池能接受多大电流取决于电池本身的规格和当前的电量状态。绝大多数单节锂电的推荐充电倍率是 0.5C 到 1C也就是说 3000mAh 的电池持续充电电流在 1.5A 到 3A 之间比较稳妥。你就算把芯片配到 5A电池也吃不消。第四个约束是结温。这一条在夏天或者密闭外壳里最容易先到顶。芯片内部有热调节环路结温超过阈值后会自动降低充电电流这个过程是硬件自动完成的软件读寄存器只能看到电流变小了看不到为什么变小。所以调试的时候如果发现充电电流莫名其妙往下掉先别怀疑寄存器先摸一下板子温度。我一般的做法是在固件里加一个周期性的状态轮询把充电电流、电池电压、芯片温度通过内部 ADC 或外接 NTC一起记录下来跑一次完整充电曲线就能直观看出是哪个约束先到顶。这个数据比任何猜测都可靠。1.3 WQFN 4×4 封装的散热天花板与降额策略BQ25895 用的是 4mm × 4mm 的 WQFN 封装底部有一块散热焊盘。这个封装的散热能力高度依赖 PCB同样的芯片焊盘下面打过孔和没打过孔热阻能差一倍以上。按照 90% 效率估算5A 充电时输入功率大概是 3.7 × 5 / 0.9 ≈ 20.6W损耗约 2W。如果整板热阻是 40°C/W环境温度 25°C结温就会到 105°C已经接近很多应用的上限了如果环境温度是 45°C结温直接冲到 125°C芯片就会频繁触发热调节。这就是为什么在真实产品里5A 充电往往只能维持很短一段时间之后就必须降额。实用一点的降额策略是这样的把充电电流按电池电压分段设置电池电压低于 3.9V 时用较小的电流比如 1A3.9V 到 4.1V 之间用大电流3A 到 4A4.1V 以上再降回小电流。这样既保证了充电速度又避免了在高温区长时间大电流工作。这个分段逻辑在固件里实现起来不复杂但效果非常明显——我用这个策略把某款产品的表面温度从 52°C 压到了 44°C用户手感完全不一样。提示散热焊盘的过孔不要只在正中间打几个要沿着焊盘边缘均匀铺一圈孔径 0.3mm、孔间距 1.0mm 左右孔壁镀铜要实。这些小孔的总截面积决定了热量能不能顺利传到内层地平面。2. 功率级内部结构Buck、路径管理和 OTG 升压怎么共用一套管子2.1 四管 Buck 的双向工作方式要理解布局为什么这么讲究得先知道芯片内部到底有什么。BQ25895 内部集成了四个功率 MOSFET构成一个完整的同步 Buck 功率级高边开关、高边续流管、低边开关、低边续流管。充电时功率从 VBUS 流向电池当芯片进入 OTG 模式时这四个管子重新组合成一个 Boost 升压器功率从电池反向流到 VBUS 引脚对外输出 5V 给其他设备供电。这个双向设计的好处是省了一套功率器件成本低、体积小。代价是同一个 SW 节点既要承受 Buck 的开关应力又要承受 Boost 的开关应力布局上留给你的容错空间更小。SW 节点的寄生电感一旦偏大 Buck 模式下表现为振铃和效率下降Boost 模式下表现为输出电压不稳、带载能力差。还有一点值得注意芯片内部并不是理想开关管子有导通电阻开关过程有交叠损耗。这就是为什么在同样的输入输出条件下充电电流越大效率曲线越往下掉。做热设计的时候不能拿轻载效率去估算满载发热。2.2 SYS 优先供电对后级系统意味着什么BQ25895 支持路径管理也就是 SYS 引脚的供电优先级高于电池充电。插上适配器后适配器的能量优先供给系统负载剩下的才拿去给电池充电如果适配器功率不够电池会通过内部通路补充缺口保证系统不掉电。这个机制对产品体验的影响非常大。想象一个带屏幕的便携设备如果充电和开机同时进行没有路径管理的方案会让电池一边充一边放电池发热严重、寿命缩短有路径管理的话系统直接从适配器取电电池只负责充电温度会低很多而且插拔适配器的瞬间系统电压不会跌落。这里有个设计细节SYS 引脚上的电容要足够大一般建议 20uF 以上且要靠近引脚放。系统负载突变的时候比如屏幕背光打开、无线模块发射SYS 电压会有一个瞬时跌落如果电容不够跌到系统最低工作电压以下就会复位。我在一个项目上就吃过这个亏整机在做射频发射测试时偶发重启查了很久才发现是 SYS 电容只放了 10uF而且离芯片有 8mm 远。2.3 PMID 这个引脚为什么总是被画错PMID 是这颗芯片上最容易被误解的引脚。它不是输出也不是简单的输入滤波点而是内部高边开关和低边开关之间的一个中间节点本质上和 SW 是同一类东西只是位置在 Buck 的输入侧。因为它是功率回路的中间节点所以需要就近放足够的陶瓷电容来吸收开关电流的纹波。如果 PMID 电容放远了或者容量不够输入侧的电流纹波会大幅增加表现出来的现象是输入限流环路不稳定、适配器发出啸叫、充电电流震荡。常见的错误画法是把 PMID 电容和 VBUS 电容合并放在一起觉得反正都是输入侧。这是不对的PMID 和 VBUS 之间隔着内部开关管两个节点的电流波形完全不同必须各自有独立的旁路电容而且都要贴着引脚放。我的习惯是在 PMID 上放两颗 10uF 的 0805 陶瓷电容VBUS 上再放一颗 10uF 加一颗 0.1uF实际用下来纹波和稳定性都比较理想。2.4 ICO 输入电流优化器解决了什么实际问题市面上大量适配器都存在一个问题标称 5V/2A但你真拉到 2A 的时候输出电压可能已经掉到 4.6V 了。如果芯片的输入限流设得比适配器实际能力高就会反复触发拉载—掉压—减载—升压的震荡。BQ25895 内部集成了一个输入电流优化器能自动探测适配器的最大的输出能力把输入限流动态调整到刚刚好的位置既能榨干适配器的功率又不会把它压垮。这个功能在固件里是可以使能的实际用下来对兼容杂牌适配器很有帮助。但它不是万能的。如果适配器的输出线太长、线径太细线路阻抗大优化器探测出来的能力会偏低充电速度就上不去。所以做产品的时候我给客户的建议是要么标配短而粗的线缆要么在固件里把输入限流手动设成一个保守值牺牲一点充电速度换稳定性。这两种策略没有绝对的对错看你的产品定位。3. 外围选型电感、电容、限流电阻的取值要自己算一遍3.1 电感的纹波电流计算与饱和电流余量电感是这颗芯片外围最关键的元件选错了直接导致效率低、发热大、甚至烧管子。选型主要看三个参数电感量、饱和电流、直流电阻。电感量决定了纹波电流的大小。同步 Buck 的纹波电流计算公式是ΔI Vout × (Vin - Vout) / (Vin × L × fsw) 其中 ΔI 电感纹波电流峰峰值 (A) Vout 输出电压即电池电压 (V) Vin 输入电压 (V) L 电感量 (H) fsw 开关频率BQ25895 典型 1.5MHz (Hz)代入一组典型值Vin 5VVout 3.7VL 1.5uHfsw 1.5MHzΔI 3.7 × (5 - 3.7) / (5 × 1.5e-6 × 1.5e6) 4.81 / 11.25 ≈ 0.427A这个纹波很小说明 1.5uH 在这个工况下是合理的。接下来算峰值电流如果充电电流是 4A那么电感峰值电流 4 0.427/2 ≈ 4.21A。所以电感的饱和电流至少要选到 6A 以上留 40% 以上的余量。为什么留这么多因为充电瞬间会有软启动过程、负载突变会有瞬态过冲、电池电压接近 0V 时占空比会很大实际峰值可能超过稳态计算值。直流电阻越低越好一般选 20mΩ 以内。DCR 每增加 10mΩ4A 充电时的额外损耗就是 0.16W看起来不多但在密闭外壳里累积起来很可观。屏蔽式电感优先绕线裸露的会在 SW 节点附近形成天线效应辐射测试容易超标。参数推荐值说明电感量1.0uH - 2.2uH1.5uH 是最常用的折中值饱和电流≥ 6A4A 充电场景按峰值电流留 40% 余量直流电阻 DCR 20mΩ影响满载效率类型屏蔽式贴片功率电感降低辐射位置紧邻 SW 引脚走线尽量短粗3.2 陶瓷电容的直流偏压降额纸上写着 10uF 实际只剩 3uF这是我见过最多的翻车点。选型表上写着 10uF/16V 的 0603 陶瓷电容看起来余量很大实际上在高直流偏压下它的有效容量可能只剩 30% 到 40%。陶瓷电容的介质材料决定了这个特性。X5R、X7R 这类高介电常数的材料容量密度高但直流偏压特性差C0G 稳定性好但容量做不大。所以在电源滤波这种场合我们不得不用 X5R 或 X7R但必须查厂商提供的偏压曲线而不是只看标称值。我的经验做法是标称容量按实际需要的 2 到 3 倍来选同时用两颗并联替代一颗。比如需要 22uF 有效容量我会选两颗 22uF 的 0805 并联而不是一颗 47uF 的 1206。并联不仅提高了有效容量还降低了 ESR 和 ESL对高频纹波抑制更有利。具体到 BQ25895 这几个位置位置标称容量建议封装关键要求VBUS 输入10uF 0.1uF0805 0402抗浪涌靠近引脚PMID2 × 10uF0805吸收开关纹波必须就近SYS 输出2 × 22uF0805保证负载突变时电压跌落可控BAT10uF0805靠近电池引脚REGN4.7uF0603内部 LDO 输出稳压用BTST0.047uF - 0.1uF0402自举电容必须贴近 SW 和 BTSTSYS 到 BAT 之间可选 0.1uF0402抑制高频耦合注意BTST 电容虽然小但位置极其关键。它和 SW、BTST 两个引脚之间的回路面积必须尽可能小走线长度控制在 2mm 以内。这个回路面积大了高边驱动会失效表现是高占空比下充电电流突然掉到零。3.3 ILIM 电阻与 I2C 限流寄存器谁说了算BQ25895 提供了两条设置输入限流的路径硬件 ILIM 引脚上的电阻和 I2C 的限流寄存器。硬件 ILIM 的作用是提供一个安全上限。即使固件还没来得及初始化、或者 I2C 通信出故障硬件上的限流电阻也会把输入电流限制在一个安全值防止把适配器拉死或者把输入线路烧掉。这个设计思路很实在——软件会跑飞硬件不会。I2C 的限流寄存器则是在硬件上限之内做精细调节。寄存器可以按 50mA 的步进设置范围从 100mA 到 3250mA 左右具体范围以手册为准。实际调试时我一般先用 ILIM 电阻设一个绝对不炸的上限比如 2A然后在固件里根据适配器识别结果把寄存器值调到合适的档位。ILIM 电阻的计算遵循手册给出的公式。假设要设定 2A 的硬件限流按照典型的比例系数代入算出来大概是几十 kΩ 量级。这里我不写死具体数字因为不同批次的芯片、不同的采样方式可能略有差异建议直接用手册里的公式算算完再实测验证。实测验证的方法很简单用一个可调电子负载代替电池注意要模拟电池电压逐步加大负载电流观察 VBUS 电压开始明显下跌的那个点就是实际生效的限流值。如果这个值和设计值偏差超过 15%就要检查电阻精度和 Layout 上的采样干扰。4. 寄存器配置一条从冷启动到稳定恒流充电的写入序列4.1 上电默认值里藏着哪几个坑芯片上电后寄存器是有一组默认值的这组默认值能让芯片跑起来但绝不适合直接量产。我踩过的坑主要有这么几个看门狗定时器默认开启。芯片内部有一个看门狗如果固件在一定时间内没有写特定寄存器芯片会认为主机挂了把充电参数复位成默认值。这个机制本意是好的但如果你的固件初始化流程比较长或者主控有低功耗休眠很容易误触发表现出来就是充电几秒钟后电流突然变小。要么在初始化时关掉看门狗要么在固件里做周期性的喂狗。充电电压默认值不一定匹配你的电池。不同厂家的电芯满充电压可能是 4.2V、4.35V、4.4V默认值通常按 4.2V 附近设置。如果你的电池是 4.35V 的用默认值充不满反过来如果你的电池是 4.2V 的把电压设成 4.35V那就是在给电池过充寿命和安全性都会出问题。这一项必须在固件里明确写死。充电电流默认值偏保守。默认值通常在一两千毫安如果你的产品设计目标是快充必须显式改。OTG 模式默认关闭且 OTG 输出电流限制需要单独配置。如果需要对外供电除了使能 OTG还要设置好输出电流上限否则带容性负载启动时容易触发保护。4.2 可复用的初始化流程与代码骨架我把初始化流程整理成了一条固定的顺序这套顺序在几个项目上用下来比较稳先确认通信、再关看门狗、然后是输入限流、充电参数、最后使能充电。顺序不能乱尤其是最后使能充电这一条——先把所有参数写对了再开充电可以避免上电瞬间用错误参数充电。/* BQ25895 初始化骨架 * 说明寄存器地址与位定义请以对应版本的数据手册为准 * 以下代码只展示流程结构与常见配置项。 */ #define BQ25895_I2C_ADDR 0x6B /* 7 位地址以手册为准 */ /* 寄存器地址示例 */ #define REG00_INPUT_SRC 0x00 /* 输入源控制HIZ、ILIM、IINLIM */ #define REG01_PWR_PATH 0x01 /* 充电使能、OTG、看门狗 */ #define REG03_SYS_VOLT 0x03 /* 系统电压调节 */ #define REG04_CHG_CURRENT 0x04 /* 充电电流设置 */ #define REG05_PRE_TERM 0x05 /* 预充电流、终止电流 */ #define REG06_CHG_VOLTAGE 0x06 /* 充电电压设置 */ #define REG07_TERM_TIMER 0x07 /* 终止使能、安全定时器 */ #define REG0C_FAULT 0x0C /* 故障状态 */ #define REG14_DEV_REV 0x14 /* 器件版本 */ typedef enum { BQ_OK 0, BQ_ERR_I2C, BQ_ERR_VERIFY, } bq_status_t; static bq_status_t bq_write_reg(uint8_t reg, uint8_t val) { /* 具体 I2C 读写实现依平台而定 */ if (i2c_write(BQ25895_I2C_ADDR, reg, val, 1) ! 0) { return BQ_ERR_I2C; } return BQ_OK; } static bq_status_t bq_update_bits(uint8_t reg, uint8_t mask, uint8_t val) { uint8_t tmp 0; if (i2c_read(BQ25895_I2C_ADDR, reg, tmp, 1) ! 0) { return BQ_ERR_I2C; } tmp (tmp ~mask) | (val mask); return bq_write_reg(reg, tmp); } bq_status_t bq25895_init(void) { uint8_t rev 0; /* 1. 通信自检读器件版本寄存器 */ if (i2c_read(BQ25895_I2C_ADDR, REG14_DEV_REV, rev, 1) ! 0) { return BQ_ERR_I2C; } /* 2. 关闭看门狗关闭 OTG暂不使能充电 */ bq_update_bits(REG01_PWR_PATH, 0xCF, 0x00); /* 3. 配置输入限流寄存器值需按 50mA 步进换算 */ bq_update_bits(REG00_INPUT_SRC, 0x3F, BQ_IINLIM_CODE); /* 4. 配置充电电压按 16mV 步进换算务必匹配电芯满充电压 */ bq_update_bits(REG06_CHG_VOLTAGE, 0xFC, BQ_VREG_CODE); /* 5. 配置充电电流按 64mA 步进换算 */ bq_update_bits(REG04_CHG_CURRENT, 0x7F, BQ_ICHG_CODE); /* 6. 配置预充电流与终止电流 */ bq_update_bits(REG05_PRE_TERM, 0xFF, BQ_PRE_TERM_CODE); /* 7. 使能终止检测设置安全定时器 */ bq_update_bits(REG07_TERM_TIMER, 0xFF, BQ_TERM_TIMER_CODE); /* 8. 全部参数配置完成后再使能充电 */ bq_update_bits(REG01_PWR_PATH, 0x10, 0x10); return BQ_OK; }这段代码里有几个地方值得单独说明。第 2 步里我先清掉了一批控制位包括看门狗和 OTG这是为了让芯片进入一个确定的状态避免上一次运行残留的配置影响本次初始化。第 3 到第 7 步全是参数配置每一步都读-改-写保证不会误伤同一寄存器里的其他位。第 8 步才使能充电这个顺序很重要。还有一点bq_update_bits里的读-改-写操作在有多主设备或者中断里也会写寄存器的场景下会有竞争风险。如果你的系统里有中断服务程序需要动态调整充电参数要么加互斥锁要么干脆把动态调整统一放到主循环里做。4.3 JEITA 温区与充电电压的配合JEITA 是一套锂电池温度分区充电规范思路很简单温度低的时候不能用大电流充锂离子在低温下嵌入负极的速度慢大电流会导致析锂这是安全隐患温度高的时候要降低充电电压防止高温高压同时作用加速老化。BQ25895 内部支持温区管理可以通过外接 NTC 热敏电阻采集电池温度也可以由主控通过 I2C 把温度值写进去。温区的阈值和每个温区内的电流、电压参数都是可配置的。实际项目里我的配置习惯是温区电池温度范围充电电流充电电压低温保护 0°C禁止充电—低温降流0°C - 10°C0.2C 以下满充电压常温10°C - 45°C正常大电流满充电压高温降压45°C - 60°C降流降低 50mV - 100mV高温保护 60°C禁止充电—这套参数不是拍脑袋定的而是结合电芯厂商的规格书和实际温升测试调出来的。不同的电芯差异很大有的电芯允许 45°C 高温满压充有的到 40°C 就要求降压。千万不要直接抄别人的参数表一定要拿你自己的电芯做温箱测试。还有一点容易被忽略NTC 的贴放位置。NTC 必须贴在电池本体上或者紧贴电池的连接器附近如果贴在 PCB 上离电池很远测到的是板子温度而不是电池温度温区管理就形同虚设。我见过一个设计把 NTC 放在芯片旁边结果芯片自己发热把 NTC 烤到 50°C系统一直以为电池过热充电电流永远上不去。4.4 回读校验与故障寄存器的读法写完寄存器一定要回读。这不是不信任 I2C 总线而是实际工程里 I2C 通信受干扰、从设备忙、上电时序不对导致写失败的情况太常见了。回读校验的成本很低几行代码的事但能省掉大量现场排查时间。故障寄存器的读法有个技巧故障位大多是锁存型的读一次就清零。这意味着如果你在调试的时候用调试器随手读了一下故障寄存器故障信息就消失了后面再想查就查不到。所以固件里应该有一个故障快照机制——检测到中断或者周期性轮询到异常时第一时间把故障寄存器和关键状态寄存器一起读出来存到非易失存储里供事后分析。我一般会记录这么几项VBUS 状态、充电状态机当前状态、故障寄存器原始值、输入限流实际生效值、芯片温度 ADC 值、电池电压 ADC 值。有了这几个数据绝大多数现场问题都能远程定位。5. 布局落地环路面积、地分割和热焊盘的具体做法5.1 大电流路径的物理顺序布局这件事说到底就是一句话让大电流走最短、最宽、回路面积最小的路径。BQ25895 的功率回路可以拆成两段来看。第一段是输入回路VBUS → 输入电容 → PMID 电容 → 内部高边开关 → SW → 电感 → SYS 输出电容 → 回到 PGND。这段回路的电流是脉冲状的di/dt 很高环路面积直接决定了辐射发射和振铃幅度。第二段是电池回路SYS → 内部开关 → BAT → 电池电容 → 回到 PGND。这段电流相对平缓但幅值大主要影响直流压降和发热。正确的元件排列顺序应该是连接器 → VBUS 电容 → 芯片 VBUS 引脚 → 芯片 PMID 引脚 → PMID 电容 → 电感 → SYS 电容 → 电池连接器。整个路径上不要有分叉不要让大电流从芯片底下穿过去再绕回来。我见过最典型的一个错误布局是输入电容放在板子边缘靠近连接器的位置芯片在中间两者之间隔了 15mm 的细走线。结果就是输入电容形同虚设高频纹波电流只能从更远的电源平面绕SW 波形上振铃峰峰值超过 3V效率掉了 6 个百分点。5.2 输入电容和 BTST 电容的位置关系在所有电容里优先级最高的是 BTST 电容其次是 PMID 电容然后是 VBUS 和 SYS 电容。BTST 电容连接的是 BTST 引脚和 SW 引脚它是高边驱动器的自举电容。这两个引脚之间的回路必须极小走线长度控制在 2mm 以内中间不要打孔换层。如果这个回路面积大了寄生电感会在开关瞬间产生很高的电压尖峰轻则效率下降重则击穿高边驱动电路。PMID 电容的位置同样关键它要贴着 PMID 引脚放另一端的接地要就近打到 PGND不要绕到远处的系统地。VBUS 电容稍微宽松一点但也不能超过 5mm。SYS 电容的摆放要注意一点如果 SYS 后面接的是负载开关或者 DC-DCSYS 电容应该放在两者之间靠近负载的一侧而不是紧贴芯片。因为 SYS 电容的主要作用是应对负载突变离负载越近效果越好。5.3 SW 铜皮面积的取舍SW 节点的铜皮面积是一个需要权衡的地方。面积太小导通电阻大、发热多面积太大它就是一个高效的辐射天线EMI 测试容易挂。我的经验值是SW 铜皮面积控制在能够承载 4A 到 5A 电流的前提下尽量小一般宽度和电感焊盘相当即可长度刚好连接芯片 SW 引脚和电感。绝对不要在 SW 节点上铺大面积铜皮也不要在 SW 下面铺地平面——这会形成一个大寄生电容增加开关损耗。如果 EMI 测试过不了可以在 SW 节点上串一个小阻值的缓冲电阻加电容到地做成 RC 吸收网络。但这会损失一点效率属于最后手段优先还是靠缩小环路面积来解决。5.4 热焊盘过孔阵列与地平面BQ25895 底部的散热焊盘是主要的散热通道。这块焊盘必须完整地焊在 PCB 焊盘上焊盘下面打过孔阵列连到内层地平面。过孔的具体做法参数建议值说明过孔孔径0.3mm太小的孔电镀不良散热效果差过孔数量9 到 16 个按焊盘尺寸均匀分布孔间距1.0mm 左右避免焊接时锡膏流失过多处理方式孔壁镀铜可做塞孔防止焊接时锡从孔里漏走连接层至少连接到一层完整地平面内层地平面要完整不能有割裂有一点要特别注意过孔如果做成通孔且不塞孔回流焊的时候散热焊盘上的锡膏会顺着孔流走导致虚焊。这个虚焊在出厂测试时可能测不出来到了客户端经受过热循环之后才暴露表现为充电电流上不去、芯片异常发热。所以量产板上散热焊盘的过孔要么做塞孔要么做背面阻焊覆盖。5.5 电流检测与 I2C 信号的走线隔离BQ25895 有一路电流相关的信号需要关注输入电流的检测是通过内部电路完成的但外部 ILIM 电阻的走线要尽量短避免被 SW 节点的噪声耦合。I2C 的 SCL 和 SDA 属于低速信号但它们对噪声很敏感尤其是在 SW 节点附近走线的时候。我的做法是I2C 走线远离 SW 和电感至少 3mm如果实在避不开中间加一根地线做隔离。上拉电阻放在主控一侧不要放在芯片一侧这样可以避免上拉电阻的走线成为天线。还有一条经验I2C 的走线不要和电池的充放电大电流路径平行走太长距离。平行走线会形成容性耦合大电流突变时会在 I2C 线上感应出毛刺导致通信误码。如果必须平行中间一定要有地线隔开。6. 联调排障从波形倒推问题的完整链路6.1 充电电流上不去的三层排查这是最高频的问题。我的排查顺序是固定的三层从外到内。第一层看输入。用示波器同时测 VBUS 电压和输入电流可以用电流探头或者串一个采样电阻。如果 VBUS 电压在充电时明显下跌说明输入限流设高了或者适配器能力不足。如果 VBUS 上有大幅度的低频波动说明输入电流优化器在震荡。这一层排完能解决六成以上的问题。第二层看温度。读芯片的结温或者用热像仪看板子。如果温度已经超过 60°C那就是热调节在工作充电电流被自动限制了。这时候要检查散热焊盘的过孔、SYS 和 BAT 的电容是否足够、电感的 DCR 是不是偏大。第三层看配置。回读所有相关寄存器确认充电电流、输入限流、充电电压都写进去了而且没有被看门狗复位。同时读一下充电状态机看看是不是停在预充阶段或者终止阶段。我在一个项目上遇到过最诡异的一次充电电流稳定在 500mA无论怎么改寄存器都不变。三层都查了输入正常、温度不高、寄存器值正确。最后发现是电池连接器的接触电阻太大芯片检测到的电池电压偏高误判为接近满充进入了恒压阶段。换了一个连接器就好了。这个案例说明排查的时候不能只看芯片周围整条链路都要看。6.2 SW 振铃与效率偏低SW 节点振铃是布局问题的直接体现。正常的 SW 波形应该是干净的方波上升沿和下降沿有一点过冲和振铃是正常的但振铃峰峰值不应该超过输入电压的 20%而且应该在两三个周期内衰减完。如果振铃很大且衰减很慢说明回路里的寄生电感和寄生电容形成了欠阻尼振荡。处理方向有三个缩小功率回路面积特别是输入电容到 PMID、到 PGND 的回路检查电感的选型饱和电流不足的电感在大电流下电感量会骤降导致纹波电流暴增检查 SW 节点是否有多余的铜皮或者测试点这些都会增加寄生电容。效率偏低的原因则要分情况看。轻载效率低通常是开关损耗占比大属于正常现象满载效率低优先查电感的 DCR 和开关管的导通损耗前者靠换料后者只能靠降额或者改善散热。6.3 I2C 无应答I2C 完全没应答先确认三件事地址对不对、上拉电阻有没有、芯片有没有供电。地址这一项看起来简单实际上很容易出错。7 位地址和 8 位地址的表示方式不同很多代码库里用的是 8 位地址左移一位后的值如果你按 7 位地址传进去实际发出去的地址就错了。建议在代码里统一用一种表示方式写清楚注释。上拉电阻的阻值也要注意。2.2kΩ 到 10kΩ 是常见范围具体看总线电容和速率。上拉太弱上升沿变缓高速率下会误码上拉太强低电平灌电流大可能超过从设备的驱动能力。还有一种情况是芯片处于 HIZ 模式高阻态这时候部分内部电路是关闭的I2C 可能不响应。检查一下是不是有引脚配置导致芯片进入了休眠。6.4 OTG 起不来或者带不动负载OTG 模式起不来先看使能位写了没有再看电池电压够不够。很多芯片在电池电压低于某个阈值时会禁止 OTG 输出防止电池过放。这个阈值一般是可配置的如果你的产品需要在低电量时也能对外供电要显式改这个配置。带不动负载的表现是空载时输出电压正常一接负载电压就掉下去甚至直接关闭输出。原因通常是 OTG 的输出电流限制设得太小或者电池内阻太大、电池电压在大电流下被拉塌。这里有个细节OTG 升压是从电池取电的如果电池本身电量低、内阻大就算芯片能力足够输出也撑不住。测试的时候要用一个内阻小的稳压源代替电池先把芯片本身的能力验证清楚再去看电池的影响。另外OTG 输出端的电容也很关键。容性负载启动时会有很大的浪涌电流如果输出电容太小启动瞬间电压跌落会触发欠压保护。建议在 OTG 输出端放 22uF 以上的电容并且用软启动的方式逐步加载。最后分享几个我在实际项目里总结出来的小习惯。第一画原理图的时候就把关键节点的测试点留好VBUS、PMID、SW、SYS、BAT 各留一个0402 的焊盘就行调试的时候能省下大量找点的时间。第二第一次打样一定要做一块裸板也就是只焊芯片和必要的外围不带其他负载电路先把充电功能单独验证通过再上整机。第三把充电曲线完整记录下来存成数据文件不同批次、不同电芯、不同温度下都跑一遍这些数据在后期做失效分析的时候价值极高。这颗芯片本身不算难用难的是把它的边界条件摸清楚而摸清楚边界条件的唯一办法就是老老实实做测试、记数据。