深入解析TI BQ25890/2充电管理芯片:运输模式、快充协议与I2C实战
2026/7/25 4:12:39 网站建设 项目流程

1. 项目概述与芯片定位

在便携式电子设备的设计中,电池管理系统(BMS)的充电管理部分,其重要性怎么强调都不为过。它直接决定了用户“充电快不快”、“电池耐用不耐用”以及“设备安不安全”这三大核心体验。从业十多年,我经手过不少充电芯片方案,从早期的线性充电器到如今高度集成的开关充电器,技术迭代非常快。今天想和大家深入聊聊德州仪器(TI)的BQ25890BQ25892这两颗芯片,它们可以说是中高端设备里非常经典的选择。

简单来说,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向寄存器REG09BATFET_DIS位写1即可。但这里有个细节需要注意:BATFET_DLY位(同在REG09)。

  • BATFET_DLY = 0 (默认):一旦设置BATFET_DIS=1,BATFET会立即关闭。这适用于你希望立刻切断电源的场景。
  • BATFET_DLY = 1:设置BATFET_DIS=1后,BATFET会延迟一段时间(典型值tSM_DLY,数据手册里可查,通常是几百毫秒量级)再关闭。这个延迟非常有用!想象一下,你的MCU在发出“进入运输模式”指令后,还需要一点时间来完成最后的日志保存、状态存储等操作。如果BATFET立即关闭,MCU会瞬间掉电,可能导致这些关键操作失败。设置一个延迟,就给了系统一个优雅关机的缓冲时间。

实操心得:在生产测试治具的程序里,我强烈建议将进入运输模式作为最后一道工序。流程可以是:1. 完成所有功能测试;2. MCU通过I2C设置BATFET_DLY=1, 然后BATFET_DIS=1;3. MCU延时等待tSM_DLY时间,确保自身操作完成;4. 之后系统掉电。这样能保证产品以“零功耗”状态下线。

2.2 退出运输模式的四种方式

设备到了用户手里,需要能从运输模式“唤醒”。BQ25890/2提供了四种唤醒机制,设计时需要根据产品形态选择:

  1. 插入适配器(Plug in adapter):这是最自然、最常用的方式。用户插上充电器,VBUS有电输入,芯片会自动退出运输模式,开启BATFET给系统上电。这是必须支持的基础功能。

  2. 主机清除BATFET_DIS位:如果设备有独立的、不通过BATFET供电的“永远在线”的微功耗MCU(比如某些低功耗蓝牙芯片),这个MCU可以持续监控一个按键或传感器。当事件触发时,它可以通过I2C(此时I2C总线需有上拉,且该MCU由其他电源如纽扣电池供电)向BQ25890/2写BATFET_DIS=0来唤醒主系统。这常用于某些待机唤醒场景。

  3. 主机设置REG_RST位:向寄存器REG03WD_RST位写1,可以复位所有寄存器(包括BATFET_DIS)到默认值。这同样需要那个“永远在线”的MCU来操作。注意:这会复位所有充电参数,唤醒后主机需要重新配置芯片。

  4. QON引脚触发:这是无需主机干预的硬件唤醒方式。QON引脚内部有上拉,当它被拉低超过消抖时间tSHIPMODE后,芯片会退出运输模式。这通常连接到一个物理按键上。用户长按(或短按,具体看外部电路设计)这个“开机键”,即可给系统上电。

注意事项:QON引脚的设计需要仔细。其消抖时间tSHIPMODE可以防止误触发(比如运输中的静电、挤压)。通常会在QON引脚到地之间接一个电容(如0.1µF)来滤波。同时,按键电路要确保在运输模式下,不会因为振动等原因意外导通。

2.3 BATFET全系统复位功能

这是一个非常实用的“看门狗”功能。当设备“死机”(软件卡死,但硬件未损坏)时,传统的软复位可能失效。此时,BQ25890/2可以通过BATFET的开关循环,实现对整个系统的硬复位

