2. 诊断协议与标准
在 Continental 的 ECU 开发与售后诊断体系中,诊断协议并不是单一标准,而是由法规层、应用层、传输层和物理层共同构成的分层体系。OBD-II 解决的是排放相关法规诊断的“最低公共集”,UDS(ISO 14229)解决的是整车厂与供应商自定义的完整诊断能力,DoIP(ISO 13400)则解决以太网车载网络中“诊断报文如何上车”的问题。理解三者的差异,关键不是记住服务号,而是理解它们各自约束了哪一层、在 Continental ECU 中由哪些软件模块承载、以及故障码如何从应用层一路映射到诊断响应。
一、三层协议的分工与 Continental 实现位置
OBD-II 的强制范围集中在动力总成排放相关 ECU,它规定了诊断座引脚、通信速率、PID(参数标识)和 DTC(故障码)的读取方式。在 Continental 的发动机管理系统中,OBD-II 通常由 Boot 与 Application 之间的 OBD 任务周期性执行,其核心是“模式 01/02/03/09”这类固定服务,服务号空间小、语义固定,不允许整车厂随意扩展。
UDS 则完全不同。它定义了 0x10 到 0x3E、0x85、0x86 等一整套服务,覆盖会话控制、安全访问、读写数据、例程控制、DTC 读取与清除、通信控制等。在 Continental ECU 中,UDS 由 DCM(Diagnostic Communication Manager)模块实现,DCM 负责服务分发、会话与安全状态机、DTC 存储与状态位管理;底层由 PduR、CanTp 或 DoIP 提供传输。也就是说,UDS 是“服务语义层”,它不关心报文是走 CAN 还是以太网。
DoIP 是传输层与网络层的结合。它把 UDS 报文封装在 IP 包中,通过 TCP 或 UDP 传输,并增加了车辆识别、路由激活、诊断电源保持等机制。在 Continental 的高性能计算平台或域控制器中,DoIP 由 DoIP 模块与 SoAd(Socket Adaptor)协同实现,诊断仪先通过 UDP 发送车辆识别请求,再通过 TCP 建立诊断连接,之后才把 UDS 请求作为 payload 发送。
二、诊断服务的实际差异
OBD-II 的服务是“法规固定”的。以模式 01 为例,请求 01 0C 读取发动机转速,ECU 返回 41 0C 1A F8,其中 1A F8 按公式 (256A+B)/4 计算得到约 1726 rpm。这类服务不允许整车厂改变语义,也不支持会话切换或安全访问。
UDS 的服务是“可配置”的。以 0x22 读数据标识符为例,请求 22 F1 90 读取 VIN,ECU 返回 62 F1 90 加 17 字节 VIN。但 0x22 是否可用、在哪个会话下可用、是否需要先通过 0x27 安全访问,完全由整车厂在诊断描述文件(CDD/ODX)中定义。Continental 的 DCM 会根据配置表逐条判断:当前会话是否允许该 DID、安全等级是否满足、数据长度是否匹配。若条件不满足,返回 7F 22 33(安全拒绝)或 7F 22 31(请求超出范围)。
DoIP 不改变 UDS 服务本身,但它增加了“上车”的前置条件。诊断仪必须先发送车辆识别请求(UDP 13400 端口),ECU 返回逻辑地址与 VIN;随后发送路由激活请求,ECU 校验激活类型后返回路由激活响应;此后才能通过 TCP 发送 UDS 报文。若跳过路由激活直接发 UDS,DoIP 模块会丢弃或返回错误。在 Continental 的域控制器中,DoIP 还负责诊断电源保持,确保在整车下电后诊断连接不会立即中断。
三、故障码定义与状态位
DTC 在 Continental ECU 中不是简单的一个数字,而是“故障码 + 状态字节 + 快照 + 扩展数据”的组合。故障码本身遵循 ISO 15031-6 的编码规则:首字母表示系统(P 动力、B 车身、C 底盘、U 网络),后四位十六进制表示具体故障。例如 P0301 表示 1 缸失火,U0100 表示与 ECM/PCM 通信丢失。
状态字节(StatusByte)是诊断的关键。它包含 testFailed、testFailedThisOperationCycle、pendingDTC、confirmedDTC、testNotCompletedSinceLastClear、testFailedSinceLastClear、testNotCompletedThisOperationCycle、warningIndicatorRequested 等位。以 P0301 为例,若当前循环失火计数超过阈值,testFailed 置 1;若连续两个循环都失败,confirmedDTC 置 1;若 40 个暖机循环内未再失败,confirmedDTC 自动清除。诊断仪通过 0x19 子功能 0x02 读取 DTC 及其状态字节,通过 0x19 子功能 0x04 读取快照,通过 0x19 子功能 0x06 读取扩展数据。
四、实操中的判断路径
当诊断仪无法读取某 ECU 时,可按以下顺序排查:先确认物理层是否正常(CAN 电阻、以太网链路状态);再确认 DoIP 车辆识别是否返回正确逻辑地址;然后确认路由激活是否成功;最后检查 UDS 会话与安全访问是否满足。若 OBD-II 模式 03 能读到 DTC 但 UDS 0x19 读不到,通常是 DCM 配置中该 DTC 未使能 UDS 读取,或当前会话不在扩展会话下。若 UDS 返回 7F 19 33,说明安全访问未通过,需先执行 0x27 种子密钥流程。
理解这三层协议的分工,核心在于:OBD-II 是法规底线,UDS 是功能全集,DoIP 是传输通道。Continental ECU 通过 DCM 统一管理 UDS 与 OBD-II 的服务语义和 DTC 状态,通过 CanTp 或 DoIP 适配不同物理网络。诊断时先定位问题发生在哪一层,再决定是查配置、查状态机还是查物理链路,才能避免在错误的方向上反复尝试。