3. AURIX ECU软件架构与AUTOSAR基础

在AURIX TC3xx这类多核安全MCU上做闭环HIL验证,第一步不是接板子、也不是写测试脚本,而是先弄清楚“被测软件到底长什么样、哪些点能被外部观测、哪些点能被外部激励”。AUTOSAR Classic Platform给出的分层架构,恰好为HIL提供了一套天然的“可观测接口地图”。本节围绕BSW、RTE、SWC、MCAL四层,说明它们各自的职责边界,以及每一层在闭环HIL中对应的观测/激励入口。

一、四层架构的职责边界

从下往上看,MCAL(Microcontroller Abstraction Layer)直接操作AURIX的寄存器与外设:ADC、PWM/GTM、CAN、SPI、DIO、ICU等驱动都在这一层。它把“寄存器位”翻译成“信号值”,是HIL中最贴近物理世界的一层。往上是ECU抽象层与BSW服务层,包括Com、PduR、CanIf、CanTp、Dcm、Dem、NvM、EcuM、BswM、Os等模块,负责通信栈、诊断、故障管理、模式管理与任务调度。再往上是RTE(Runtime Environment),它把SWC之间的端口连接、运行实体触发、数据读写统一成标准接口。最上层是SWC(Software Component),承载应用逻辑,例如电机控制、扭矩仲裁、状态机等。

关键认识是:HIL并不直接“看”SWC内部变量,而是通过RTE端口、BSW服务接口或MCAL信号接口去观测。这三类接口的可观测性、实时性和侵入性各不相同,选错接口会导致测试结论失真。

SWC 应用软件组件 扭矩仲裁 / 状态机 / 控制算法 · 运行实体 Runnable RTE 运行时环境 端口 Port / 接口 Interface · Rte_Read / Rte_Write / Rte_Call BSW 基础软件 Com / PduR / CanIf / CanTp · Dcm / Dem · NvM / EcuM / BswM / Os 通信栈 · 诊断服务 · 故障事件 · 模式与调度 MCAL 微控制器抽象层 Adc / Pwm(GTM) / Can / Spi / Dio / Icu / Fls 寄存器 ↔ 信号值 的翻译层 闭环 HIL 可观测 / 可激励接口 RTE 端口级观测 Rte_Read 数据元素 · 运行实体触发 侵入性低 · 需 XCP/调试口或桩函数 BSW 服务级观测 CAN 报文 · UDS 诊断响应 · DTC 状态 总线级 · 无需改代码 · 实时性中等 MCAL 信号级观测 ADC 原始值 · PWM 占空比 · DIO 电平 物理层 · 最贴近传感器/执行器 故障注入接口 Dem_SetEventStatus 触发 DTC 总线报文丢失 / 信号超范围 ADC 开路短路模拟 闭环路径:HIL 激励 → MCAL 信号 → BSW 通信/诊断 → RTE 端口 → SWC 逻辑 → 反向输出 → HIL 采集比对 观测点越靠上(RTE/SWC),越接近功能语义;越靠下(MCAL),越接近物理真实性与实时性

二、MCAL:物理信号与寄存器之间的翻译层

在HIL中,MCAL层最典型的可观测接口是ADC与PWM。以AURIX TC377的ADC为例,若配置为12位、参考电压5V,则ADC原始码值raw与电压的关系为:V = raw / 4095 × 5.0。假设HIL模拟一个节气门位置传感器输出2.5V,理论上raw ≈ 2048。若实测raw在2000~2100之间波动,说明采样链路正常;若恒为0或4095,则可能是开路或短路,这正是HIL故障注入要覆盖的场景。

PWM侧则相反,是ECU输出给执行器的激励。例如GTM配置为1kHz、占空比可调,HIL通过采集PWM占空比来判断控制算法输出是否合理。这里要注意:MCAL接口的观测值带有量化误差和采样抖动,判断阈值不能设得过紧,否则会把正常噪声误判为故障。

三、BSW:总线与诊断的可观测窗口

BSW层为HIL提供了最“干净”的观测入口——CAN报文和UDS诊断响应。Com模块按周期发送PDU,HIL的CAN卡可以直接抓取报文并解析信号。例如一条0x123的报文,DLC=8,其中Byte0~1为车速(分辨率0.01km/h,偏移0),若读到0x1388即5000,则车速为50.00km/h。这种观测不需要修改ECU代码,也不引入额外运行时开销,是HIL回归测试的主力手段。

诊断侧,Dcm模块响应UDS服务。HIL可以发送0x22(ReadDataByIdentifier)读取DID,或发送0x19(ReadDTCInformation)读取故障码。Dem模块则负责故障事件的状态管理,其状态字节包含testFailed、confirmedDTC、pendingDTC等位。HIL判断一个故障是否被正确记录,看的正是这些位的变化,而不是只看DTC编号。

四、RTE与SWC:功能语义层的观测

RTE是SWC与BSW之间的“合同层”。SWC通过Rte_Read读取输入端口数据,通过Rte_Write写出输出端口数据,通过Rte_Call调用服务端口。在HIL中,如果需要在算法中间变量上做观测,最规范的做法是在RTE端口上挂观测桩,而不是直接读SWC内部全局变量。原因在于:端口是AUTOSAR契约的一部分,接口稳定;而内部变量随实现变化,观测代码容易失效。

不过RTE端口观测通常需要XCP标定通道或调试接口支持,实时性不如CAN报文。因此工程上常见的组合是:用CAN报文做高频功能观测,用XCP/RTE端口做低频深度诊断。两者时间戳要对齐,否则闭环比对会出现相位差。

五、闭环HIL中的接口选择原则

选择观测接口时,可以按三个维度权衡:实时性、侵入性、语义层级。MCAL信号实时性最好但语义最底层;CAN报文侵入性最低但只能看到已发送的信号;RTE端口语义最清晰但需要额外调试通道。一个可执行的判断顺序是:先看该信号是否已在CAN矩阵中定义,若是则优先用总线观测;若否,再看是否可通过DID读取;最后才考虑RTE/XCP桩。

在HIL测试用例设计阶段,建议为每个待观测信号明确标注“观测层”和“采样周期”。例如:电机转速用CAN 10ms周期观测,ADC原始值用MCAL 1ms采样,DTC状态用UDS 100ms轮询。三者时间基准不同,比对时必须做时间对齐,否则会误判为响应超时。

六、一个可参考的观测接口配置示例

下表给出某AURIX TC377电机控制器HIL台架中,典型信号的观测接口配置。参数为教学示例,实际项目需按CAN矩阵和诊断规范调整。

信号/对象观测层接口方式周期/触发判断依据
电机转速BSWCAN 0x1A0 Byte0-110ms与HIL模型转速偏差 < 2%
相电流MCALADC raw / 4095×5V1ms峰值在量程内,无削顶
PWM占空比MCALGTM 输出捕获1ms与扭矩请求单调对应
过温DTCBSWUDS 0x19 02100msconfirmedDTC 置位
扭矩请求内部值RTEXCP 端口观测10ms与CAN输出一致

这张表的价值在于:它把“测什么、从哪测、多久测一次、怎么算通过”四件事绑定在一起。HIL工程中最常见的返工,往往不是测试脚本写错,而是观测层选错——比如用CAN报文去验证一个1ms级的电流环响应,采样率根本不够,结论自然不可信。