工作原理

  1. 确保输入源(VBUS)未接入,且BATFET处于启用状态(BATFET_DIS=0)。
  2. QON引脚持续拉低一段时间tQON_RST(典型值15秒)。
  3. 芯片检测到这个长按信号后,会先将BATFET关闭一段时间tBATFET_RST(典型值1秒),然后再重新开启BATFET。
  4. 系统(SYS)经历了一次完整的掉电再上电过程,等同于硬件复位,所有处理器、外设重新启动。

配置:该功能由REG09BATFET_RST_EN位控制,默认是使能的(=1)。如果你不需要这个功能(比如担心用户误操作长按导致数据丢失),可以将其禁用(=0)。

踩坑记录:曾经有一个手持设备项目,MCU偶尔会因外部干扰死机。我们最初设计了一个独立的硬件复位电路,增加了成本和面积。后来发现BQ25892自带这个功能,于是将开机键直接复用为系统复位键。用户遇到死机,长按15秒就能强制重启,省去了捅“复位孔”的麻烦,用户体验反而更好。关键点:要在产品说明书中明确告知用户这个“长按15秒强制重启”的功能,避免误操作。

3. 电流脉冲控制协议:与高压适配器的“暗语”

这是BQ25890(注意,BQ25892不支持)实现高通Quick Charge 2.0/3.0等高压快充协议的核心机制。它不依赖于传统的D+/D-电压通信,而是采用一种独特的VBUS电流脉冲来与适配器“对话”。

3.1 协议工作原理

想象一下,芯片和适配器在“拔河”。芯片通过快速改变从适配器“抽取”电流的大小,形成特定的电流脉冲序列。适配器持续监测这个电流变化,解读出芯片的指令:“请升压”或“请降压”。

具体流程如下:

  1. 使能协议:主机首先设置REG04EN_PUMPX位为1。这是开启电流脉冲通信的大门。
  2. 发送指令:主机根据需要,设置REG09PUMPX_UP(请求升压)或PUMPX_DN(请求降压)位为1。注意,两者不能同时为1
  3. 生成脉冲:一旦上述位被设置,芯片立即启动电流脉冲序列。在此期间,PUMPX_UP/DN位会保持为1,指示序列正在进行中。
    • 芯片会将输入电流限制(IINLIM)在寄存器设定的值(如IINLIM或IDPM_LIM)和一个固定的100mA基准值(IINDPM100_ACC)之间来回切换。
    • 这种切换就在VBUS上产生了一个方波状的电流脉冲。脉冲的宽度、间隔等时序由芯片内部硬件决定,软件无需干预。
  4. 序列完成:脉冲序列发送完毕后,芯片自动将输入电流限制恢复为寄存器设定值,并清除PUMPX_UP/DN位(硬件自动清零)。
  5. 中途终止:如果在脉冲序列进行中,主机清除了EN_PUMPX位,序列会立即终止,电流限制立刻恢复到设定值。

3.2 关键配置与实战要点

  • 适配器支持:这个协议需要适配器端也能解码这种电流脉冲。通常支持QC2.0/3.0的适配器都具备此能力。BQ25890通过REG02HVDCP_EN(高通高压DCP使能)和MAXC_EN(MaxCharge使能)位来开启与不同类型适配器的握手检测。
  • 电流限值设置:脉冲的“高电平”对应的是你通过I2C设置的输入电流限值(IINLIM)。这个值不能设得太小,否则脉冲幅度不够,适配器可能无法识别。通常建议设置在1.5A或以上,具体参考适配器规格。
  • 状态查询:协议进行时,主机可以通过轮询PUMPX_UP/DN位是否为0来判断序列是否结束。更好的方式是使用中断(INT)引脚,但需要注意,电流脉冲协议本身可能不会产生独立的中断事件,需要结合其他状态寄存器判断。

