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控制器驱动。这一层完成报文的收发、过滤与中断处理。
二、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对照表是后续测试与售后诊断的基础。
四、集成工程中的关键判断点
在实际项目中,诊断栈集成最容易出问题的往往不是配置本身,而是配置与规范、配置与硬件之间的对齐。以下三个判断点值得在项目早期就明确。
寻址方式:物理寻址(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)。