1. 项目概述与BQ28Z620芯片定位
在电池供电设备的设计与维护中,电池管理系统(BMS)的角色,就好比是人体内的“神经系统”和“免疫系统”。它不仅要实时感知电池的“生命体征”——电压、电流、温度,还要基于这些数据进行复杂的“诊断”和“决策”,比如估算剩余电量、预测寿命、执行安全保护。而这一切功能的基石,是测量数据的绝对精确和系统本身的安全可靠。如果测量失准,就像医生用错了体温计,所有诊断都将失去意义;如果系统能被随意篡改,就如同家门大开,安全无从谈起。
德州仪器(TI)的BQ28Z620,正是为应对这些核心挑战而设计的一款高度集成的电池管理芯片。它远不止是一个简单的“电量计”。在我经手过的多个电动工具、便携式医疗设备和后备电源项目中,BQ28Z620因其全生命周期数据记录、硬件级安全认证和灵活的现场校准能力,成为了在可靠性要求严苛场景下的首选方案。它把BMS工程师最关心的几个问题:“电池历史上经历过什么?”、“我的系统是否被非法访问过?”以及“测量值到底准不准?”,通过芯片内部固化的机制给出了系统级的答案。
简单来说,BQ28Z620的技术价值体现在三个层面:记录、守护与修正。它像一位尽职的“电池档案管理员”,持续记录运行中的极限数据;它也是一位“安全卫士”,通过密钥和哈希算法把守数据访问的大门;它更是一位“校准技师”,提供了让工程师可以亲手微调测量精度,使其与真实物理世界对齐的工具集。本文将围绕这三大核心功能,结合手册要点与工程实践,拆解其实现原理、操作步骤,并分享在实际部署中积累的“避坑”经验。
2. 生命周期数据收集:为电池建立“黑匣子”
电池的寿命和健康状况,不仅取决于它的化学年龄,更与其使用历史息息相关。一次偶然的过温、一次短暂的过充或过放,都可能对电池造成不可逆的损伤,并在未来以容量骤降或内阻激增的形式表现出来。BQ28Z620的生命周期数据收集(Lifetime Data Collection)功能,就是为了捕捉这些关键历史瞬间而设计的。
2.1 功能机制与数据内容
这个功能本质上是一个在芯片RAM中运行的环形缓冲区,持续记录多项关键参数的极值(最大值或最小值)以及重要事件计数。它的设计非常巧妙,平衡了数据记录的实时性和Flash存储器的寿命。其工作逻辑如下:
使能与停止:通过设置
ManufacturingStatus()寄存器中的[LF_EN]位为1来启用。一旦启用,总固件运行时间计数器便开始计时。该功能会在两种情况下停止:芯片进入永久失效(Permanent Fail)状态,或手动将[LF_EN]位清零。数据写入策略:为减少对数据闪存(Data Flash, DF)的擦写次数,延长芯片寿命,数据并非实时写入Flash。它仅在以下条件触发时,才将RAM中的数据快照写入Flash:
- 定期差异写入:每10小时检查一次,如果RAM中的生命周期数据与Flash中已保存的数据不同,则执行写入。
- 永久失效前:在芯片即将进入永久失效状态、并禁用Flash更新之前,会强制写入一次,保留“临终”前的关键数据。
- 复位事件:每次芯片复位(复位计数器递增),都会触发一次写入。
- 主动刷新命令:主机可以通过发送
LifetimeDataFlushMAC命令,随时要求将RAM数据写入Flash。
记录的核心数据项:
- 电压:记录每个电芯(Cell)的历史最高电压。这对于分析是否发生过充电均衡异常或过压情况至关重要。
- 电流:记录历史最大充电或放电电流。有助于判断电池是否承受过超出设计范围的脉冲负载。
- 温度:记录电芯的最高和最低温度。是判断热滥用(Thermal Abuse)最直接的证据。
- 安全事件:记录触发
SafetyStatus()的安全事件(如过压、欠压、过流、过温等)次数,以及最后一次安全事件发生时的循环计数(Cycle Count)。这能帮助定位故障是突发性的还是累积性的。 - 电源事件:记录复位次数(包括完全复位、部分复位和看门狗复位)以及关机次数。异常的复位频率可能暗示着硬件不稳定或软件故障。
实操心得:数据解读的价值我曾处理过一个案例,某批设备在野外部署数月后,部分电池包容量衰减异常。通过读取生命周期数据,发现这些异常电池包都记录有数次短暂的“最高温度”峰值,接近电芯上限,而正常电池包没有。结合电源事件记录中的频繁复位,最终定位到是设备中某个功耗模块的间歇性短路,导致局部过热并引发保护复位。如果没有这个“黑匣子”,我们很可能将问题简单归咎于电池批次质量,无法找到真正的根因。
2.2 工程配置与数据读取实践
在量产或开发中配置此功能,通常遵循以下流程:
进入FULL ACCESS模式:首先,你需要使用正确的密钥,通过
MACSubcmd()命令将芯片从出厂默认的SEALED或UNSEALED模式切换到FULL ACCESS模式。这是配置ManufacturingStatus()等制造相关寄存器的前提。启用生命周期记录:向
ManufacturingStatus()寄存器写入特定值,将[LF_EN]位置1。这个操作通常在生产测试流程的最后阶段进行,确保电池从出厂起的所有经历都被记录。数据读取方法:生命周期数据存储在数据闪存的特定位置。在UNSEALED或FULL ACCESS模式下,可以通过发送相应的MAC命令(具体命令码需查阅芯片数据手册中关于Data Flash映射的部分)来读取这些数据。读取到的通常是原始数据,需要根据手册中的格式进行解析。
生产流程中的集成:在自动化测试站(ATE)上,可以在完成所有校准和配置后,发送启用命令。同时,可以增加一个测试项,读取并验证生命周期数据区是否已成功初始化(例如,检查总运行时间是否为0或一个很小的值)。
注意事项:Flash寿命与数据完整性BQ28Z620的数据闪存有擦写次数限制(通常为10万次左右)。生命周期数据的“定期差异写入”机制正是为了保护Flash。但工程师需要注意,如果电池频繁上下电(导致复位)或在恶劣环境下频繁触发安全事件,可能会加速该区域Flash的损耗。虽然对大多数应用来说这不成问题,但在极端场景下,需评估此风险。此外,在芯片进入永久失效前写入数据是一个非常重要的安全特性,确保了故障信息不会丢失。
3. 设备安全:SHA-1 HMAC认证与三级访问控制
对于BMS而言,安全有两层含义:一是电池本身的使用安全,二是电池数据与配置的系统安全。BQ28Z620通过一套基于密钥和加密哈希算法的硬件安全机制,构建了坚固的访问壁垒。
3.1 三级安全模式详解
芯片定义了三种安全操作级别,构成了一个权限金字塔:
- SEALED(密封)模式:这是芯片出厂后的默认模式,或通过命令进入的常规运行模式。在此模式下,主机(如设备主控MCU)只能读取标准命令(如电压、电流、温度、SOC、SOH等)寄存器。所有扩展MAC命令、数据闪存(包含配置参数、生命周期数据、学习数据)的访问均被禁止。这防止了终端用户或普通应用程序篡改关键参数。
- UNSEALED(解封)模式:此模式下,除了SEALED模式下的所有权限外,主机获得了对所有数据闪存的读写权限。你可以读取生命周期数据、修改电池配置参数(需谨慎!)、执行校准等。这是进行设备维护、诊断和重新配置所需的模式。
- FULL ACCESS(完全访问)模式:这是最高权限级别。在UNSEALED基础上,进一步允许修改安全密钥本身,以及访问一些最底层的制造测试功能。芯片出厂时即处于此模式,以便烧录初始密钥。产品交付后,除非需要进行密钥轮换等极高权限操作,否则不应长期处于此模式。
模式切换需要通过MACSubcmd()命令发送对应的密钥对来完成,且密钥必须连续发送,中间不能插入其他命令。
3.2 SHA-1 HMAC认证流程深析
为了防止未授权设备冒充合法主机进行通信,BQ28Z620支持基于SHA-1的HMAC(基于哈希的消息认证码)认证。其过程是一个典型的“挑战-应答”协议:
- 主机发起挑战:主机生成一个160位(20字节)的随机数作为消息
M。这个随机数应使用符合安全标准的随机数生成器产生。 - 构造与计算:主机和芯片各自持有相同的128位认证密钥
KD。认证过程的核心是计算HMAC(M) = H[KD || H(KD || M)],其中H是SHA-1哈希函数,||是拼接操作。- 第一次哈希:将密钥
KD与消息M拼接,并填充至512位,进行SHA-1运算,得到中间结果HMAC1。 - 第二次哈希:再将密钥
KD与HMAC1拼接、填充,进行第二次SHA-1运算,得到最终的160位摘要HMAC2。这个双重哈希结构增强了安全性。
- 第一次哈希:将密钥
- 设备验证:主机通过
MACData()寄存器将随机消息M发送给芯片。芯片内部使用相同的密钥KD和算法,计算出自己的HMAC结果HMAC3。 - 比对与认证:主机读取芯片计算出的
HMAC3,与自己计算的HMAC2进行比较。如果两者完全一致,则证明芯片拥有正确的密钥KD,认证成功。
手册中给出的操作步骤(MAC命令0x0000)正是封装了这一过程。需要注意的是,消息M的格式为小端序(LSB在前)。
实操心得:密钥管理与安全实践
- 密钥存储:主机端的认证密钥
KD必须安全存储,例如存储在MCU的安全区域(如TrustZone)或安全芯片(SE)中,绝不能以明文形式存在于软件代码里。- 生产烧录:芯片的Unseal/Full Access/Authentication密钥应在生产线上通过TI的编程工具(如bqStudio配合编程器)进行烧录,并立即进入SEALED模式。烧录过程应在安全环境中进行,密钥一旦烧录,在FULL ACCESS模式外是不可读的。
- 认证频率:不必每次通信都进行完整的HMAC认证,这会影响性能。通常可以在设备启动时或执行敏感操作(如进入UNSEALED模式)前进行一次认证。认证通过后,可以建立一个安全会话。
- 防重放攻击:由于HMAC认证依赖于随机数
M,每次认证的M都必须不同,这自然防止了重放攻击(攻击者记录一次认证过程并重复发送)。
3.3 密钥修改与安全操作示例
修改密钥(如Unseal Key或Full Access Key)是风险极高的操作,必须确保当前处于FULL ACCESS模式。手册给出了一个清晰的示例:将Unseal Key改为0x0123, 0x4567, Full Access Key改为0x89AB, 0xCDEF。
其通过MACSubcmd()发送的数据块结构为:[命令码] + [密钥数据] + [校验和] + [数据长度]
具体到示例:
- 向地址
0x3E写入数据块:[0x35, 0x00, 0x23, 0x01, 0x67, 0x45, 0xAB, 0x89, 0xEF, 0xCD]0x35 0x00:这是SecurityKey()命令的代码(小端序)。0x23 0x01:新的Unseal Key (LSB0x0123)。0x67 0x45:新的Unseal Key (MSB0x4567)。0xAB 0x89:新的Full Access Key (LSB0x89AB)。0xEF 0xCD:新的Full Access Key (MSB0xCDEF)。
- 向地址
0x60写入校验和与长度:[0x0A, 0x0C]- 校验和
0x0A是前面10个字节数据之和(0x35+0x00+...+0xCD)的位取反(Bitwise Inversion)。 - 长度
0x0C表示数据长度为12字节(10字节数据+2字节校验和与长度?这里需注意,实际长度计算需严格遵循手册定义,示例中0x0C可能对应特定上下文)。
- 校验和
关键警告:两个密钥(例如Unseal Key的两部分)必须在4秒内连续发送,否则芯片将拒绝该请求。这在编写通信驱动时必须严格保证,建议在发送第一部分后禁用中断或确保通信不被阻塞。
4. 生产校准:从原理到实践的精度修正
校准是连接芯片ADC读数与真实物理世界的桥梁。BQ28Z620提供了电压、电流、温度的完整校准链。校准的核心思想是:施加一个已知的、精确的基准源(如高精度电压源、电流源、恒温槽),读取芯片ADC的原始输出,然后计算出一个“增益(Gain)”和“偏移(Offset)”系数,写入数据闪存,使芯片最终的测量结果与基准源一致。
4.1 校准使能与原始数据读取
所有校准操作的前提,是开启制造状态下的校准使能位,并配置芯片输出原始ADC数据。
- 进入校准模式:首先,通过向
MACSubcmd()写入0x002D来设置ManufacturingStatus()[CAL_EN]位。这个位是校准功能的“总开关”。 - 选择原始数据输出模式:接着,向
MACSubcmd()写入0xF081或0xF082。0xF081:使能电压、电流、温度的原始ADC数据输出。0xF082:在0xF081功能基础上,额外在库仑计数器输入(SRP, SRN)内部短路。这个模式专门用于电流偏移校准,可以消除外部PCB走线引入的微小偏移。
- 读取MACData():使能后,芯片会定期(约每250ms)更新
MACData()寄存器块。数据格式为一系列16位有符号整数(2‘s complement),代表了各个通道的原始ADC码值。数据块开头有一个8位计数器(ZZ)和状态字节(YY),用于同步。必须等待ZZ计数器至少递增2(即至少完成一次数据更新)后再读取,以确保数据是新鲜的、稳定的。
4.2 分步校准实践与计算
4.2.1 电芯电压(Cell Voltage)校准
这是最基础的校准,目标是修正每个电芯电压测量通道的增益误差。
- 施加基准:使用高精度电压源,对第一个电芯(VCELL1:VC1-VSS)和第二个电芯(VCELL2:VC2-VC1)分别施加一个已知电压值,例如
VCELL1 = 3500mV,VCELL2 = 3600mV。电压值应在电芯正常工作范围内,且尽量远离零点以减小相对误差。 - 读取原始ADC值:使能原始输出(
0xF081)后,从MACData()中读取ADCCELL1(对应BBbb)和ADCCELL2(对应CCcc)。为了抑制噪声,必须进行多次采样(如16次或32次)并取平均值。每次采样前都应检查ZZ位是否已递增。 - 计算增益:计算公式为:
Cell Gain = (VCELL1 + VCELL2) / ( (ADCCELL1 + ADCCELL2) * N / 2^16 )其中N为电芯数量(例如2)。这个公式的本质是,将两个电芯的基准电压之和,与两个ADC码值之和所代表的“电压总和”进行比较,求出一个整体的比例系数。对于多节电芯,此方法假设各通道增益误差一致,是一种高效的批量校准方法。若需更高精度,应对每个电芯单独校准。 - 写入与验证:将计算出的
Cell Gain值写入数据闪存对应的位置。然后移除电压源,让芯片测量实际电压(或施加另一个已知电压),通过标准命令Voltage()读取,验证其是否与万用表测量值一致。如偏差超出允许范围(如±5mV),需重复步骤2-4。
4.2.2 电流(Current)校准
电流校准相对复杂,涉及偏移(Offset)和增益(Gain)两部分。BQ28Z620硬件已有改进,偏移通常很小,但高精度应用仍需校准。
CC偏移校准(可选):
- 目标:消除当电流为零时,ADC读数不为零的系统误差。
- 操作:确保SRP和SRN引脚间电流绝对为0(使用
0xF082模式内部短路输入)。读取ADCCC(AAaa),取平均。 - 计算:
CC Offset = ADCCC * Coulomb Counter Offset Samples。其中Coulomb Counter Offset Samples是一个来自数据闪存的固定参数,用于将ADC码值转换为电流单位。 - 注意:手册指出,因硬件改进,此步骤通常不需要。仅在观察到明显的零漂时才进行。
板级偏移校准(可选):
- 目标:消除PCB板上的热电偶效应或其他不对称性引入的额外偏移。
- 操作:在
0xF081模式(外部通路)下,同样确保零电流。读取ADCCC。 - 计算:
Board Offset = (ADCCC * Coulomb Counter Offset Samples) - CC Offset。这实际上测量的是内部短路与外部通路之间的差值。
CC增益/容量增益校准(必须):
- 目标:修正电流测量的比例系数,直接影响安时(mAh)计量的准确性。
- 操作:施加一个已知的、稳定的电流(如1A恒流放电)。读取
ADCCC并取平均。 - 计算:
CC Gain = I_CC / (ADCCC * Coulomb Counter Offset Samples - CC Offset + Board Offset)Capacity Gain = 298261.6178 / CC Gain - 关键点:
Capacity Gain用于将电荷计数转换为容量值(mAh),其计算依赖于一个固定的常数298261.6178,该常数与芯片内部ADC和积分器的设计相关。
4.2.3 温度(Temperature)校准
温度校准主要是修正偏移。芯片内部有一个温度传感器,外部可通过TS引脚连接热敏电阻(NTC)。
- 内部温度传感器校准:
- 将芯片置于恒温环境中,记录精确的环境温度
TEMP_TINT(单位0.1°C)。 - 从
DAStatus2()读取芯片报告的内部温度原始值TINT(需转换为0.1°C单位)。 - 计算新的偏移:
TINT_offset_new = TEMP_TINT - (TINT + TINT_offset_old),其中TINT_offset_old是数据闪存中的旧值。然后将新值写回。
- 将芯片置于恒温环境中,记录精确的环境温度
- 外部TS1传感器校准:
- 将连接在TS1引脚上的热敏电阻置于恒温环境,记录温度
TEMP_TS1。 - 从
DAStatus2()读取TS1通道的报告温度TS1。 - 计算新偏移:
TS1_offset_new = TEMP_TS1 - (TS1 + TS1_offset_old),写回数据闪存。
- 将连接在TS1引脚上的热敏电阻置于恒温环境,记录温度
校准现场实录与避坑指南
- 设备准备:校准必须在稳定的环境中进行。电压源、电流源的精度和稳定性至少要比芯片目标精度高一个数量级。温度校准需要高精度恒温槽或温度校准仪。
- 热平衡:进行电流校准时,大电流会导致采样电阻(Sense Resistor)发热,从而改变其阻值,引入误差。必须在电流稳定、电阻温度达到平衡后再开始采样读数。同样,温度传感器校准必须等待热平衡。
- 通信稳定性:校准过程中需要频繁通过I2C读取
MACData()。务必确保I2C通信稳定,无错包。建议在读取关键数据后增加校验,如读取两次对比。- 校准顺序:建议按照电压 -> 电流(偏移->增益) -> 温度的顺序进行。因为电流校准可能依赖稳定的电压基准(虽然BQ28Z620是差分测量,影响较小),而温度测量相对独立。
- 数据备份:在开始校准前,务必先读取并备份数据闪存中的所有原始配置参数!一旦校准计算或写入错误,可能导致芯片无法正常工作。拥有备份可以快速恢复。
- 退出校准模式:所有校准步骤完成后,必须发送
0x002D命令清除[CAL_EN]位,退出校准模式。忘记这一步,芯片将一直输出原始ADC数据,无法进行正常的电量计功能。
5. 标准I2C命令解析与系统集成要点
完成底层校准和安全配置后,BQ28Z620在应用中主要通过一组符合SBS(Smart Battery System)规范的标准I2C命令与主机通信。理解这些命令是集成BMS功能的关键。
5.1 关键状态与数据命令
芯片的I2C从机地址为0x55(7位)。以下是一些最常用且至关重要的命令:
Temperature()(0x06/0x07):返回电池温度,单位0.1K。注意:它报告的是Pack Configuration中[TEMPS]位所选的温度源(内部或外部)。在配置时需根据实际使用的传感器进行设置。Voltage()(0x08/0x09):返回电池包的总电压,单位为mV。这是所有电芯电压的加和。Current()(0x0C/0x0D):返回瞬时电流,单位为mA。正值表示充电,负值表示放电。AverageCurrent()(0x14/0x15):返回平均电流,基于一定时间窗口(通常数秒)的滤波值,比瞬时电流更稳定,常用于电量计算。RelativeStateOfCharge()(0x2C/0x2D):荷电状态(SOC),即常说的“电量百分比”,范围0-100%。这是电量计算法的核心输出。StateOfHealth()(0x2E/0x2F):健康状态(SOH),反映电池当前最大容量相对于设计容量的百分比,是电池老化程度的重要指标。BatteryStatus()(0x0A/0x0B):一个位图寄存器,包含了丰富的状态标志位,如:FD(Bit 4):完全放电标志。FC(Bit 5):完全充电标志。DSG(Bit 6):放电指示(1=放电中)。OCA(Bit 15):过充报警。主机应定期轮询此寄存器以监控电池状态。
5.2 控制命令与制造访问
ManufacturerAccess()/ControlStatus()(0x00/0x01):这是一个多功能寄存器。写入时,其行为等同于MACSubcmd(),用于发送所有制造、校准、安全相关的扩展命令。读取时,它返回控制状态字,其中SEC1和SEC0位直接指示当前的安全模式(Sealed/Unsealed/Full Access),AUTH位指示认证状态,CALM位指示自动校准模式是否开启。这是判断芯片当前操作权限最直接的方法。MACSubcmd()(0x3E/0x3F) 与MACData()(0x40~0x5F):这是访问芯片高级功能的“后门”。如前所述,所有安全操作、校准使能、原始数据读取、生命周期数据刷新、密钥修改等,都通过向MACSubcmd()写入特定命令码来实现,而数据则通过MACData()块进行交换。MACDataSum和MACDataLen用于保证数据块传输的完整性。
5.3 系统集成常见问题排查
通信失败:
- 现象:主机无法读取任何数据,或读取全为0xFF/0x00。
- 排查:
- 检查I2C物理连接:上拉电阻(通常4.7kΩ)、电源、地线。
- 确认I2C地址是否正确(0x55)。
- 使用逻辑分析仪抓取I2C波形,看是否有ACK应答。
- 检查芯片是否处于SEALED模式。在SEALED模式下,只有标准命令可读,尝试读取扩展地址(如MACData)会返回错误或无应答。尝试发送Unseal Key(如果已知)进入UNSEALED模式再试。
SOC跳变或不准确:
- 现象:电量百分比显示不稳定,或与真实容量不符。
- 排查:
- 首要检查校准:电压、电流校准不准是导致SOC计算错误的根本原因。重新执行校准流程。
- 检查
Design Capacity、Cycle Count等参数配置是否正确。 - 确认电池化学参数(Ra表、Qmax等)是否已通过学习周期(Learning Cycle)成功更新。一个未学习的电量计,其SOC精度是很差的。
- 检查
MaxError()寄存器(0x0E/0x0F),它会���告SOC估算的预期误差范围。如果误差持续很大,说明学习数据可能有问题。
无法进入UNSEALED/FULL ACCESS模式:
- 现象:发送密钥后,读取
ControlStatus()发现模式未改变。 - 排查:
- 确认发送的密钥字节序是否为小端(LSB在前)。
- 确认两个密钥字是否在4秒内连续发送,中间无其他命令。
- 如果是在修改密钥后出现,请确认使用的是新密钥还是旧密钥。
- 芯片是否已处于永久失效(Permanent Fail)状态?某些PF状态会锁定模式切换。
- 现象:发送密钥后,读取
安全认证失败:
- 现象:HMAC认证结果不匹配。
- 排查:
- 对比主机和芯片使用的认证密钥
KD是否完全一致。 - 检查随机数
M的生成和发送格式(20字节,小端序)。 - 检查HMAC计算过程,特别是SHA-1的填充步骤,是否严格遵循FIPS 180-4规范。可以使用已知的测试向量进行验证。
- 确认在发送
M和读取HMAC3之间等待了足够的延时(手册建议250ms)。
- 对比主机和芯片使用的认证密钥
将BQ28Z620集成到产品中,远不止是连接I2C线那么简单。它要求工程师深入理解其安全模型、校准哲学和数据记录机制。从生产线的校准工装开发,到产品软件中的安全认证流程和故障诊断逻辑,每一个环节都需要精心设计。这颗芯片提供的是一套强大的工具,而能否打造出安全、精准、长寿的电池系统,则取决于使用这些工具的匠心。