调试技巧:调试这个功能时,一个示波器是必不可少的。你需要用电流探头(或测量采样电阻两端的电压)观察VBUS上的电流波形。你应该能看到一个清晰的、在设定电流和100mA之间跳变的脉冲串。如果看不到,请按以下步骤排查:

  1. 确认EN_PUMPX=1
  2. 确认HVDCP_ENMAXC_EN已使能(根据你的适配器类型)。
  3. 确认输入电流限值(IINLIM)设置得足够大。
  4. 确认你使用的确实是支持QC协议的适配器,并且数据线质量良好(D+/D-线不能断开)。
  5. 检查VBUS电压是否在协议有效范围内(通常>5V)。

4. I2C接口详解:灵活控制的基石

BQ25890/2的所有关键参数,从充电电流电压、各种阈值,到功能使能,都通过I2C接口进行配置。这是一个标准的、兼容I2C的接口,但有些细节需要特别注意。

4.1 基础配置与地址

  • 从机地址
    • BQ25890:0x6A(写地址 0xD4, 读地址 0xD5)
    • BQ25892:0x6B(写地址 0xD6, 读地址 0xD7) 硬件设计时,务必根据你使用的型号,正确配置I2C总线上拉和地址识别。
  • 通信速率:支持标准模式(100 kHz)和快速模式(400 kHz)。对于充电管理这种非实时高速应用,100kHz通常足够稳定可靠,抗干扰能力更强。
  • 寄存器映射:可读写寄存器从REG00REG0A,以及REG0C(故障寄存器)。REG0B, REG0D, REG0E等是保留寄存器,读取会返回0xFF,写入无效。

4.2 单次读写与连续读写

芯片支持标准的单字节读写和多字节连续读写(Burst Read/Write),这能提高配置效率。

  • 单次写[Start] + [Target Addr (W)] + [Ack] + [Reg Addr] + [Ack] + [Data] + [Ack] + [Stop]
  • 单次读:需要先写寄存器地址,再发起读操作:
    1. [Start] + [Target Addr (W)] + [Ack] + [Reg Addr] + [Ack]
    2. [Start] + [Target Addr (R)] + [Ack] + [Data] + [Nack] + [Stop]
  • 连续读写:在单次读写的基础上,发送或接收第一个数据字节后,不发送Stop信号,而是继续发送/接收后续字节,芯片会自动将寄存器地址递增。这对于批量初始化或读取多个状态寄存器非常方便。
    • 重要例外REG0C(故障寄存器)不支持连续读!因为它是一个“快照”寄存器。第一次读REG0C,获取的是自上次读取以来发生过的所有故障状态。读完后,寄存器内容会被更新。如果你连续读两次REG0C,第二个字节读到的就是新的实时状态,这可能与第一个字节不同。因此,读取故障状态时,务必使用单次读操作。

4.3 看门狗定时器与主机/默认模式

这是I2C控制中一个至关重要的安全和管理机制。

  • 两种模式
    • 主机模式:芯片完全由外部主机(MCU)通过I2C控制。所有参数可编程。
    • 默认模式:芯片脱离主机控制,按照内部默认参数运行(如500mA输入限流、4.208V充电电压、12小时安全计时器等)。上电复位或看门狗超时后,芯片进入此模式。
  • 看门狗定时器:为了防止主机程序跑飞导致充电失控,芯片内置了看门狗。在主机模式下,主机必须定期(通过设置REG07WATCHDOG[1:0]选择40s/80s/160s)向REG03WD_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在睡眠前可以选择禁用看门狗(WATCHDOG=00),让芯片以默认模式安全充电,醒来后再重新配置并接管。

5. 关键外围电路设计与参数计算

理解了内部逻辑,最终要落到电路板上。这里挑几个容易出问题的外围设计点讲讲。

5.1 ILIM引脚:硬件电流限制的“双保险”

