4. 参数存储介质与文件系统
星务软件的在轨参数管理,最终要落到具体的物理存储介质上。参数能否在掉电后保持、能否在轨反复改写、写入一次需要多长时间、能承受多少次擦写,这些问题的答案都由存储介质决定。本节从介质特性出发,讨论文件系统选型,并给出参数区、备份区与日志区的布局设计方法。
一、四类非易失存储介质的特性对比
星载参数存储常用的非易失介质主要有四类:EEPROM、NOR/NAND Flash、MRAM 和 FRAM。它们的写入机理完全不同,导致在写入粒度、写入寿命、写入功耗和写入时间上差异显著。
EEPROM 基于浮栅隧穿效应写入,支持字节级随机改写,不需要先擦除整块。缺点是写入速度慢(典型字节写入时间在毫秒量级),擦写寿命约 105~106 次,单元面积大、容量小。它适合存放写入频次极低但要求字节可改的关键参数,例如出厂标定系数、整星标识。
Flash 同样基于浮栅,但按页写入、按块擦除,写入前必须先擦除整块。NOR Flash 支持随机读取、可执行代码,适合存放程序与少量参数;NAND Flash 容量大、单位成本低,但存在坏块和位翻转,需要 ECC 与坏块管理。Flash 擦写寿命通常为 104~105 次,且擦除时间长(毫秒到秒量级),不适合高频写入。
MRAM 利用磁隧道结的磁化方向存储数据,写入速度快(纳秒量级)、几乎无限次擦写(1014 次以上)、掉电保持且抗辐射能力较好。缺点是容量偏小、成本高,写入时存在翻转电流,需关注功耗。
FRAM 基于铁电材料的极化方向存储,写入速度快(与 MRAM 同量级)、擦写寿命极高(1012 次以上)、写入功耗极低,且支持字节级改写。缺点是容量小、单比特成本高,高温下保持特性需评估。
| 介质 | 写入粒度 | 擦写寿命 | 写入速度 | 典型用途 |
|---|---|---|---|---|
| EEPROM | 字节 | 105~106 | 慢(ms/字节) | 出厂标定、低频关键参数 |
| NOR Flash | 页写/块擦 | 104~105 | 中(ms/页) | 程序、中低频参数 |
| NAND Flash | 页写/块擦 | 104~105 | 中(ms/页) | 大容量日志、图像 |
| MRAM | 字节/字 | >1014 | 快(ns) | 高频参数、状态快照 |
| FRAM | 字节 | >1012 | 快(ns) | 高频计数、掉电保护 |
选型的基本判断是:先看写入频次,再看容量需求,最后看成本与抗辐射约束。写入频次低于每天一次的参数,用 EEPROM 或 NOR Flash 即可;写入频次达到每秒甚至每毫秒的参数(如姿态控制积分项、累计计数),必须用 MRAM 或 FRAM,否则介质寿命会在轨耗尽。
二、文件系统选型
星载参数存储不一定需要完整文件系统。是否引入文件系统,取决于参数的组织方式和访问模式。
如果参数数量少、结构固定、按固定地址访问,直接采用裸地址分区管理最简单可靠:把存储空间划分为若干固定偏移的区域,每个区域对应一组参数,读写时直接计算地址。这种方式没有元数据开销,掉电安全性容易保证,适合参数表稳定的型号。
如果参数需要按名称检索、动态增删、或需要记录版本,则应引入轻量文件系统。常见选择有:LittleFS,掉电安全、支持磨损均衡,适合 NOR/NAND Flash;SPIFFS,结构简单但磨损均衡较弱;YAFFS/JFFS2,面向 NAND,带坏块管理。对于 MRAM/FRAM 这类字节可改、寿命极高的介质,文件系统反而可能引入不必要的元数据写入,通常直接用带校验的键值结构更合适。
三、参数区、备份区与日志区的布局设计
无论是否使用文件系统,参数存储空间都应划分为三个逻辑区域:参数区存放当前生效的参数值;备份区存放上一版或出厂默认参数,用于回滚;日志区记录参数变更历史,用于在轨追溯与故障分析。
布局设计要解决三个问题:一是掉电时如何保证参数区不出现半写状态;二是参数区损坏时如何从备份区恢复;三是日志区如何在不耗尽介质寿命的前提下长期记录。
一种经过验证的做法是双副本加校验:参数区分为 A、B 两个副本,每个副本包含参数数据、版本号和 CRC。写入时先写非活动副本,校验通过后再更新活动副本指针。这样任意时刻至少有一个副本是完整的,掉电不会破坏全部数据。备份区存放出厂默认值,只在参数区与备份区都校验失败时使用。日志区采用环形缓冲,每条记录包含时间戳、参数标识、旧值、新值和校验,写满后覆盖最旧记录。
四、布局设计中的关键参数与示例
下面给出一组可用于教学参考的示例参数,实际型号需按存储容量和参数规模调整。
参数区 A:0x00000–0x2FFFF,128 KB,含 512 条参数,每条 256 B
参数区 B:0x30000–0x5FFFF,128 KB,与 A 同构
备份区: 0x60000–0x7FFFF,128 KB,出厂默认值 + 版本号
日志区: 0x80000–0xFFFFF,512 KB,环形,每条记录 64 B,可存 8192 条
参数记录格式:
[参数ID:4B][版本:2B][长度:2B][数据:240B][CRC32:4B][保留:4B]
日志记录格式:
[时间戳:4B][参数ID:4B][旧值:8B][新值:8B][操作码:1B][CRC16:2B][保留:37B]
按上述布局,参数区每条记录 256 B,512 条共 128 KB,正好占满一个副本。日志区 512 KB、每条 64 B,可存 8192 条;若每天产生 20 条变更记录,可覆盖约 400 天,之后环形覆盖最旧记录。这个容量与在轨寿命的匹配关系,是布局设计时必须核算的。
五、介质与分区的匹配关系
把介质特性和分区用途对应起来,可以得到一条清晰的匹配原则:高频写入的日志区优先用 FRAM 或 MRAM,因为它们支持字节改写、寿命极高,不需要擦除,环形覆盖时不会因擦除次数受限;参数区可用 NOR Flash 或 EEPROM,写入频次低,双副本加校验即可保证掉电安全;备份区写入次数最少,可用 EEPROM 或 Flash 的独立块,甚至可与参数区共用介质但划分独立擦除块。
如果整星只配置一种介质,例如全部使用 NOR Flash,则必须通过磨损均衡和写入频次限制来保护介质:日志区采用追加写而非原地改写,参数区采用双副本轮换,避免同一擦除块被反复擦写。若配置了 FRAM,则把累计计数、积分项、掉电快照等高频参数放在 FRAM,把低频配置参数放在 Flash,形成分层存储结构。
最终判断布局是否合理,可以看三个指标:掉电后参数是否可恢复、介质寿命是否覆盖任务周期、日志是否足以追溯异常。这三点在轨验证时可通过注入掉电、模拟擦写次数、回读日志来确认。