2、AUTOSAR基础概念:AUTOSAR分层架构(应用层、RTE、基础软件层)、模块划分、通信与诊断基础
AUTOSAR(AUTomotive Open System ARchitecture)是由全球主流车厂、Tier1供应商与半导体公司共同制定的汽车电子软件开放标准架构。自2003年成立以来,AUTOSAR已从Classic Platform(经典平台)演进至Adaptive Platform(自适应平台),成为智能网联汽车软件开发的基石。对于测试工程师而言,理解AUTOSAR的分层架构不仅是编写测试用例的前提,更是定位缺陷、分析通信异常、设计诊断策略的核心能力。本章将围绕AUTOSAR Classic Platform的分层架构、模块划分、通信机制与诊断基础展开系统讲解,帮助测试人员建立从“模块认知”到“测试设计”的完整知识链路。
2.1 核心原理:AUTOSAR分层架构的设计哲学
AUTOSAR分层架构的核心目标是实现“应用与硬件解耦、软件组件可复用、ECU间标准化通信”。整个架构从下至上分为微控制器层、基础软件层(BSW)、运行时环境(RTE)和应用层(Application Layer)。每一层都有明确的职责边界,层与层之间通过标准化接口交互,从而使得上层应用不感知底层硬件细节,底层硬件更换时上层软件无需修改。
应用层由若干个软件组件(SWC, Software Component)构成,每个SWC封装了特定的功能逻辑,例如发动机控制、车窗升降、车身稳定控制等。SWC之间不直接调用函数,而是通过端口(Port)和RTE进行数据交换。RTE作为虚拟总线(VFB, Virtual Functional Bus)的具体实现,负责管理SWC之间的通信、事件触发和模式切换。基础软件层则进一步细分为服务层、ECU抽象层和微控制器抽象层(MCAL),分别提供系统级服务、硬件无关的抽象接口和硬件相关的驱动实现。
这种分层架构带来的直接收益是:可移植性——同一份应用代码可以运行在不同厂商的MCU上;可复用性——标准化的BSW模块可以被多个项目复用;可扩展性——新增功能只需增加SWC,无需改动底层。对于测试工程师而言,理解分层边界意味着测试用例的设计必须关注“接口契约”而非“内部实现”。例如,测试应用层SWC时,应通过RTE接口注入数据,而不是直接操作寄存器。
2.2 模块划分:从SWC到MCAL的职责边界
AUTOSAR的模块划分遵循“高内聚、低耦合”原则,每个模块都有明确的ID(如Com、Dcm、Dem、NvM等)和标准化的API接口。下表列出了测试工程师最常打交道的核心模块及其职责:
| 模块名称 | 所属层级 | 核心职责 | 测试关注点 |
|---|---|---|---|
| SWC(软件组件) | 应用层 | 实现具体功能逻辑(如空调控制、巡航控制) | 端口数据映射、RTE事件触发、内部状态机 |
| RTE | 中间层 | SWC间通信路由、事件调度、模式管理 | 数据一致性、超时处理、跨ECU通信映射 |
| COM | 服务层 | 信号级通信管理(信号打包/解包、信号超时监控) | 信号更新周期、Endianness、符号扩展、超时计数 |
| DCM | 服务层 | 诊断通信管理(UDS请求解析、响应组装) | 会话切换、安全等级、子功能支持、否定响应码 |
| DEM | 服务层 | 诊断事件管理(DTC存储、老化、快照) | 事件状态位、老化计数器、故障确认/恢复阈值 |
| NvM | 服务层 | 非易失性数据管理(EEPROM/Flash读写) | 数据校验、写入周期、掉电保护、冗余存储 |
| MCAL | 微控制器抽象层 | 直接操作MCU寄存器(CAN、SPI、ADC、等) | 寄存器配置、中断优先级、DMA传输、时序精度 |
在测试用例设计中,模块划分决定了测试桩(Stub)的放置位置。例如,测试COM模块时,需要模拟下层CAN驱动发送/接收帧;测试DCM时,需要构造UDS请求报文并验证响应。模块边界越清晰,测试替身的设计就越简单。
2.3 通信基础:从信号到报文的完整链路
AUTOSAR通信体系以CAN/CAN-FD为主干,同时支持LIN、FlexRay和以太网。理解通信链路是测试通信类用例的前提。一条完整的通信链路包含以下环节:
- SWC端口发送:应用层SWC通过RTE接口将物理值(如车速80 km/h)写入端口。
- RTE路由:RTE根据配置将数据传递给COM模块,并触发相应的发送事件。
- COM信号处理:COM模块将物理值按信号定义(起始位、长度、因子、偏移量)转换为原始值,并打包进PDU(Protocol Data Unit)。
- PDU路由:PDU通过PduR(PDU Router)模块路由到对应的总线接口模块(如CanIf)。
- CanIf与CanDrv:CanIf将PDU映射到CAN硬件报文,CanDrv最终写入CAN控制器寄存器。
测试通信链路时,需要特别关注信号打包/解包的正确性。例如,一个16位无符号信号,因子为0.1,偏移量为-40,物理值100对应原始值1400。测试用例应验证:发送端是否正确将物理值转换为原始值;接收端是否正确将原始值还原为物理值。此外,还需验证字节序(Intel/Motorola格式)、符号扩展和信号超时处理。
2.4 诊断基础:UDS协议与DTC管理
AUTOSAR诊断体系基于ISO 14229(UDS)和ISO 15765(DoCAN)标准。诊断测试的核心对象是DCM和DEM模块。DCM负责处理诊断请求,DEM负责管理诊断事件(DTC)。测试工程师需要掌握以下关键概念:
- 诊断会话(Session):默认会话(0x01)、编程会话(0x02)、扩展会话(0x03)。不同会话下允许的服务不同。
- 安全等级(Security Level):通过安全访问服务(0x27)解锁受保护的功能,如写入标定数据。
- 服务标识符(SID):如读取数据(0x22)、写入数据(0x2E)、例程控制(0x31)、读取DTC信息(0x19)、清除DTC(0x14)。
- DTC状态位:每个DTC包含一个字节的状态位,如Bit0(testFailed)、Bit1(testFailedThisOperationCycle)、Bit4(confirmedDTC)等。
- 老化(Aging):当故障不再发生时,经过一定驾驶循环后DTC状态位自动清除。
诊断测试用例设计应覆盖正向流程(正常请求-正常响应)、负向流程(非法请求-否定响应)和异常流程(总线断开、响应超时)。例如,测试0x22服务时,应验证:支持的数据标识符(DID)返回正确数据;不支持的DID返回0x31(requestOutOfRange);会话不允许时返回0x7F 0x22 0x7F(serviceNotSupportedInActiveSession)。
2.5 案例拆解:CAN信号超时监控的测试设计
以下通过一个实际案例,展示如何基于AUTOSAR分层架构设计测试用例。某车身控制器(BCM)通过CAN总线接收来自发动机控制器(ECM)的发动机转速信号(EngineSpeed),信号周期为100ms,超时阈值为500ms。当信号超时后,BCM应进入降级模式,将转速显示为0并置位DTC。
测试环境与初始条件:使用CANoe模拟ECM节点,BCM作为被测对象。CANoe中配置一个周期为100ms的CAN报文,包含EngineSpeed信号(16位无符号,因子0.25,偏移量0)。测试开始时,BCM处于正常模式,转速显示为2000 rpm。
测试步骤:
- 正常发送:CANoe以100ms周期发送EngineSpeed=2000 rpm对应的原始值8000(0x1F40)。验证BCM显示转速为2000 rpm,无DTC。
- 停止发送:CANoe停止发送该报文,模拟信号丢失。等待600ms(超过500ms阈值)。
- 观察BCM行为:BCM应显示转速为0,并进入降级模式。
- 读取DTC:通过诊断仪发送0x19 0x02(按状态掩码读取DTC),确认DTC状态位Bit0(testFailed)和Bit4(confirmedDTC)置位。
- 恢复发送:CANoe恢复100ms周期发送。等待1个驾驶循环(或按配置的老化条件),再次读取DTC,确认Bit0清除,老化计数递减。
关键参数与预期结果:
| 步骤 | 输入/操作 | 预期结果 | 实际结果 |
|---|---|---|---|
| 1 | 100ms周期发送EngineSpeed=2000rpm | BCM显示2000rpm,无DTC | 显示2000rpm,DTC状态=0x00 |
| 2 | 停止发送600ms | BCM显示0rpm,降级模式激活 | 显示0rpm,仪表报警灯点亮 |
| 3 | 0x19 0x02读取DTC | DTC状态Bit0=1, Bit4=1 | 状态=0x11(testFailed+confirmed) |
| 4 | 恢复发送,等待老化 | Bit0清除,老化计数递减 | 状态=0x10(仅confirmed) |
测试结果分析与复盘:该用例验证了COM模块的超时监控功能、DEM模块的DTC状态管理以及应用层的降级逻辑。测试中发现,当信号恢复后,DTC的Bit0立即清除,但Bit4(confirmed)需要经过40个驾驶循环(老化条件)才能清除。这符合AUTOSAR规范中“故障确认后需老化”的设计。测试过程中还发现,如果CANoe停止发送报文但总线仍处于活动状态(其他报文正常),BCM的COM模块能正确识别单个信号超时,而不会误判为总线关闭。这验证了COM模块的“信号级超时”与CanIf的“总线级超时”是独立处理的。
2.6 常见误区与总结复盘
在AUTOSAR测试实践中,测试工程师常犯以下错误,需要特别警惕:
- 误区一:将应用层测试与BSW测试混为一谈。应用层测试应通过RTE接口注入数据,而BSW测试应通过底层驱动接口或总线工具注入报文。混用会导致测试结果无法定位缺陷层级。
- 误区二:忽略字节序和因子偏移量。信号打包/解包错误是通信类缺陷的高发区。测试用例必须包含边界值(如最大值、最小值、负值)和特殊值(如0xFFFF表示无效)。
- 误区三:只测正向流程,不测否定响应。UDS诊断测试中,否定响应码(NRC)的验证与正向响应同等重要。例如,0x31服务在条件不满足时应返回0x24(conditionNotCorrect)。
- 误区四:DTC测试只关注置位,不关注清除和老化。DTC的生命周期管理(置位、确认、老化、清除)是诊断测试的完整闭环,缺一不可。
总结:AUTOSAR分层架构为测试工程师提供了清晰的“测试分层”思路。应用层测试关注功能逻辑与端口契约;RTE测试关注通信调度与数据一致性;BSW测试关注驱动配置与硬件交互;诊断测试关注UDS协议与DTC状态机。测试用例设计应始终围绕“接口边界”展开,利用好总线工具(CANoe、PCAN)和诊断工具(ODX、诊断仪),并建立“正向-负向-异常”三维测试矩阵。只有深入理解分层架构的职责划分,才能设计出高效、精准的测试用例,为汽车软件质量保驾护航。