除了I2C软件设置,BQ25890/2还提供了ILIM引脚,用于通过外部电阻设置一个硬件层面的、不可逾越的输入电流上限。这是一个安全冗余设计。

  • 计算公式IINMAX = K_ILIM / R_ILIM其中K_ILIM是芯片常数(典型值390,需查数据手册确认最小值/最大值),R_ILIM是ILIM引脚到地之间的电阻(单位Ω)。 例如,要设置硬件限流为1.5A,取K_ILIM=390,则R_ILIM = 390 / 1.5 ≈ 260Ω
  • 优先级最终的输入电流限制取软件设置值(IINLIM)和硬件ILIM计算值中的较小者。这确保了即使软件配置错误(比如误设为3.25A),实际电流也不会超过硬件设定的安全值(如1.5A)。
  • 使能与监控:通过REG00EN_ILIM位使能此功能。使能后,该引脚电压(V_ILIM)还与输入电流成比例:IIN = (K_ILIM * V_ILIM) / (R_ILIM * 0.8V)。你可以用MCU的ADC去读取这个电压,来实时监控输入电流,而无需依赖芯片内部可能不公开的ADC。

选型建议:对于关键应用,强烈建议使用ILIM引脚设置一个合理的硬件限流。电阻应选择1%精度的,并且布局上要尽量靠近芯片ILIM引脚和地,避免噪声干扰。即使你软件配置了正确的限流,这个硬件备份也能在软件跑飞时提供最后一道防线。

5.2 热调节与电池补偿:提升充电效率与安全性

芯片内部有完善的热保护,但我们可以通过配置优化它。

  • 热调节阈值:通过REG08TREG[1:0]位设置(60°C, 80°C, 100°C, 120°C)。当芯片结温达到此阈值,它会自动降低充电电流以防止过热。不建议设为最高的120°C,虽然充电可能更快,但PCB板和电池周围的温度会很高,影响其他元件寿命和用户体验。通常设为100°C是一个在性能和温升间较好的平衡点。
  • 电池内阻补偿:锂电池在充电时,由于内阻(包括电芯内阻和走线、保护板电阻)的存在,电池端子电压(BAT Pin)会高于电芯的实际电压。这可能导致芯片过早认为电池已充满(达到VREG)而终止充电。BQ25890/2的BAT_COMPVCLAMP寄存器就是用来补偿这个压降的。
    • 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 初始化配置流程

  1. 硬件上电:连接电池,插入适配器(或USB电源)。
  2. MCU启动:MCU从自己的电源(或由BQ2589x的SYS输出供电)启动。
  3. I2C初始化:MCU初始化I2C外设,准备与BQ2589x通信。
  4. 读取芯片状态(可选但推荐):读取REG0C(故障寄存器)和REG0E(状态寄存器),确认芯片无故障,并了解当前状态(如充电中、充电完成、输入源类型等)。
  5. 配置充电参数:这是核心步骤,通常按以下顺序写入:
    • REG00: 配置输入电流限流IINLIM,使能EN_ILIM(如果需要硬件监控)。
    • REG01: 配置输入电压限压VINDPM_OS(防止弱适配器过载)。
    • REG02: 配置HVDCP_EN/MAXC_EN(使能快充协议检测),ICO_EN(使能输入电流优化,推荐开启)。
    • REG03: 使能充电CHG_CONFIG=1,配置最小系统电压SYS_MIN
    • REG04: 设置快充电流ICHG
    • REG05: 设置预充电流IPRECHG和截止电流ITERM
    • REG06: 设置充电电压VREG,电池低压阈值BATLOWV,再充电阈值VRECHG
    • REG07: 使能充电终止EN_TERM=1,配置看门狗时间WATCHDOG,使能安全定时器EN_TIMER=1并设置时间CHG_TIMER
    • REG08: 设置热调节阈值TREG,配置电池补偿BAT_COMPVCLAMP
    • REG09: 配置运输模式相关BATFET_DLY,BATFET_RST_EN,以及电流脉冲使能EN_PUMPX(如果需要)。
    • REG0A: 配置升压模式(OTG)的输出电压BOOSTV和电流限值BOOST_LIM
  6. 启动看门狗:完成配置后,向REG03WD_RST位写1,启动看门狗计时。之后需定期(在超时前)喂狗。
  7. 进入监控循环:MCU可以进入低功耗模式,定期唤醒(如每秒一次)来读取状态寄存器(REG0E),检查充电状态、故障标志,并执行喂狗操作。根据状态更新用户界面(如LED、屏幕显示)。

