3. 错误日志的数据来源

星载计算机的错误日志不是单一来源的“故障记录本”,而是多个硬件监测通道在同一时间轴上汇聚而成的证据链。要读懂一条日志、判断一次异常是否真实、是否可恢复,首先必须清楚每一类数据由谁产生、在什么条件下产生、携带哪些字段,以及它们之间的因果关系。本节围绕五类核心来源展开:处理器异常、总线错误、存储器EDAC、看门狗、电源与温度遥测。

一、处理器异常:软件可见的第一现场

处理器异常由CPU内部的中断/异常机制触发,是软件能够直接捕获的第一手信息。在星载常用的SPARC或ARM架构中,典型异常包括:数据访问异常(Data Access Exception)、指令访问异常、对齐错误、非法指令、陷阱指令(如软件陷阱TA)、除零以及系统调用异常。每条异常记录通常包含异常类型、异常向量号、程序计数器PC、处理器状态寄存器PSR、故障地址(如DFAR)和任务上下文标识。

处理器异常的价值在于“定位到指令级”。例如,当PC指向某段遥测采集代码、DFAR指向一个未映射的地址时,可以初步判断是野指针访问还是MMU映射表被破坏。但异常本身只说明“CPU执行流被打断”,并不直接说明根因,因此必须与总线错误、EDAC记录做时间关联。工程上通常要求异常日志记录时间戳精度优于1ms,以便与总线错误对齐。

二、总线错误:互连层的故障证据

星载计算机内部普遍采用SpaceWire、1553B、AXI/AHB或自定义背板总线。总线错误由总线控制器或桥片的错误响应通道产生,常见类型包括:奇偶校验错误、CRC校验失败、超时无响应、协议违例、地址越界和从设备错误响应。以1553B为例,当某终端未在约定时间内返回状态字,总线控制器会记录“无响应超时”,并附带命令字、终端地址和重试次数。

总线错误日志的关键字段是:主设备ID、从设备ID、访问地址、访问类型(读/写)、错误码和重试结果。它回答的是“谁访问谁失败了”。如果同一从设备在短时间内反复出现超时,往往指向该设备供电异常或接口芯片失效;如果错误地址随机分布,则更可能是总线端接或时钟完整性问题。

三、存储器EDAC:可纠正与不可纠正的分界

EDAC(Error Detection and Correction)是星载存储器抗单粒子翻转的核心手段。以常见的SECDED(单纠错双检错)为例,每64位数据配8位校验位。EDAC控制器在每次读写时计算校验子(syndrome),并产生两类记录:

  • 可纠正错误(CE):单比特翻转,EDAC自动纠正,日志记录错误地址、位翻转位置和累计计数。
  • 不可纠正错误(UE):双比特及以上翻转,EDAC无法纠正,通常触发中断或复位。

EDAC日志的核心用途是趋势判断。单次CE属于正常空间辐射环境下的预期事件;但若同一地址反复出现CE,说明该存储单元存在硬损伤,应将该页标记为坏块并迁移数据。工程上常设置阈值:某地址在1小时内CE超过3次,或全器件CE率超过每小时10次,则上报健康告警。UE则必须立即记录并触发安全模式。

四、看门狗:系统级存活的最后防线

看门狗分为硬件看门狗和软件看门狗。硬件看门狗是一个独立计数器,软件必须在超时前“喂狗”;若未喂狗,看门狗输出复位信号。看门狗日志记录的内容包括:复位原因寄存器值、复位前最后喂狗时间、复位计数和复位类型(上电复位、看门狗复位、指令复位)。

看门狗日志本身不指出“为什么没喂狗”,但它是最强的系统级异常信号。当看门狗复位与处理器异常、EDAC UE同时出现时,通常说明系统已进入不可恢复状态。工程实践中,看门狗复位后应保存复位前的关键上下文(如任务栈快照、最后执行的PC),否则只能看到“复位了”,无法定位原因。

五、电源与温度遥测:慢变量的健康基线

电源与温度遥测属于低频、慢变数据,通常由ADC采集后周期上报。电源监测包括各路电压(如3.3V、1.8V、1.2V核心电压)和电流;温度监测包括CPU结温、存储器温度、电源模块温度和板卡环境温度。这些数据不直接产生“错误”,但它们是判断其他错误是否由环境引起的关键背景。

例如,当EDAC CE率突然升高时,若同时观察到存储器温度从25℃升至70℃,则更可能是温度加速了器件翻转,而非单纯的辐射环境变化。又如,总线超时若伴随1.2V核心电压跌落至1.1V,则根因在电源而非总线协议。因此,电源与温度遥测必须与上述四类错误日志共享同一时间基准,才能形成可解释的因果链。

