
1. 项目概述与芯片定位在便携式电子设备的设计中电池管理系统BMS的充电管理部分其重要性怎么强调都不为过。它直接决定了用户“充电快不快”、“电池耐用不耐用”以及“设备安不安全”这三大核心体验。从业十多年我经手过不少充电芯片方案从早期的线性充电器到如今高度集成的开关充电器技术迭代非常快。今天想和大家深入聊聊德州仪器TI的BQ25890和BQ25892这两颗芯片它们可以说是中高端设备里非常经典的选择。简单来说BQ25890/2是一颗高度集成的开关模式电池充电管理和系统电源路径管理芯片。它的“全能”体现在几个方面支持高达5A的充电电流集成了同步降压转换器、功率路径管理也就是常说的Power Path、I2C可编程接口以及一大堆保护功能。你拿到它基本上外围再加点电感、电容和MOSFET一个完整的充电系统就出来了非常适合空间紧凑的智能手机、平板、便携式音箱、POS机等设备。我之所以花时间把它掰开揉碎了讲是因为很多工程师在初次接触这类芯片时容易陷入“照搬参考设计能工作就行”的误区忽略了其内部丰富的可配置项和保护机制。结果就是产品可能能用但距离“好用”、“可靠”还有差距比如运输途中电池跑电、快充协议握手失败、或者高温环境下充电异常等问题。本文的目标就是结合我自己的踩坑经验带你超越数据手册真正理解BQ25890/2的几个关键高级功能BATFET控制尤其是运输模式、电流脉冲协议以及I2C接口的实战细节让你在设计时心里更有底。2. BATFET控制从运输模式到系统复位BATFET是BQ25890/2内部一个非常关键的MOSFET它连接在电池BAT引脚和系统SYS引脚之间。你可以把它想象成电池和系统主板之间的一个“智能开关”。这个开关的状态直接决定了系统是由电池供电还是被彻底从电池上断开。2.1 运输模式Shipping Mode的深入解析为什么需要运输模式这是很多新手容易忽略但量产时至关重要的一环。设备在工厂生产测试完成后到最终用户手中可能会经历数周甚至数月的仓储和运输。如果电池始终连接着系统即使系统处于关机状态主板上那些微控制器、电源管理芯片、时钟电路等仍可能存在微安µA级别的静态电流。日积月累这点“漏电”足以让电池电量耗尽甚至导致电池过放损坏电压低于保护阈值。更糟糕的是过放的电池在用户首次充电时可能无法唤醒直接导致“开箱即损”的客诉。BQ25890/2的运输模式其本质就是强制关闭内部的BATFET。当BATFET关闭时电池到SYS的物理通路被切断系统电压VSYS会被拉低至接近0V。这样一来系统侧的所有电路彻底断电电池的漏电流被降至最低通常能达到nA级别从而极大延长了仓储时间。如何进入运输模式操作上很简单主机比如你的应用处理器MCU通过I2C向寄存器REG09的BATFET_DIS位写1即可。但这里有个细节需要注意BATFET_DLY位同在REG09。BATFET_DLY 0 (默认)一旦设置BATFET_DIS1BATFET会立即关闭。这适用于你希望立刻切断电源的场景。BATFET_DLY 1设置BATFET_DIS1后BATFET会延迟一段时间典型值tSM_DLY数据手册里可查通常是几百毫秒量级再关闭。这个延迟非常有用想象一下你的MCU在发出“进入运输模式”指令后还需要一点时间来完成最后的日志保存、状态存储等操作。如果BATFET立即关闭MCU会瞬间掉电可能导致这些关键操作失败。设置一个延迟就给了系统一个优雅关机的缓冲时间。实操心得在生产测试治具的程序里我强烈建议将进入运输模式作为最后一道工序。流程可以是1. 完成所有功能测试2. MCU通过I2C设置BATFET_DLY1, 然后BATFET_DIS13. MCU延时等待tSM_DLY时间确保自身操作完成4. 之后系统掉电。这样能保证产品以“零功耗”状态下线。2.2 退出运输模式的四种方式设备到了用户手里需要能从运输模式“唤醒”。BQ25890/2提供了四种唤醒机制设计时需要根据产品形态选择插入适配器Plug in adapter这是最自然、最常用的方式。用户插上充电器VBUS有电输入芯片会自动退出运输模式开启BATFET给系统上电。这是必须支持的基础功能。主机清除BATFET_DIS位如果设备有独立的、不通过BATFET供电的“永远在线”的微功耗MCU比如某些低功耗蓝牙芯片这个MCU可以持续监控一个按键或传感器。当事件触发时它可以通过I2C此时I2C总线需有上拉且该MCU由其他电源如纽扣电池供电向BQ25890/2写BATFET_DIS0来唤醒主系统。这常用于某些待机唤醒场景。主机设置REG_RST位向寄存器REG03的WD_RST位写1可以复位所有寄存器包括BATFET_DIS到默认值。这同样需要那个“永远在线”的MCU来操作。注意这会复位所有充电参数唤醒后主机需要重新配置芯片。QON引脚触发这是无需主机干预的硬件唤醒方式。QON引脚内部有上拉当它被拉低超过消抖时间tSHIPMODE后芯片会退出运输模式。这通常连接到一个物理按键上。用户长按或短按具体看外部电路设计这个“开机键”即可给系统上电。注意事项QON引脚的设计需要仔细。其消抖时间tSHIPMODE可以防止误触发比如运输中的静电、挤压。通常会在QON引脚到地之间接一个电容如0.1µF来滤波。同时按键电路要确保在运输模式下不会因为振动等原因意外导通。2.3 BATFET全系统复位功能这是一个非常实用的“看门狗”功能。当设备“死机”软件卡死但硬件未损坏时传统的软复位可能失效。此时BQ25890/2可以通过BATFET的开关循环实现对整个系统的硬复位。工作原理确保输入源VBUS未接入且BATFET处于启用状态BATFET_DIS0。将QON引脚持续拉低一段时间tQON_RST典型值15秒。芯片检测到这个长按信号后会先将BATFET关闭一段时间tBATFET_RST典型值1秒然后再重新开启BATFET。系统SYS经历了一次完整的掉电再上电过程等同于硬件复位所有处理器、外设重新启动。配置该功能由REG09的BATFET_RST_EN位控制默认是使能的1。如果你不需要这个功能比如担心用户误操作长按导致数据丢失可以将其禁用0。踩坑记录曾经有一个手持设备项目MCU偶尔会因外部干扰死机。我们最初设计了一个独立的硬件复位电路增加了成本和面积。后来发现BQ25892自带这个功能于是将开机键直接复用为系统复位键。用户遇到死机长按15秒就能强制重启省去了捅“复位孔”的麻烦用户体验反而更好。关键点要在产品说明书中明确告知用户这个“长按15秒强制重启”的功能避免误操作。3. 电流脉冲控制协议与高压适配器的“暗语”这是BQ25890注意BQ25892不支持实现高通Quick Charge 2.0/3.0等高压快充协议的核心机制。它不依赖于传统的D/D-电压通信而是采用一种独特的VBUS电流脉冲来与适配器“对话”。3.1 协议工作原理想象一下芯片和适配器在“拔河”。芯片通过快速改变从适配器“抽取”电流的大小形成特定的电流脉冲序列。适配器持续监测这个电流变化解读出芯片的指令“请升压”或“请降压”。具体流程如下使能协议主机首先设置REG04的EN_PUMPX位为1。这是开启电流脉冲通信的大门。发送指令主机根据需要设置REG09的PUMPX_UP请求升压或PUMPX_DN请求降压位为1。注意两者不能同时为1。生成脉冲一旦上述位被设置芯片立即启动电流脉冲序列。在此期间PUMPX_UP/DN位会保持为1指示序列正在进行中。芯片会将输入电流限制IINLIM在寄存器设定的值如IINLIM或IDPM_LIM和一个固定的100mA基准值IINDPM100_ACC之间来回切换。这种切换就在VBUS上产生了一个方波状的电流脉冲。脉冲的宽度、间隔等时序由芯片内部硬件决定软件无需干预。序列完成脉冲序列发送完毕后芯片自动将输入电流限制恢复为寄存器设定值并清除PUMPX_UP/DN位硬件自动清零。中途终止如果在脉冲序列进行中主机清除了EN_PUMPX位序列会立即终止电流限制立刻恢复到设定值。3.2 关键配置与实战要点适配器支持这个协议需要适配器端也能解码这种电流脉冲。通常支持QC2.0/3.0的适配器都具备此能力。BQ25890通过REG02的HVDCP_EN高通高压DCP使能和MAXC_ENMaxCharge使能位来开启与不同类型适配器的握手检测。电流限值设置脉冲的“高电平”对应的是你通过I2C设置的输入电流限值IINLIM。这个值不能设得太小否则脉冲幅度不够适配器可能无法识别。通常建议设置在1.5A或以上具体参考适配器规格。状态查询协议进行时主机可以通过轮询PUMPX_UP/DN位是否为0来判断序列是否结束。更好的方式是使用中断INT引脚但需要注意电流脉冲协议本身可能不会产生独立的中断事件需要结合其他状态寄存器判断。调试技巧调试这个功能时一个示波器是必不可少的。你需要用电流探头或测量采样电阻两端的电压观察VBUS上的电流波形。你应该能看到一个清晰的、在设定电流和100mA之间跳变的脉冲串。如果看不到请按以下步骤排查确认EN_PUMPX1。确认HVDCP_EN或MAXC_EN已使能根据你的适配器类型。确认输入电流限值IINLIM设置得足够大。确认你使用的确实是支持QC协议的适配器并且数据线质量良好D/D-线不能断开。检查VBUS电压是否在协议有效范围内通常5V。4. I2C接口详解灵活控制的基石BQ25890/2的所有关键参数从充电电流电压、各种阈值到功能使能都通过I2C接口进行配置。这是一个标准的、兼容I2C的接口但有些细节需要特别注意。4.1 基础配置与地址从机地址BQ25890:0x6A(写地址 0xD4, 读地址 0xD5)BQ25892:0x6B(写地址 0xD6, 读地址 0xD7) 硬件设计时务必根据你使用的型号正确配置I2C总线上拉和地址识别。通信速率支持标准模式100 kHz和快速模式400 kHz。对于充电管理这种非实时高速应用100kHz通常足够稳定可靠抗干扰能力更强。寄存器映射可读写寄存器从REG00到REG0A以及REG0C故障寄存器。REG0B, REG0D, REG0E等是保留寄存器读取会返回0xFF写入无效。4.2 单次读写与连续读写芯片支持标准的单字节读写和多字节连续读写Burst Read/Write这能提高配置效率。单次写[Start] [Target Addr (W)] [Ack] [Reg Addr] [Ack] [Data] [Ack] [Stop]单次读需要先写寄存器地址再发起读操作[Start] [Target Addr (W)] [Ack] [Reg Addr] [Ack][Start] [Target Addr (R)] [Ack] [Data] [Nack] [Stop]连续读写在单次读写的基础上发送或接收第一个数据字节后不发送Stop信号而是继续发送/接收后续字节芯片会自动将寄存器地址递增。这对于批量初始化或读取多个状态寄存器非常方便。重要例外REG0C故障寄存器不支持连续读因为它是一个“快照”寄存器。第一次读REG0C获取的是自上次读取以来发生过的所有故障状态。读完后寄存器内容会被更新。如果你连续读两次REG0C第二个字节读到的就是新的实时状态这可能与第一个字节不同。因此读取故障状态时务必使用单次读操作。4.3 看门狗定时器与主机/默认模式这是I2C控制中一个至关重要的安全和管理机制。两种模式主机模式芯片完全由外部主机MCU通过I2C控制。所有参数可编程。默认模式芯片脱离主机控制按照内部默认参数运行如500mA输入限流、4.208V充电电压、12小时安全计时器等。上电复位或看门狗超时后芯片进入此模式。看门狗定时器为了防止主机程序跑飞导致充电失控芯片内置了看门狗。在主机模式下主机必须定期通过设置REG07的WATCHDOG[1:0]选择40s/80s/160s向REG03的WD_RST位写1来“喂狗”。如果超时未喂狗WATCHDOG_FAULT标志置位芯片自动复位大部分寄存器并退回默认模式。模式转换默认 - 主机任何一次有效的I2C写操作都会触发转换。主机 - 默认看门狗超时或主机主动将WATCHDOG[1:0]设为00禁用看门狗并让芯片运行。寄存器复位差异看门狗超时导致的复位与上电复位或写REG_RST位不同它不会复位以下寄存器IINLIM,VINDPM,VINDPM_OS,BATFET_RST_EN,BATFET_DLY,BATFET_DIS。这意味着即使看门狗复位之前设置的运输模式状态、输入限流等关键配置得以保留这是一个非常贴心的设计。设计经验在你的MCU固件中必须将“喂狗”作为一个低优先级但周期性的任务来保障。可以将它放在一个1秒定时执行的任务里。同时初始化流程应该是上电 - 芯片处于默认模式 - MCU通过I2C写入配置自动进入主机模式- 开启看门狗并定期复位。如果系统需要进入低功耗睡眠MCU在睡眠前可以选择禁用看门狗WATCHDOG00让芯片以默认模式安全充电醒来后再重新配置并接管。5. 关键外围电路设计与参数计算理解了内部逻辑最终要落到电路板上。这里挑几个容易出问题的外围设计点讲讲。5.1 ILIM引脚硬件电流限制的“双保险”除了I2C软件设置BQ25890/2还提供了ILIM引脚用于通过外部电阻设置一个硬件层面的、不可逾越的输入电流上限。这是一个安全冗余设计。计算公式IINMAX K_ILIM / R_ILIM其中K_ILIM是芯片常数典型值390需查数据手册确认最小值/最大值R_ILIM是ILIM引脚到地之间的电阻单位Ω。 例如要设置硬件限流为1.5A取K_ILIM390则R_ILIM 390 / 1.5 ≈ 260Ω。优先级最终的输入电流限制取软件设置值IINLIM和硬件ILIM计算值中的较小者。这确保了即使软件配置错误比如误设为3.25A实际电流也不会超过硬件设定的安全值如1.5A。使能与监控通过REG00的EN_ILIM位使能此功能。使能后该引脚电压V_ILIM还与输入电流成比例IIN (K_ILIM * V_ILIM) / (R_ILIM * 0.8V)。你可以用MCU的ADC去读取这个电压来实时监控输入电流而无需依赖芯片内部可能不公开的ADC。选型建议对于关键应用强烈建议使用ILIM引脚设置一个合理的硬件限流。电阻应选择1%精度的并且布局上要尽量靠近芯片ILIM引脚和地避免噪声干扰。即使你软件配置了正确的限流这个硬件备份也能在软件跑飞时提供最后一道防线。5.2 热调节与电池补偿提升充电效率与安全性芯片内部有完善的热保护但我们可以通过配置优化它。热调节阈值通过REG08的TREG[1:0]位设置60°C, 80°C, 100°C, 120°C。当芯片结温达到此阈值它会自动降低充电电流以防止过热。不建议设为最高的120°C虽然充电可能更快但PCB板和电池周围的温度会很高影响其他元件寿命和用户体验。通常设为100°C是一个在性能和温升间较好的平衡点。电池内阻补偿锂电池在充电时由于内阻包括电芯内阻和走线、保护板电阻的存在电池端子电压BAT Pin会高于电芯的实际电压。这可能导致芯片过早认为电池已充满达到VREG而终止充电。BQ25890/2的BAT_COMP和VCLAMP寄存器就是用来补偿这个压降的。BAT_COMP[2:0]用于设置补偿的等效电阻值0-140mΩ。你需要估算或测量从芯片BAT引脚到电池正极之间的总阻抗PCB走线电阻、保险丝、保护MOSFET等。VCLAMP[2:0]设置补偿电压的上限0-224mV。补偿电压 充电电流 × BAT_COMP设置值但不能超过VCLAMP。实际充电电压VREG(寄存器设定值) min(ICHG * R_COMP, VCLAMP)。通过合理设置可以让电芯更准确地达到理想的充电截止电压充入更多电量。5.3 电源路径与电感选型BQ25890/2采用开关降压架构电感的选择直接影响效率和温升。电感值数据手册会给出推荐值例如1.0µH或1.5µH。选择时需考虑饱和电流电感的饱和电流必须大于系统可能的最大输入电流。对于支持3A以上充电的芯片建议选择饱和电流在5A~6A以上的功率电感。直流电阻尽量选择DCR小的电感以减少导通损耗。输入/输出电容VBUS和SYS引脚需要足够且低ESR的陶瓷电容来滤除开关噪声。通常VBUS端建议22µF或更大SYS端建议20µF以上并采用多个小电容如10µF x 2并联以降低ESR。散热设计虽然芯片内部有热调节但良好的PCB散热仍是保证持续大电流充电的关键。确保芯片的散热焊盘Thermal Pad有足够多的过孔连接到PCB内层或底层的大面积铜皮上。如果空间允许可以在芯片背面加一个小的散热片。6. 典型应用配置流程与故障排查最后我们串起来看一个完整的系统上电和充电配置流程并附上常见问题排查表。6.1 初始化配置流程硬件上电连接电池插入适配器或USB电源。MCU启动MCU从自己的电源或由BQ2589x的SYS输出供电启动。I2C初始化MCU初始化I2C外设准备与BQ2589x通信。读取芯片状态可选但推荐读取REG0C故障寄存器和REG0E状态寄存器确认芯片无故障并了解当前状态如充电中、充电完成、输入源类型等。配置充电参数这是核心步骤通常按以下顺序写入REG00: 配置输入电流限流IINLIM使能EN_ILIM如果需要硬件监控。REG01: 配置输入电压限压VINDPM_OS防止弱适配器过载。REG02: 配置HVDCP_EN/MAXC_EN使能快充协议检测ICO_EN使能输入电流优化推荐开启。REG03: 使能充电CHG_CONFIG1配置最小系统电压SYS_MIN。REG04: 设置快充电流ICHG。REG05: 设置预充电流IPRECHG和截止电流ITERM。REG06: 设置充电电压VREG电池低压阈值BATLOWV再充电阈值VRECHG。REG07: 使能充电终止EN_TERM1配置看门狗时间WATCHDOG使能安全定时器EN_TIMER1并设置时间CHG_TIMER。REG08: 设置热调节阈值TREG配置电池补偿BAT_COMP和VCLAMP。REG09: 配置运输模式相关BATFET_DLY,BATFET_RST_EN以及电流脉冲使能EN_PUMPX如果需要。REG0A: 配置升压模式OTG的输出电压BOOSTV和电流限值BOOST_LIM。启动看门狗完成配置后向REG03的WD_RST位写1启动看门狗计时。之后需定期在超时前喂狗。进入监控循环MCU可以进入低功耗模式定期唤醒如每秒一次来读取状态寄存器REG0E检查充电状态、故障标志并执行喂狗操作。根据状态更新用户界面如LED、屏幕显示。6.2 常见问题与排查速查表现象可能原因排查步骤插入适配器无反应不充电1. VBUS无电压或电压过低。2. 电池电压过低进入保护状态。3. BATFET被禁用运输模式。4. 充电被软件禁用CHG_CONFIG0。1. 测量VBUS引脚电压是否在4.5V以上。2. 测量BAT引脚电压若低于VBAT_DPL欠压保护阈值需用适配器上电唤醒。3. 检查REG09的BATFET_DIS位尝试通过I2C清除或插入适配器唤醒。4. 读取REG03确认CHG_CONFIG1。充电电流远小于设定值1. 输入源限流DPM。2. 热调节生效。3. ILIM引脚硬件限流。4. 电池接近充满进入恒压/截止阶段。1. 读取REG13的VDPM_STAT和IDPM_STAT位判断是否触发输入限压/限流。2. 读取REG0E的THERM_STAT位或触摸芯片是否发烫。3. 检查REG00的EN_ILIM及ILIM引脚电阻计算值。4. 读取REG0E的CHRG_STAT[1:0]查看充电阶段。无法进入快充高压1. 适配器不支持快充协议。2. 快充协议未使能。3. D/D-线连接问题或检测失败。4. 电流脉冲协议通信失败。1. 更换确认支持QC等协议的适配器。2. 检查REG02的HVDCP_EN或MAXC_EN位。3. 检查USB端口D/D-是否正常连接无短路/开路。测量D/D-电压。4. 用示波器观察VBUS电流是否有脉冲序列。检查EN_PUMPX及PUMPX_UP/DN设置。看门狗复位参数丢失1. MCU未及时喂狗。2. I2C通信异常中断。1. 检查喂狗程序逻辑确保在设定的超时时间内如40s执行。2. 检查I2C总线是否有干扰上拉电阻是否合适SCL/SDA走线是否过长。升压模式OTG无法启动或输出异常1.OTG_CONFIG未使能。2. 电池电压过低。3. 输出过流或短路保护。1. 确认REG03的OTG_CONFIG1。2. 电池电压需高于升压模式启动阈值。3. 检查REG0C的BOOST_FAULT位。移除负载重新尝试。I2C通信失败1. 从机地址错误。2. 上拉电阻缺失或阻值过大。3. 总线被占用或锁死。1. 确认使用的是BQ258900x6A还是BQ258920x6B。2. 确认SCL/SDA线上有4.7kΩ - 10kΩ的上拉电阻到MCU的I2C电源。3. 用逻辑分析仪抓取I2C波形检查起始、停止、应答信号。尝试对总线进行复位操作。最后一点个人体会像BQ25890/2这样功能丰富的芯片数据手册就是最好的朋友但一定要读透尤其是那些边边角角的注释和参数表格。很多“诡异”的问题答案往往藏在某个寄存器的默认值或者某个条件下的状态机跳转里。动手调试时逻辑分析仪和能测电流的示波器是你的左膀右臂。先把基础功能5V充电调通再一步步验证高级功能快充、运输模式、OTG稳扎稳打才能做出既高效又可靠的产品。