4. OTA系统需求与方案选型

OTA(Over-The-Air)在车载与工业场景中并不是一个“把固件通过网络写进Flash”的简单动作,而是一套受安全、实时性、供电与回滚能力约束的系统工程。ST Stellar 系列 MCU 内部集成双银行(Dual-Bank)Flash,为“运行中升级、失败可回滚”提供了硬件基础。但在动手写 Bootloader 之前,必须先回答三个问题:场景到底需要什么?单银行和双银行差在哪里?双银行方案要满足哪些可量化的工程约束?本节围绕这三个问题展开,为后续的 Flash 分区、Boot 切换与刷写实现建立设计基线。

一、车载与工业OTA的场景需求拆解

车载与工业OTA的需求可以归纳为五类,它们直接决定方案选型:

  • 可用性需求:升级期间车辆或设备是否允许停机。车载ECU通常要求“升级不中断关键功能”,工业控制器则可能允许计划性停机窗口。可用性要求越高,越倾向双银行。
  • 回滚需求:新固件启动失败、校验失败或功能异常时,能否自动退回旧版本。这是双银行最核心的价值。
  • 安全需求:固件需签名验签、防篡改、防降级(Anti-Rollback),传输需加密。安全校验必须在切换运行银行之前完成。
  • 供电与掉电需求:升级过程可能持续数十秒到数分钟,期间掉电不能导致设备“变砖”。这要求写入与切换具备原子性或可恢复性。
  • 带宽与时间需求:CAN/CAN-FD、以太网、UART 或无线链路的带宽差异巨大,决定传输策略与分块大小。

以某车载域控制器为例(示例假设):固件镜像 1.5 MB,CAN-FD 有效载荷约 4 Mbps,理论传输约 3 秒,但加上擦除、写入、验签与切换,整体升级窗口约 20~40 秒。若此时车辆正在行驶,单银行方案必须停机,双银行方案则可让旧固件继续运行,新固件在后台银行写入,最后通过一次复位切换。

二、单银行与双银行方案对比

单银行方案只有一个可执行固件区,升级时必须先擦除当前固件再写入新固件,期间设备无法运行;一旦掉电或写入失败,设备将失去可执行代码,需要外部调试器或恢复模式介入。双银行方案则把 Flash 划分为 Bank A 与 Bank B,当前运行银行保持不动,新固件写入另一银行,写入并校验通过后再切换启动银行。

对比维度单银行方案双银行方案
升级期间可用性不可用(停机)旧固件持续运行
掉电安全性差,可能变砖好,旧银行完好可回退
回滚能力基本没有硬件级回滚
Flash 占用1 份固件空间2 份固件空间 + 元数据
切换机制无需 Boot 标志与银行映射
适用场景低成本、可停机、有恢复手段车载、工业、高可靠场景

结论很明确:只要场景对“升级不中断”或“失败可回滚”有硬性要求,就应选择双银行。ST Stellar 的双银行 Flash 支持在 Bank A 运行时对 Bank B 进行擦写,并在复位后通过选项字节或启动地址映射切换执行银行,这正是双银行OTA的硬件前提。

三、双银行OTA的工程约束与设计指标

选定双银行后,必须把需求转化为可验证的工程约束。以下指标建议在项目初期就写入设计文档(数值为示例假设,需按实际芯片型号与链路确认):

  • 银行容量约束:单银行容量必须 ≥ 最大固件镜像 + 元数据。若 Stellar 单银行为 2 MB,固件镜像 1.5 MB,则剩余约 0.5 MB 用于 Boot 标志、版本号、签名与日志。
  • 切换原子性:银行切换标志的写入必须是一次原子操作,且带 CRC 或双副本,避免标志位半写导致启动银行不确定。
  • 校验完整性:新固件写入后必须完成整镜像 CRC32 与签名验签,两项均通过才允许置位切换标志。
  • 回滚触发条件:新固件连续启动失败 N 次(示例 N=3)或看门狗超时,Boot 应自动切回旧银行并记录失败原因。
  • 掉电恢复:任意时刻掉电,重新上电后 Boot 必须能判断“当前有效银行”,并继续或回退,不允许出现两个银行都不可用。
  • 升级时间预算:从开始传输到切换完成的总时间应满足整车或产线节拍,示例目标 ≤ 60 秒。
  • 安全指标:支持固件签名验签、防降级版本号比较、传输加密(如 TLS 或 SecOC)。
设计指标应可测量、可测试。例如“回滚成功率 100%”应转化为“在写入 50%、90%、切换前三个掉电点各注入 100 次掉电,设备均能恢复到可运行状态”。

四、从需求到方案的判断路径

把上述分析串成一条可执行的判断路径,有助于在项目评审时快速达成一致。下图展示了从场景需求出发,经过可用性、回滚、供电与安全四道判断,最终落到单银行或双银行方案,并输出关键设计指标的关系。

双银行OTA方案选型判断路径 场景需求输入 车载/工业 · 链路 · 节拍 判断1:可用性 升级能否停机? 关键功能是否中断? 判断2:回滚 失败能否退回旧版? 是否要求自动回滚? 判断3:供电与安全 掉电风险 · 签名验签 防降级 · 加密传输 任一为“是” → 倾向双银行方案 全部为“否” → 可评估单银行方案 双银行OTA方案 Bank A 运行 / Bank B 写入 校验通过后切换启动银行 单银行方案 停机擦写 · 需外部恢复 仅用于可停机场景 输出:双银行OTA设计指标 银行容量 ≥ 镜像+元数据 · 切换原子性 · CRC+签名双校验 回滚阈值 N=3 · 掉电可恢复 · 升级窗口 ≤ 60s · 防降级 关键风险点 切换标志半写 新固件启动失败未回滚

图中把“可用性、回滚、供电与安全”作为三道判断闸门:只要其中任意一项为“是”,就应选择双银行;三项全为“否”时,才可评估单银行以节省 Flash 成本。选定双银行后,右侧的风险点提示了两个最容易出问题的环节——切换标志的原子性与回滚触发条件,它们必须在 Bootloader 设计阶段就明确。

五、设计指标落地示例

以下是一份可直接用于项目评审的双银行OTA设计指标表(示例假设,需按实际芯片与链路校准):

指标项目标值(示例)验证方式
单银行容量≥ 2 MB查阅芯片数据手册
固件镜像大小≤ 1.5 MB编译产物统计
切换标志原子性双副本 + CRC16掉电注入测试
整镜像校验CRC32 + ECDSA 验签篡改镜像应拒绝切换
回滚阈值连续 3 次启动失败故障注入测试
掉电恢复3 个掉电点 × 100 次全部可恢复掉电注入测试
升级总时间≤ 60 s链路实测
防降级版本号单调递增旧版本镜像应被拒绝
不要把“双银行”理解为“自动安全”。如果切换标志没有原子保护、回滚条件没有实现、验签在切换之后才做,双银行同样会变砖。硬件提供的是能力,可靠性来自 Bootloader 的设计约束。