6.2 常见问题与排查速查表

现象可能原因排查步骤
插入适配器无反应,不充电1. VBUS无电压或电压过低。
2. 电池电压过低,进入保护状态。
3. BATFET被禁用(运输模式)。
4. 充电被软件禁用(CHG_CONFIG=0)。
1. 测量VBUS引脚电压是否在4.5V以上。
2. 测量BAT引脚电压,若低于VBAT_DPL(欠压保护阈值),需用适配器上电唤醒。
3. 检查REG09BATFET_DIS位,尝试通过I2C清除或插入适配器唤醒。
4. 读取REG03,确认CHG_CONFIG=1
充电电流远小于设定值1. 输入源限流(DPM)。
2. 热调节生效。
3. ILIM引脚硬件限流。
4. 电池接近充满,进入恒压/截止阶段。
1. 读取REG13VDPM_STATIDPM_STAT位,判断是否触发输入限压/限流。
2. 读取REG0ETHERM_STAT位,或触摸芯片是否发烫。
3. 检查REG00EN_ILIM及ILIM引脚电阻计算值。
4. 读取REG0ECHRG_STAT[1:0],查看充电阶段。
无法进入快充(高压)1. 适配器不支持快充协议。
2. 快充协议未使能。
3. D+/D-线连接问题或检测失败。
4. 电流脉冲协议通信失败。
1. 更换确认支持QC等协议的适配器。
2. 检查REG02HVDCP_ENMAXC_EN位。
3. 检查USB端口D+/D-是否正常连接,无短路/开路。测量D+/D-电压。
4. 用示波器观察VBUS电流是否有脉冲序列。检查EN_PUMPXPUMPX_UP/DN设置。
看门狗复位,参数丢失1. MCU未及时喂狗。
2. I2C通信异常中断。
1. 检查喂狗程序逻辑,确保在设定的超时时间内(如40s)执行。
2. 检查I2C总线是否有干扰,上拉电阻是否合适,SCL/SDA走线是否过长。
升压模式(OTG)无法启动或输出异常1.OTG_CONFIG未使能。
2. 电池电压过低。
3. 输出过流或短路保护。
1. 确认REG03OTG_CONFIG=1
2. 电池电压需高于升压模式启动阈值。
3. 检查REG0CBOOST_FAULT位。移除负载重新尝试。
I2C通信失败1. 从机地址错误。
2. 上拉电阻缺失或阻值过大。
3. 总线被占用或锁死。
1. 确认使用的是BQ25890(0x6A)还是BQ25892(0x6B)。
2. 确认SCL/SDA线上有4.7kΩ - 10kΩ的上拉电阻到MCU的I2C电源。
3. 用逻辑分析仪抓取I2C波形,检查起始、停止、应答信号。尝试对总线进行复位操作。

最后一点个人体会:像BQ25890/2这样功能丰富的芯片,数据手册就是最好的朋友,但一定要读透,尤其是那些边边角角的注释和参数表格。很多“诡异”的问题,答案往往藏在某个寄存器的默认值或者某个条件下的状态机跳转里。动手调试时,逻辑分析仪和能测电流的示波器是你的左膀右臂。先把基础功能(5V充电)调通,再一步步验证高级功能(快充、运输模式、OTG),稳扎稳打,才能做出既高效又可靠的产品。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询