3. 启动流程总览

理解 TRAVEO 的启动过程,关键不是记住“先跑 BootROM 再跑 Flash Boot”这种口号,而是建立一条从复位向量到用户 main() 的完整链路视图:谁先执行、谁校验谁、谁把控制权交给谁、每一步失败会落到哪里。TRAVEO T2G 系列(以 CYT4BF 这类双核 Cortex-M7 + HSM 的器件为例)的启动是一条多阶段、带安全校验的链式过程,任何一环的配置或校验结果都会改变后续走向。

一、复位后的第一段代码:BootROM

上电复位(POR)或外部复位释放后,Cortex-M7 内核从固定的复位向量取指,但 TRAVEO 的复位向量并不直接指向用户 Flash,而是先进入芯片内部固化的 BootROM。BootROM 是掩膜在芯片里的只读代码,出厂即固定,用户无法修改,它承担三件事:

  • 基础初始化:建立最小可运行环境,包括时钟源选择(通常先用内部 IMO 高速时钟起振)、必要的外设复位释放、SRAM 的基本可用性检查。
  • 启动模式判定:读取 SFlash(Supervisory Flash)中的启动配置区(如 TOC2、启动模式字),判断本次是正常 Flash Boot、还是进入调试/DFU/系统调用等特殊模式。
  • 安全策略入口:根据 eFuse 与 SFlash 中的生命周期(Lifecycle)状态、安全启动使能位,决定是否要求后续镜像必须通过签名校验。

BootROM 阶段通常只有几百微秒到几毫秒量级,但它决定了整条链路的“规则”。如果 SFlash 中的启动配置被擦除或损坏,BootROM 会回退到默认行为,常见表现是进入 DFU 或直接停在 BootROM 等待,而不是跳转到应用。

二、Flash Boot:从 SFlash 到用户镜像

BootROM 判定为正常启动后,会把控制权交给 Flash Boot 逻辑。这一阶段的核心是“找到并验证用户镜像”。TRAVEO 的用户程序通常由两部分组成:位于 Flash 起始区域的 Bootloader / Flash Boot 代码,以及紧随其后的 应用镜像(App)。Flash Boot 需要完成:

  1. 读取 SFlash 中的 TOC(Table of Contents)条目,获取应用镜像的起始地址、长度、入口地址和校验信息。
  2. 若安全启动使能,则对应用镜像做完整性校验(CRC)与真实性校验(基于 ECDSA 的签名验证,公钥哈希存放在 SFlash 或 eFuse 中)。
  3. 校验通过后,配置应用所需的向量表偏移(VTOR),跳转到应用复位处理函数。

这里有一个工程上极易踩坑的点:向量表偏移必须与链接脚本、TOC 中记录的地址三者一致。如果应用被链接到 0x1000_0000 之后的偏移,但 TOC 仍指向默认地址,跳转后取到的就是错误的中断向量,表现为“能跑几条指令然后 HardFault”。

三、HSM 启动与双核协同

在带 HSM(Hardware Security Module)的 TRAVEO 器件中,HSM 是一个独立的 Cortex-M0+ 安全核,拥有自己的 ROM、RAM 和 Flash 区域。上电后 HSM 与主核(CM7)的启动是并行但有序的:HSM 先完成自身固件加载与自检,随后主核的 BootROM 在需要安全服务(如签名验证、密钥派生)时通过 IPC 与 HSM 通信。也就是说,安全启动的“验签”动作往往由 HSM 执行或协助,主核等待其结果。

这带来一个直接后果:HSM 固件缺失或版本不匹配时,安全启动会失败,主核可能停在 BootROM 或进入错误处理。因此刷写时 HSM 固件(HSM 的 SFlash 配置与 HSM 代码区)必须与主核镜像配套更新,不能只刷 App。

四、安全启动策略选择

TRAVEO 的安全启动不是“开/关”二值,而是按生命周期和校验强度分层。常见策略可归纳为下表(参数为示例性说明,具体以器件 TRM 与 SFlash 映射为准):

策略校验内容典型生命周期启动时间影响
无安全启动仅 CRC 或不做校验Development最短
CRC 完整性镜像 CRC32Development / Production+数 ms
签名验证ECDSA P-256 验签 + CRCProduction / Secure+数十 ms
安全 + 加密镜像验签 + 解密后校验Secure最高

策略一旦在 Secure 生命周期下被 eFuse 锁定,就无法回退到无校验模式。因此量产前必须在 Development 阶段把启动策略、密钥哈希、TOC 布局全部验证完毕,再烧写生命周期位。

五、启动时间预算

整车 ECU 对启动时间有硬性要求(例如 CAN 唤醒后 100 ms 内必须能响应报文)。TRAVEO 的启动时间可粗略拆分为:BootROM 固定开销 + Flash Boot 校验开销 + HSM 通信开销 + 应用自身初始化。其中签名验证是最大变量:以 ECDSA P-256 验签为例,在 80 MHz 下软件实现约需 20~40 ms,若由 HSM 硬件加速可压缩到几毫秒。工程上常用做法是:

  • 把不依赖安全校验的外设初始化(如 CAN 控制器基础配置)提前到 Flash Boot 阶段完成,让通信“先活起来”。
  • 对时间敏感的中断服务在应用早期就绪,避免等全部初始化完成才开放接收。
  • 用 GPIO 翻转或 DWT 计数器在启动各阶段打点,实测而非估算。
建议在 Flash Boot 中用 GPIO 在 BootROM 退出、验签开始、验签结束、跳转 App 四个点各翻转一次电平,用示波器即可得到真实的分段耗时,比读文档估算可靠得多。

六、完整链路一图看清

下图把上述阶段串成一条从复位到应用跳转的链路,并标出各阶段的关键判定与失败分支。注意图中“校验失败”并非终点,而是可能回落到 DFU 或错误处理,具体取决于启动配置。

TRAVEO 上电复位 → 应用跳转 完整启动链路 ① 上电复位 POR 复位向量 → BootROM IMO 时钟起振 ② BootROM 读 SFlash 启动配置 判定启动模式 / 生命周期 ③ Flash Boot 解析 TOC 条目 定位 App 镜像 ④ 安全校验 CRC / ECDSA 验签 HSM 协助 HSM 安全核 固件加载 / 自检 / 密钥服务 IPC 协作 ⑤ 设置 VTOR 向量表偏移 = App 基址 配置栈指针 MSP ⑥ 跳转 App 进入 Reset_Handler → main() 校验通过 校验失败分支 回退 DFU / 错误处理 不跳转 App 失败 启动时间预算(示例量级) BootROM Flash Boot HSM 验签(最大变量) App 初始化 ← 用 GPIO 打点实测各段

把这张链路图记牢,后续排查启动问题时就能快速定位:是 BootROM 没读到配置,还是 Flash Boot 找不到 TOC,还是验签失败,还是 VTOR 设错。每一段的失败现象和日志特征都不同,而它们的分界点,正是上面这条链路。