2. 断电基础
在讨论断电保护与升级回滚之前,必须先建立对“断电”本身的准确认识。很多工程师把断电简单理解为“设备没电了”,但在真实系统中,断电的持续时间、电压跌落深度、恢复方式以及发生时机,决定了系统是毫发无损、数据损坏,还是彻底变砖。本节从断电类型、电源故障模型、对系统的影响以及常见场景四个角度,建立后续设计所需的物理与逻辑基础。
一、断电的三种基本类型
按照持续时间与电压跌落程度,工程上通常把断电划分为瞬时、短时和持续三类。它们的边界并非绝对,而是与系统电源的储能能力、负载功耗和恢复策略强相关。
- 瞬时断电(毫秒级):持续时间通常在几毫秒到几十毫秒,常见于电网切换、大负载启停、接触抖动。此时输入电压短暂跌落,但系统内部的大电容、超级电容或小容量后备电源仍能维持核心电路工作。对 MCU 而言,可能只表现为一次复位或看门狗触发。
- 短时断电(百毫秒到数秒):持续时间足以让普通电容完全放电,但尚未超出后备电池或超级电容的支撑范围。系统往往需要进入低功耗保持状态,或完成一次紧急数据落盘后安全关机。
- 持续断电(数秒以上至永久):后备储能耗尽,系统完全失去供电。此时唯一能依赖的是非易失性存储中已经写入的数据,以及下次上电时的恢复逻辑。
判断断电类型的关键不是“断了多久”,而是“系统内部还有多少可用能量”。同样是 100 ms,对带超级电容的仪表可能是短时断电,对只有 10 µF 电容的模块则已是持续断电。
二、电源故障模型:从电压跌落到能量耗尽
为了可设计、可测试,我们需要把物理断电抽象为电源故障模型。一个实用的模型包含四个阶段:正常供电、电压跌落、能量维持、完全失电。下图展示了输入电压、内部储能电压与系统状态随时间的对应关系。
该模型的价值在于:它把“断电”从单一事件拆成了可观测、可干预的阶段。设计断电保护,本质上就是在②和③阶段争取时间,并在④阶段保证数据完整。
三、断电对系统的分层影响
断电对系统的影响不是均匀的,而是按供电层级逐层扩散。理解这种分层,有助于确定保护优先级。
| 层级 | 典型对象 | 断电影响 | 保护重点 |
|---|---|---|---|
| 能量层 | 输入电源、电容、电池 | 电压跌落、储能耗尽 | 储能容量与切换速度 |
| 硬件层 | MCU、Flash、外设 | 复位、总线错误、写操作中断 | 掉电检测与写保护 |
| 数据层 | 配置、日志、升级包 | 半写、校验失败、元数据不一致 | 原子写与双备份 |
| 系统层 | 启动流程、固件版本 | 无法启动、版本回退失败 | 引导冗余与回滚策略 |
其中数据层是最容易被忽视、也最容易造成“隐性损坏”的地方。例如 Flash 写入过程中断电,可能只写入了半个页,导致校验和错误;如果元数据先更新而数据未写完,系统下次启动就会读到不一致的状态。
四、常见场景与误区复盘
真实项目中,断电往往不是实验室里的理想波形,而是伴随各种边界条件出现。以下场景值得重点关注:
- 升级过程中断电:固件正在擦写,新版本未完整写入,旧版本可能已被覆盖。若没有双分区或备份区,设备将无法启动。
- 配置保存瞬间断电:参数写入非易失存储时掉电,导致配置区校验失败,设备恢复默认值或反复重启。
- 电网频繁抖动:瞬时断电反复发生,系统不断复位,看门狗和日志被反复触发,可能掩盖真正的故障原因。
- 电池耗尽型断电:电压缓慢下降而非突降,MCU 可能在低压下执行异常指令,产生不可预期的写操作。
常见误区:只关注“断电后能否重启”,却忽略“断电瞬间是否写坏了数据”。前者是可用性问题,后者是完整性问题,后者往往更难恢复。
复盘时可以借助一段简单的掉电日志来定位问题。例如设备在启动时打印如下信息:
[boot] reset_reason = BOR (brown-out reset)
[boot] config_crc = 0x3F2A expected 0x8C11 -> CRC FAIL
[boot] fallback to factory config
[boot] firmware slot A invalid, boot from slot B
这段日志说明:设备经历了欠压复位,配置区校验失败并回退到出厂配置,同时主固件分区无效、从备份分区启动。它对应的正是“短时断电 + 升级中断”的复合场景。设计时若没有 BOR 检测、配置双备份和双分区引导,设备很可能直接变砖。
核心结论:断电保护的设计起点,不是“如何防止断电”,而是“在断电不可避免的前提下,如何让系统在能量耗尽前完成最关键的动作,并在下次上电时可靠恢复”。