
STM32N6 的 Vbat minimum是我去年做一款设备时被狠狠教育过的参数。当时我们把主电源、电池备份、RTC 日历都调通了整机低功耗测试也过了结果到了高低温循环那一轮低温环境下偶尔出现上电后时间丢失的现象。反复看日志才发现问题不在 VDD而在 VBAT 引脚上电池电压在低温下掉到了 1.6V 左右刚好压在 STM32N6 备份域的最低工作电压边缘RTC 和备份 RAM 的供电状态变得极不稳定。从那以后我对 “Vbat minimum” 这几个字就再也不敢只看标称值了。这篇文章想把 STM32N6 这颗 MCU 上关于 VBAT 最小电压的核心点讲透。内容包括数据手册里最容易看漏的电气参数、备份域里安全区与非安全区功能对 VBAT 使用的影响、硬件设计上避免电压跌落的做法以及软件层面怎么把备份域访问和安全属性配置串起来。适合正在做低功耗设备、需要电池备份 RTC 或掉电保存关键数据的开发者参考尤其是刚接触 STM32N6 的新项目团队。1. 先把“Vbat minimum”这件事拆清楚1.1 VBAT 引脚在 STM32N6 上是干什么的STM32N6 是意法半导体面向边缘 AI 应用的高性能 MCU 系列内核是带 TrustZone 和 Helium 扩展的 Cortex-M55同时集成了神经网络处理单元 NPU。主电源 VDD 掉电之后整个芯片大部分功能都会停止但有一小块“备份域”还需要继续工作比如 RTC 日历、备份寄存器、备份 SRAM以及部分防篡改检测逻辑。这一小块电路由 VBAT 引脚供电这也是电池备份方案存在的基础。从系统框图上看VBAT 域在芯片内部有一个电源切换结构当 VDD 正常时备份域由主电源侧供电当 VDD 掉到某个阈值以下或者完全断电时内部的 VBAT 开关会自动把备份域的供电切换到 VBAT 引脚连接的电池上。这个切换不需要软件干预但电压规格必须满足否则切换瞬间很容易出现数据丢失。有人说 VBAT 只给 RTC 用其实不对。STM32N6 的备份域里除了 RTC还包含备份寄存器、备份 SRAM以及 TAMP 防篡改检测相关资源。备份 SRAM 可以在主电源断电后继续保存应用关键数据这一点对带安全分区设计的项目尤其重要因为可能存在需要隔离保护的数据这些数据在掉电后不能被非安全侧程序读取。1.2 数据手册里那一行 VBAT 电压范围很多开发者在前期选型时只看 VDD 范围把 VBAT 参数当作“反正接个电池就行”的内容。实际上数据手册中关于 VBAT 的电气参数有几个表格需要对比着看。以常见封装为例STM32N6 的 VBAT 工作电压范围通常会写在“供电与复位特性”章节里典型值为 1.62V 到 3.6V。1.62V 就是 Vbat minimum也是本文重点讨论的值。有些朋友会误以为 VBAT 可以低到 1.2V 甚至 1.0V这里面要注意区分部分 MCU 的 RTC 域在超低功耗模式下有独立的降压调节器最低工作电压确实可能低于 1.2V但那是特定产品系列的扩展特性。STM32N6 的备份域直接由 VBAT 或内部切换后的电压供电没有那层额外的低压调节器所以最低值通常就是 1.62V。还要区分“工作电压范围”和“绝对最大额定值”。绝对最大额定值里那栏写的是 -0.3V 到 4.0V 之类那只是“不能超过超过可能损坏芯片”的极限值不是可持续工作的范围。很多硬件工程师踩的坑就是把绝对最大额定值当作可长期使用的电压下限导致电池电压偏低时备份域仍然工作但稳定性已经得不到保证。1.3 最小 VBAT 背后的物理含义Vbat minimum 不只是“低于这个值就不能计时”那么简单。VBAT 引脚向备份域供电时备份域里的存储单元要保持数据需要满足一定的电压保持条件。如果电压低于某个内部工作点存储单元可能进入不确定状态表现出来的现象就是RTC 寄存器值变成随机数备份 SRAM 内容被破坏备份寄存器读取值与实际写入值不一致防篡改状态位异常翻转。更关键的是VBAT 切换过程中存在一个短暂的“由 VDD 供电切换为 VBAT 供电”的过渡状态。如果 VBAT 电压恰好处于临界值切换瞬间电流需求会加剧电压跌落导致备份域电压瞬间跌破内部保持阈值。这种问题在低温下尤其明显因为电池内阻在低温下会增大电压跌落幅度更严重。所以在设计上我一般会建议把 1.62V 当作“绝对不允许长时间停留”的底线而不是“正常工作点”。实际项目中应该在硬件监控电路上设置一个比 1.62V 高一些的备份电压报警阈值比如 1.8V 或 2.0V在电压真正跌破最小工作范围之前系统还能把关键数据提前迁移到备份域以外的存储介质或者主动进入安全关机流程。2. 应用安全区与非安全区功能和 VBAT 有什么关系2.1 Cortex-M55 TrustZone 的分区逻辑STM32N6 的 Cortex-M55 支持 ARM TrustZone 技术。简单说整个系统被划分成安全世界和非安全世界两个运行环境安全世界可以访问全部资源非安全世界只能访问被明确标记为非安全的资源。固件通常会把启动代码、密钥、加解密逻辑放在安全区把 RTOS、网络协议栈、业务逻辑放在非安全区。在内存映射上安全属性可以由硬件配置决定也可以通过软件运行时修改。STM32N6 作为高端型号对这一块的支持比较完整。备份 SRAM、RTC 寄存器、TAMP 相关寄存器在这些资源中属于比较特殊的一类它们由 VBAT 供电掉电后内容可能继续保持因此安全属性尤其重要。2.2 备份域资源的“应用安全区”与“应用非安全区”划分最近不少同行在讨论 STM32N6 时提到“应用安全区和应用非安全区功能”这个词在 STM32N6 的备份域场景下指的是备份 SRAM 等资源可以按 TrustZone 的规则被安全侧或非安全侧访问。具体到使用方式安全侧程序可以把备份 SRAM 中部分区域标记为安全属性只有运行在安全世界的代码才能读写这些区域剩余区域可以标记为非安全属性非安全侧程序可以直接访问不需要反复调用安全侧接口RTC 的备份寄存器和 TAMP 共享寄存器也可以进行类似的安全属性配置。这个功能的价值在于设备掉电后安全数据不会暴露给非安全侧。比如你要保存一个用于下次开机的认证随机数或者保存一段防回滚的计数值放在受保护的安全备份 SRAM 里比放在普通 SRAM 里可靠得多。STM32N6 里这些安全属性的配置一般通过安全位secure option和相应控制寄存器来完成。需要特别注意的是部分安全属性配置是“锁定”的一旦锁定只有复位后才能重新修改。这就给软件设计带来一个约束在项目启动早期就必须规划好备份域资源的安全划分否则开发到后期再改安全属性会非常痛苦。2.3 安全区划分对数据掉电保持流程的影响我在实际项目里遇到过一个很有意思的问题安全侧代码把关键计数值写进了备份 SRAM但在低功耗唤醒后非安全侧业务逻辑想直接读取这个值。因为备份 SRAM 区域被配置为安全属性非安全侧代码一旦读取就会触发错误异常。当时我们花了不少时间去排查为什么唤醒后系统会发生 HardFault最后定位出来就是安全属性访问权限的问题。这个例子的教训是安全区与非安全区的划分必须在系统启动早期确定并且要形成一份资源映射表。对于需要安全侧和非安全侧共同访问的数据应使用安全侧提供的 Secure Service 接口来读写而不是直接让非安全侧操作备份 SRAM 地址。另外如果备份域数据在安全区中那么掉电恢复后的第一个访问者必须是安全侧启动代码。具体来说安全侧初始化流程要先完成 TrustZone 相关配置再将 RTC、备份寄存器、备份 SRAM 的访问权限授予非安全侧之后非安全侧固件才能继续跑业务逻辑。如果启动顺序反了非安全侧代码运行到一半才发现备份数据被安全属性挡住这个问题会非常难查。3. 围绕 Vbat minimum 的硬件设计注意事项3.1 常见 VBAT 供电方案STM32N6 开发中常见的 VBAT 供电来源有几种3V 纽扣电池CR2032直接供电可充电锂电池经过 LDO 降压后供电主电源经过二极管后与备用电池并联供电超级电容作为临时后备电源。其中锂电池经过 LDO 的方案容易把电压做得比较高纹波也小但 LDO 本身有静态功耗长期待机时反而可能拖累电池。纽扣电池方案最省事但 CR2032 在低温下电压跌落明显设计时必须留足余量。如果你是做可穿戴设备或者智能门锁这类设备往往会选择“主电源 备用电池 二极管隔离”的供电结构。主电源正常时VBAT 由 VDD 侧通过二极管供电主电源掉电后电池侧通过另一个二极管向 VBAT 供电。这种方式成本低、实现简单但有个问题是二极管的压降。比如锂电池电压 3.0V一个肖特基二极管压降 0.3V到 VBAT 引脚就只剩 2.7V电压余量还算够。但如果电池本身已经放完一部分电只剩下 1.9V再扣掉二极管压降VBAT 就可能低于 1.62V 了。所以我会建议如果采用二极管切换方案一定不要只看电池空载电压要分析在最低预期电池电压下经过二极管、PCB 走线、接触电阻之后VBAT 引脚上实际能得到的电压。3.2 电压瞬态跌落最小 VBAT 的隐形杀手VBAT 的电流需求虽然很小但也不是完全静态的。备份域在进行 RTC 校准、备份 SRAM 写入、TAMP 采样时都会有短时电流毛刺。尤其是备份 SRAM 在写操作瞬间内部存储单元需要较大的瞬态电流如果 VBAT 供电回路的输出阻抗太高电压就会瞬间下坠。这个问题的典型场景是电源用万用表测电压显示 2.2V看起来没问题但在示波器上抓 VBAT 波形能明显看到写备份 SRAM 时电压跌到 1.5V 甚至更低。低频下这种瞬态跌落不一定能通过万用表发现但对备份域的存储单元来说已经是致命打击。所以硬件设计上VBAT 引脚必须并联去耦电容而且电容要尽量靠近引脚缩短走线。我一般会放一颗 100nF 和一个 1μF 的电容并联覆盖高频和低频噪声。如果设计空间允许还可以在 VBAT 源端加一个 10Ω 左右的串联电阻和 PCB 上的寄生电容组成简易低通滤波但这个电阻不能太大否则直流压降会抵消掉滤波效果。实测中10Ω 到 47Ω 是一个可用范围具体要结合备份域电流和可容忍压降来算。3.3 电源监控与 VBAT 切换时序为了让系统在“VBAT 即将低于最小值”之前做出反应硬件上最好有一个电压监控芯片或分压采样回路。监控点优先选择电池侧电压而不是 VBAT 引脚本身因为 VBAT 引脚上的电压可能已经被二极管、PCB 阻抗压掉了不能真实反映电池状态。当监控到电池电压低于设定阈值时系统应该做三件事进入关键数据保存流程把易失数据写入备份 SRAM并记录进入低电量的状态标志关闭可能产生瞬态大电流的外设减少备份域供电压力将系统切换到最低功耗模式避免后续电压不足导致程序跑飞。阈值如何选取我会把“报警阈值”设置在 1.9V 到 2.0V 左右而不是 1.62V。这样在报警之后到电压真正跌破 1.62V 之间还有至少几百毫秒的时间窗口。如果电池内阻很大电压从 1.9V 跌到 1.62V 可能只需要一两秒但足够完成备份操作了。3.4 PCB 布局与地回路VBAT 相关电路在 PCB 布局中很容易被忽略因为它的电流太小很多人认为走线长一点没关系。实际上VBAT 走线过长而且靠近数字开关信号时会通过寄生电容耦合噪声。备份域存储单元是高阻抗电路对噪声非常敏感。我踩过的一个实际案例是VBAT 走线经过电机驱动 PWM 信号附近导致 RTC 每次上电后时间偶尔会偏移几十秒。查了很久才意识到是 PCB 上 VBAT 走线和 PWM 低压信号并行走了一段PWM 翻转瞬间的电流噪声耦合到了 VBAT 上。把 VBAT 走线改到内层并加宽之后问题消失。所以VBAT 走线尽量满足以下几点走线长度越短越好优先在元件面完成连接避开高频数字信号、PWM 信号、电源开关节点去耦电容的地引脚直接回到芯片地不要绕远路如果有多层板把 VBAT 网络放在内层并用地平面屏蔽。4. 软件层面低 VBAT 场景下的备份域初始化和安全区配置4.1 使能备份域访问无论是读写备份寄存器、备份 SRAM还是配置 RTC第一步都要在软件里打开备份域访问权限。STM32N6 中VDD 上电后默认情况下备份域时钟是关闭的备份域写访问也是禁用的。如果不能先打开权限后面所有备份域操作都会因为没有时钟而超时失败。典型的初始化流程是开启 PWR 外设时钟设置 PWR 备份访问使能位允许 CPU 访问备份域寄存器开启 RTC 和备份 SRAM 相关时钟等待备份域写保护解除。这一步的代码比较简单但很多人会漏掉“先开时钟”这个前提。在 STM32 系列 HAL 库中可以理解为先调用对应外设的时钟使能函数再调用备份访问使能函数。顺序颠倒会导致外设寄存器写入无效。4.2 配置备份 SRAM 与 TAMP 资源的安全属性前面提到STM32N6 的备份域资源可以配置为安全属性或非安全属性。具体配置方式一般分两层第一层是系统级的安全属性控制。Cortex-M55 内部的 SAU 和 STM32N6 的 IDAU 会决定内存区域的安全状态。备份 SRAM 的某一部分地址如果被定义为安全区那么非安全代码访问就会触发异常。第二层是备份域内部的安全隔离控制比如 TAMP 相关寄存器中可能存在安全使能位用于控制某个备份资源是否只允许安全侧操作。如果你使用 STM32 的 TrustZone 开发流程在工程配置阶段就会生成安全项目的初始化和安全属性定义。这里重点提醒一点备份 SRAM 的安全属性一旦配置错误最容易出现的现象是系统在低功耗唤醒或热启动后无法访问之前写入的备份数据而且因为异常发生在安全边界上调试器不一定能捕获到明确报错。我的建议是在项目启动阶段就定义一张备份域资源分配表明确哪些区域归安全侧、哪些区域归非安全侧并在代码中添加编译期断言检查。如果工程后期需要调整务必先确认安全属性是否已被锁定锁定后的恢复只能通过复位实现。4.3 低 VBAT 时的关键数据保存策略前面硬件部分提到了电压监控软件侧要做的是在电压报警触发后把需要保存的数据写入备份 SRAM。我自己常用的策略是在备份 SRAM 开头放置一个魔数用来判断上次是否成功保存过数据数据区内部再放一个简单的校验和保存完成后把状态标志写到备份域寄存器中下次上电时安全侧启动代码先检查魔数和校验和如果合法再解析数据。为什么需要校验和因为电压临界状态下备份 SRAM 写入过程可能被瞬态电压跌落打断没有校验和的情况下恢复的数据可能是半写状态的垃圾数据。校验和字段放在数据区末尾读取时先整体计算再比对能有效避免使用损坏数据。另外不建议在低电压报警之后才做复杂的加密操作。STM32N6 虽然有 NPU 和较强的算力但加密过程耗电大在电池电压已经偏低的情况下反而会加剧备份域电压跌落。如果数据需要保护应该在系统正常运行期间就完成加密和签名低电量时只做简单的搬运和存储。4.4 安全侧启动顺序先建安全边界再碰备份数据如果备份域资源涉及安全区/非安全区划分那么系统启动顺序必须严格按照“安全优先”的原则执行。我推荐的下电与上电流程是这样的正常运行状态下安全侧固件定期将关键运行数据加密后写入备份 SRAM 的安全区电压报警触发后安全侧再补充一些快速变化的状态随后系统进入低功耗模式。下次上电时复位向量先进入安全启动代码安全侧完成 TrustZone 环境初始化包括配置 SAU、IDAU 和备份域资源的安全属性。然后安全侧解析备份 SRAM 数据验证通过与校验。验证通过后安全侧把非敏感数据通过安全服务接口传给非安全侧最后跳转到非安全侧应用。这个流程看似多了一步但能避免很多安全边界引发的疑难杂症。尤其是当非安全侧固件在一个旧的运行记录里试图直接访问备份 SRAM但安全属性已经变化时异常会非常隐蔽。5. 常见问题与排查实录5.1 典型问题速查表现象可能原因排查思路RTC 上电后时间丢失VBAT 电压低于 1.62V用示波器抓 VBAT 瞬态波形关注最低值备份寄存器读取乱码VBAT 去耦不足检查 VBAT 电容和走线加急去耦备份 SRAM 数据损坏低电压时写入被中断增加魔数和校验和调整电压报警阈值唤醒后 HardFault安全属性访问越界检查备份 SRAM 安全/非安全配置低功耗模式下电池快速耗尽VBAT 电路存在漏电回路检查二极管方向、外部器件漏电系统启动时备份域初始化超时备份域时钟未使能先使能外设时钟再使能备份访问5.2 排查低 VBAT 问题的工具与顺序遇到 VBAT 相关的问题我一般不会直接改代码而是先做电气测量。需要准备的工具是示波器最好是带深存储的能捕捉长时间的电压波形。排查顺序用万用表测 VBAT 静态电压确认大体范围用示波器长时间抓取 VBAT 波形重点看 VDD 掉电瞬间和备份 SRAM 写入瞬间的跌落在电压报警触发点附近设置示波器触发观察报警后到备份完成这一段 VBAT 电压变化再检查软件侧备份域时钟是否打开、安全属性配置是否和启动顺序一致最后用最小系统复现缩小硬件外围干扰范围。有一次我们排查一个非常诡异的 RTC 偶尔不准的问题示波器抓了一天都没抓到异常最后把触发条件设置为“VBAT 低于 1.9V”才捕捉到一段持续时间不到 200 微秒的跌落。这给我们的教训是VBAT 异常常常是短时瞬态不能用万用表或简单的电压检测去判断。5.3 一些容易忽略的坑第一评估板上可能没有安装 VBAT 用的电池或超级电容。如果你只是插着调试器、由 VDD 供电来运行代码备份域看起来一切正常但一旦拔掉调试器VBAT 悬空备份数据就全部丢失。这不算芯片问题是评估板设计问题但很容易误导人。第二不要在低电压报警后执行长时间 Flash 擦写。STM32N6 上开发项目时低电量逻辑往往连带着要做日志保存很多工程师顺手就把日志写进 Flash。但 Flash 写入需要内部电荷泵升压VDD 掉电条件下VBAT 域只能维持备份域无法给 Flash 写入提供稳定电源。所以掉电保存一定放在备份 SRAM不是 Flash。第三安全区配置与调试器的冲突。如果备份 SRAM 被配置为安全属性部分调试器默认在非安全世界运行访问备份 SRAM 时可能直接失败。这不是代码问题而是调试工具设置问题。遇到这种情况可以尝试把调试器切到安全世界访问模式或者临时调整安全属性来验证。5.4 电压报警阈值该怎么选综合前面的讨论报警阈值并不是越高越好也不是越低越好。阈值太高系统会频繁进入备份状态影响用户体验阈值太低又可能来不及完成保存。工程上比较稳妥的做法是先根据电池放电曲线确定电池从 2.0V 跌到 1.62V 的时间再计算备份数据所需的最长时间中间留出 3 到 5 倍余量。如果计算出来的报警阈值过于接近 1.62V说明硬件供电回路阻抗偏大应该优先优化硬件而不是继续调软件。以我自己常用的方案为例当使用 CR2032 纽扣电池时报警阈值设在 1.85V当使用锂电池加 LDO 时报警阈值设在 2.0V。前提是实际测量确认从报警到备份完成VBAT 电压始终高于 1.7V不会低于 1.62V 的最小值。6. 一些项目上的体会从那次低温环境下时间丢失的问题之后我在新项目里都会把 VBAT 供电当成和主电源一样重要的模块来设计而不是最后随手找一个电池接上去。STM32N6 的备份域里既有 RTC、备份寄存器也有备份 SRAM还有安全区和非安全区的划分能力这些资源只有在 VBAT 电压满足要求的前提下才能真正发挥作用。在调试上我会建议团队从一开始就在固件里加入备份域健康状态监控包括备份 SRAM 魔数校验、RTC 有效性检查、VBAT 电压检测。这些逻辑不需要很复杂但能让你在问题刚出现时就快速定位而不是等到整机返厂才发现是 VBAT 掉电压。如果你正在用 STM32N6 设计带电池备份的产品最后再分享一个我自己的习惯焊接完第一版样板后第一时间把示波器探头接在 VBAT 引脚上实际测试 VDD 掉电瞬间的电压波形。这个测试只需要十分钟但能帮你发现大量设计隐患。很多问题在高低温试验里才暴露往往就是这十分钟没做。