1. 诊断栈与UDS集成工程导入

在整车电子电气架构从分布式ECU走向域集中与中央计算的过程中,诊断能力已经从"每个ECU各自实现一套诊断服务"演变为"由AUTOSAR基础软件统一提供诊断栈,由整车级UDS规范统一约束服务行为"。ETAS作为AUTOSAR基础软件的主流供应商,其诊断栈(Diagnostic Stack)是RTA-CAR产品族中的核心组件之一,承担着从物理总线报文到应用层诊断服务的完整链路。理解这条链路的组成、UDS在其中的角色,以及集成工程从需求到交付的整体工作流,是后续所有配置、生成、测试工作的前提。

一、ETAS AUTOSAR诊断栈的组成

ETAS诊断栈并非单一模块,而是由若干BSW模块按AUTOSAR分层规范组合而成,自上而下大致可分为四层。

最上层是诊断通信管理(DCM,Diagnostic Communication Manager)。DCM是诊断栈的"大脑",负责UDS服务的解析与分发:它接收来自PduR的诊断请求,根据配置的会话状态、安全等级、服务表判断该请求是否被允许,然后调用对应的服务处理函数,或通过RTE调用应用层的诊断服务接口(如读取DID、执行例程)。DCM同时管理诊断会话(Default、Programming、Extended)与安全访问(Security Access)状态机。

第二层是诊断事件管理(DEM,Diagnostic Event Manager)。DEM负责故障的存储与老化:应用层通过RTE上报事件(Event),DEM根据配置的Debounce策略(计数器或时间)判断事件是否确认,确认后写入故障码(DTC)并记录快照(Snapshot)与扩展数据(Extended Data)。DCM通过0x19服务读取DEM中的DTC信息,通过0x14服务清除故障。

第三层是协议与传输层,包括PduR(PDU Router)、CanTp(CAN Transport Protocol)或DoIP(Diagnostics over IP)。CanTp负责将超过8字节的UDS报文分段与重组,DoIP则在以太网场景下承载诊断报文。PduR负责在CanIf、CanTp、DCM之间路由PDU。

最底层是通信驱动与硬件抽象,包括CanIf、Can Driver以及MCAL中的CAN控制器驱动。这一层完成报文的收发、过滤与中断处理。

在ETAS RTA-CAR中,上述模块通过ISOLAR-AB或RTA-CAR配置工具进行参数化,最终由生成器产出C代码与配置头文件,与手写应用代码一起编译链接。

二、UDS在整车诊断中的角色

UDS(Unified Diagnostic Services,ISO 14229)定义了诊断服务的语义与交互规则,是诊断栈"说什么"的规范;而AUTOSAR诊断栈是"怎么说"的实现。二者关系可以这样理解:UDS规定0x22服务用于按DID读取数据,DCM则负责在收到0x22请求时查找DID配置表、调用读取回调、组装正响应。

在整车层面,UDS承担三类典型任务:故障诊断(0x19读取DTC、0x14清除DTC)、数据读写与例程控制(0x22/0x2E读写DID、0x31执行例程)、刷写与编程(0x10进入编程会话、0x27安全访问、0x34/0x36/0x37下载)。整车诊断规范通常由OEM定义,规定每个ECU支持哪些服务、哪些DID、哪些DTC,ETAS诊断栈的配置必须与这份规范逐条对齐。

三、集成工程的整体工作流与交付物

一个典型的ETAS诊断栈集成工程,其工作流可以概括为"需求输入—配置—生成—集成—验证"五个阶段,但每个阶段的产出物和判断依据各不相同。

需求输入阶段:拿到OEM诊断规范(Diagnostic Specification)、诊断数据库文件(CDD/ODX)、网络通信矩阵(DBC/ARXML)。这些文件定义了服务列表、DID、DTC、会话与安全等级、报文ID与寻址方式。

配置阶段:在ISOLAR-AB中导入ARXML,配置DCM服务表、DEM事件与DTC、CanTp参数(BS、STmin、N_As等)、PduR路由。关键参数如P2Server_max(默认50ms)、P2*Server_max(默认5000ms)需与规范一致。

生成阶段:运行RTA-CAR生成器,产出Dcm_Cfg.c、Dem_Cfg.c、CanTp_Cfg.c等配置代码,以及对应的头文件。

集成阶段:将生成代码与ECU抽象层、应用层代码一起编译,链接到目标ECU;配置RTE接口,使应用层能调用Dcm接口上报事件、读取DID。

验证阶段:使用CANoe/CANalyzer或ETAS INCA发送UDS请求,验证正响应、负响应码(NRC)、会话切换、安全访问、DTC读写是否符合规范。

交付物通常包括:配置工程文件(.arxml/.isolar)、生成代码、集成后的可执行文件、诊断测试报告、DID/DTC对照表。其中DID/DTC对照表是后续测试与售后诊断的基础。

ETAS AUTOSAR 诊断栈分层结构与 UDS 服务流 诊断栈分层(BSW) DCM 诊断通信管理 服务解析 · 会话/安全状态机 · 响应组装 DEM 诊断事件管理 事件Debounce · DTC存储 · 快照/扩展数据 PduR + CanTp / DoIP PDU路由 · 分段重组 · 流控 CanIf + CAN Driver + MCAL 报文收发 · 过滤 · 中断处理 UDS 服务交互流(示例:0x22 读DID) 诊断测试仪 CANoe / INCA 0x22 F1 90 目标 ECU(诊断栈) DCM → RTE → 应用层 62 F1 90 + 数据 7F 22 31(NRC) UDS 服务分类与典型用途 故障诊断 0x19 / 0x14 数据读写 0x22 / 0x2E 例程控制 0x31 会话管理 0x10 安全访问 0x27 刷写编程 0x34/36/37 集成工程工作流与交付物 需求输入 CDD/ODX/DBC 配置 ISOLAR-AB 代码生成 RTA-CAR 集成编译 RTE + 应用层 验证与交付 测试报告/DID表

四、集成工程中的关键判断点

在实际项目中,诊断栈集成最容易出问题的往往不是配置本身,而是配置与规范、配置与硬件之间的对齐。以下三个判断点值得在项目早期就明确。

寻址方式:物理寻址(1对1)与功能寻址(1对多)在DCM中对应不同的PduR路由和DcmDslProtocolRow配置。功能寻址下,ECU不能对不支持的服务返回NRC 0x11,而应静默丢弃,这一点在配置DcmDslProtocolRow的DcmDslProtocolRxPdu时需特别注意。

会话与安全等级映射:每个服务在哪些会话下可用、是否需要安全解锁,由DcmDslServiceTable与DcmDspSecurityRow共同决定。例如0x2E写DID通常要求Extended会话且安全等级1已解锁,若配置遗漏,测试时会收到NRC 0x33(Security Access Denied)。

CanTp参数与总线负载:BS(Block Size)和STmin(Separation Time min)直接影响多帧传输效率。在CAN FD场景下,STmin可设为0,但需确认ECU的CanTp实现支持;若设为0导致接收方缓冲溢出,会出现NRC 0x21(Busy Repeat Request)。

示例参数说明:上述P2Server_max=50ms、P2*Server_max=5000ms、BS与STmin取值均为AUTOSAR默认或常见工程取值,实际项目必须以OEM诊断规范和ECU硬件能力为准,不可直接照搬。

五、从"能通"到"合规"