4. TRAVEO存储架构与网关固件布局
TRAVEO系列(以CYT4BF等典型车规MCU为例)内部集成了多种物理特性差异明显的存储资源:用于存放代码与常量的Flash、用于存放运行时变量与栈的SRAM,以及部分型号配备的RRAM(阻变存储器)。网关固件布局的核心任务,就是把这些物理资源划分成职责清晰、边界明确、可被Bootloader与OTA流程安全操作的分区,并保证每个分区在ECC保护下具备可验证的数据完整性。
一、三类存储介质的定位差异
Flash是网关固件的主体,容量通常在数MB量级,按扇区(Sector)擦除、按字编程,擦写寿命有限(典型约10万次),因此不适合高频写入。SRAM容量较小(数百KB),读写无擦除限制,但掉电即失,用于栈、堆、运行时缓冲和DMA描述符。RRAM是TRAVEO较有特色的非易失存储,支持按字节写入、写入延迟低、耐久性远高于Flash,适合承载需要频繁更新的标定数据、配置参数和OTA状态标志。
理解这三者的差异,是分区规划的前提:代码和只读常量放Flash;频繁变更的小块数据放RRAM;临时计算与通信缓冲放SRAM。把高频写入的数据误放在Flash,会迅速耗尽扇区寿命;把需要掉电保持的数据放在SRAM,则会在断电后丢失。
二、Flash分区与Bootloader/OTA区规划
一个可落地的网关Flash布局通常包含以下区域:Bootloader区、Bootloader备份区、应用区A、应用区B(或应用区+升级暂存区)、标定/配置区、以及可选的共享数据区。双应用区(A/B)方案支持A/B面切换,OTA时把新固件写入非活动区,校验通过后更新启动标志,实现失败可回滚。
以示例参数说明:假设Flash总容量4MB,可规划为Bootloader 128KB、Bootloader备份128KB、应用区A 1.5MB、应用区B 1.5MB、标定与配置区256KB、共享数据区64KB,剩余作为预留。这些数值属于教学示例,实际应以芯片手册的扇区边界和链接脚本为准。分区边界必须与Flash扇区对齐,否则擦除一个分区会误伤相邻分区。
Bootloader的职责是:上电后读取启动标志,决定跳转到A区还是B区;在OTA过程中接收新固件、写入非活动区、计算校验值、更新标志。Bootloader自身应尽量小且稳定,并保留一份备份,防止升级过程中断电导致Bootloader损坏而无法启动。
三、标定数据与配置参数的存储策略
标定数据和配置参数的特点是:体积小、更新频繁、必须掉电保持、且更新时不能影响正在运行的固件。把它们放在Flash的标定区会带来两个问题:一是擦除粒度大,改一个参数要擦整个扇区;二是擦写寿命消耗快。因此更合理的做法是放入RRAM,或采用“Flash主副本+RRAM增量记录”的方式。
一个实用的做法是双副本加版本号:在RRAM中保存两份参数块,每份包含参数内容、CRC32校验值和递增版本号。写入时先写非活动副本,校验通过后更新活动指针。这样即使写入过程中断电,也总有一份完整副本可用。读取时比较两份的版本号,取版本高且CRC正确的一份。
typedef struct {
uint32_t version; // 递增版本号
uint32_t length; // 参数长度
uint8_t payload[252]; // 参数内容
uint32_t crc32; // 覆盖version/length/payload
} param_block_t;
// 读取:选版本高且CRC正确的副本
// 写入:写非活动副本 → 校验 → 更新活动指针
四、ECC与数据完整性
TRAVEO的Flash和RRAM通常带有硬件ECC。ECC在写入时根据数据生成校验位,读取时重新计算并比对:单比特错误可自动纠正(SEC),双比特错误会触发不可纠正错误(DED)中断或总线错误。对网关而言,这意味着代码区和参数区在正常读取时已获得透明保护,但软件仍需处理DED事件——例如记录故障码、切换到备份区、或触发安全状态。
除硬件ECC外,固件层面还应叠加软件校验:对应用区整体计算CRC32,与存储在头部的期望值比对;对参数块计算CRC32;对OTA下载的固件分块校验后再整体校验。硬件ECC防的是存储位翻转,软件CRC防的是传输错误、写入不完整和版本错配,两者互补而非替代。
五、布局落地时的检查要点
- 分区边界是否与Flash扇区对齐,擦除操作是否只作用于目标分区。
- Bootloader是否有备份,升级中断电后是否仍能启动。
- 启动标志是否存放在RRAM或独立小扇区,是否带CRC保护。
- 应用区头部是否包含长度、版本、CRC32,Bootloader跳转前是否校验。
- 参数双副本的活动指针更新是否具有原子性,断电后是否可恢复。
- DED错误是否有中断处理路径,是否记录并可上报。
把上述分区、介质选择、双副本参数管理和ECC/CRC双层校验组合起来,网关固件就具备了可升级、可回滚、可校验的存储基础。后续的OTA流程、故障恢复和安全启动,都建立在这套布局之上。