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信号接口去观测。这三类接口的可观测性、实时性和侵入性各不相同,选错接口会导致测试结论失真。
二、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桩。
六、一个可参考的观测接口配置示例
下表给出某AURIX TC377电机控制器HIL台架中,典型信号的观测接口配置。参数为教学示例,实际项目需按CAN矩阵和诊断规范调整。
| 信号/对象 | 观测层 | 接口方式 | 周期/触发 | 判断依据 |
|---|---|---|---|---|
| 电机转速 | BSW | CAN 0x1A0 Byte0-1 | 10ms | 与HIL模型转速偏差 < 2% |
| 相电流 | MCAL | ADC raw / 4095×5V | 1ms | 峰值在量程内,无削顶 |
| PWM占空比 | MCAL | GTM 输出捕获 | 1ms | 与扭矩请求单调对应 |
| 过温DTC | BSW | UDS 0x19 02 | 100ms | confirmedDTC 置位 |
| 扭矩请求内部值 | RTE | XCP 端口观测 | 10ms | 与CAN输出一致 |
这张表的价值在于:它把“测什么、从哪测、多久测一次、怎么算通过”四件事绑定在一起。HIL工程中最常见的返工,往往不是测试脚本写错,而是观测层选错——比如用CAN报文去验证一个1ms级的电流环响应,采样率根本不够,结论自然不可信。