星载计算机错误日志五类数据来源与汇聚关系 处理器异常 异常类型 / 向量号 PC / PSR / DFAR 任务上下文 总线错误 主/从设备ID 地址 / 读写类型 错误码 / 重试次数 存储器EDAC CE / UE 类型 错误地址 / 位位置 累计计数 看门狗 复位原因寄存器 最后喂狗时间 复位计数 / 类型 电源与温度遥测 各路电压 / 电流 CPU/存储/电源温度 周期采样值 统一时间戳对齐(精度优于 1ms) 将五类来源按时间轴排序,建立“异常—总线—EDAC—复位—环境”因果链 错误日志缓冲区(环形队列) 按时间戳写入 · 掉电保持 · 支持地面回传 健康监测与故障诊断 CE率趋势 · 总线超时统计 · 复位归因 · 温度-错误相关性 输出:正常 / 告警 / 安全模式 / 复位恢复 典型因果关联示例 ① 温度↑ + CE率↑ → 热加速翻转 ② 电压跌落 + 总线超时 → 电源根因 ③ 异常PC + UE + 看门狗 → 不可恢复复位

六、五类来源的协同判读方法

单独看任何一类日志都容易误判。正确的做法是:以时间戳为轴,把五类记录排成一条事件序列,再按“环境→硬件→软件”的顺序逐层排除。下面给出一个可操作的判读顺序。

  1. 先看电源与温度:确认错误发生前后电压是否在容差内、温度是否超过器件降额曲线。若电源或温度异常,优先按环境问题处理。
  2. 再看EDAC:区分CE与UE。CE集中出现在同一地址,按硬损伤处理;CE分散且与温度相关,按环境加速处理;UE则直接进入安全模式评估。
  3. 再看总线错误:确认是单设备反复超时还是多设备随机错误。前者查设备供电与接口,后者查总线端接与时钟。
  4. 再看处理器异常:用PC和DFAR定位到具体指令和地址,判断是软件缺陷还是硬件返回了错误数据。
  5. 最后看看门狗:若看门狗复位发生在上述异常之后,说明系统已无法自恢复;若看门狗复位单独出现,则重点检查任务调度是否被高优先级中断长期占用。
在实际工程中,建议为每类日志定义最小字段集,并统一时间戳格式。例如:处理器异常至少记录“时间戳、异常类型、PC、DFAR”;EDAC至少记录“时间戳、CE/UE、地址、位位置”;看门狗至少记录“时间戳、复位原因、复位计数”。字段不全会导致事后无法关联,日志价值大幅下降。

七、一个可参考的日志字段示例

下面给出一段简化的错误日志记录格式示例,用于说明五类来源如何在同一结构中表达。字段为示例设计,实际项目应按星载软件配置项要求裁剪。

[ERR_LOG]
timestamp=2025-03-12T08:14:22.317Z
source=EDAC
type=CE
addr=0x4001A2C0
bit=37
count_total=14
temp_mem=68.2
voltage_core=1.198
---
timestamp=2025-03-12T08:14:22.319Z
source=BUS
bus=1553B
master=BC
slave=RT05
cmd=0x0821
error=TIMEOUT
retry=2
---
timestamp=2025-03-12T08:14:22.321Z
source=CPU
exception=DATA_ACCESS
pc=0x0004F2A8
dfar=0x4001A2C0
task=TM_ACQ

这段示例中,三条记录时间戳相差仅4ms,EDAC的CE地址与处理器异常的DFAR一致,说明CPU访问该地址时触发了异常,而该地址此前已发生单比特翻转。若此时温度偏高、核心电压略低,则可形成“温度/电压异常→存储单元翻转→EDAC纠正→CPU访问异常”的完整链条。这正是五类数据来源协同判读的意义:让日志从“记录发生了什么”升级为“解释为什么发生”。

注意:EDAC的CE通常已被硬件纠正,CPU不应因此产生数据访问异常。若出现上述组合,需检查EDAC纠正是否真正写回、或该地址是否同时存在不可纠正的映射问题。示例仅用于说明关联方法,不代表真实飞行数据。

综上,处理器异常、总线错误、存储器EDAC、看门狗、电源与温度遥测分别覆盖了指令级、互连级、存储级、系统级和环境级五个层次。只有把它们放在同一时间基准下联合分析,才能从零散的错误记录中还原出可信的故障因果链,为健康监测和自主恢复提供依据。