1. AUTOSAR诊断概述:诊断协议栈、DCM与DEM模块角色、诊断服务分类

各位同学,咱们今天正式开讲AUTOSAR诊断。说实话,这个主题我讲了不下十次,但每次备课还是会翻翻老笔记。为什么?因为诊断这东西,你看着是标准协议,但落地时全是细节。

先问大家一个问题:你开车去4S店,师傅拿个诊断仪往OBD接口一插,几秒钟就知道哪个传感器坏了。这背后是谁在干活?嗯,就是咱们今天要聊的诊断协议栈。

1.1 诊断协议栈:UDS on CAN 与 DoIP

诊断协议栈,说白了就是一套通信规则。ECU和诊断仪之间怎么说话、说什么、说错了怎么办,全在这套规则里。

目前主流的有两种:

  • UDS on CAN:基于CAN总线的统一诊断服务。这是老大哥,从OBD-II时代就在用,稳定可靠。我个人习惯叫它“诊断界的TCP/IP”。
  • UDS on DoIP:基于以太网的诊断协议。DoIP全称是Diagnostic over Internet Protocol。为什么搞这个?因为CAN总线带宽有限,刷写一个几百兆的固件能等到你怀疑人生。DoIP一上,速度直接起飞。

我在项目中遇到过一件事:某款车用CAN刷写ECU,每次要40分钟。客户投诉说“你们这车刷个系统比Windows更新还慢”。后来我们切到DoIP,时间压缩到5分钟以内。你想想看,这就是协议栈选型的差距。

核心要点:UDS on CAN适合低速诊断和常规故障读取,DoIP适合高速刷写和大数据量传输。选型时别盲目追新,CAN在成本敏感的项目里依然能打。

1.2 DCM与DEM模块角色

这两个模块,是AUTOSAR诊断架构里的左膀右臂。很多新手容易搞混,我当年也犯过这错。

DCM(Diagnostic Communication Manager)

DCM是诊断通信的管理者。它负责接收诊断请求、解析服务ID、调用对应的处理函数、最后把响应发回去。

你可以把它想象成一个前台接待:客户(诊断仪)来了,问“你哪个房间的灯坏了?”(请求),前台查一下登记表(路由),然后告诉客户“3楼302室”(响应)。

DCM的核心职责:

  • 解析UDS请求报文
  • 检查服务是否被支持($19、$14、$22等)
  • 检查会话状态和安全等级
  • 调用下层模块(如DEM、SWC)执行具体操作
  • 组装并发送响应报文

DEM(Diagnostic Event Manager)

DEM是诊断事件的管理者。它负责记录故障、管理DTC(Diagnostic Trouble Code)、处理故障老化与恢复。

说白了,DCM管的是“通信”,DEM管的是“故障”。

DEM的核心职责:

  • 接收来自SWC或BSW的故障事件上报
  • 管理DTC状态位(比如:当前故障、历史故障、已确认等)
  • 处理故障老化逻辑(比如:连续3个驾驶循环无故障,自动清除)
  • 响应DCM的$19(读取DTC信息)和$14(清除DTC)服务

个人经验:我曾经在一个项目里,DEM配置错了老化时间,导致一个偶发故障永远清不掉。客户测试时发现DTC一直亮着,查了三天才发现是老化计数器没配对。嗯,这里要注意:DEM的配置参数,一个都不能错。

1.3 诊断服务分类:强制、可选与制造商特定

UDS协议(ISO 14229)定义了一大堆诊断服务。但并不是所有服务都必须实现。我习惯把它们分成三类:

分类 服务ID 说明 我的建议
强制服务 $10, $11, $27, $28, $3E, $83, $84, $85 所有ECU必须支持,否则无法通过合规测试 别偷懒,老老实实全实现
可选服务 $14, $19, $22, $2E, $2F, $31, $34, $36, $37, $38 根据ECU功能需求选择实现 建议能实现就实现,方便后续扩展
制造商特定 $40-$7E(自定义范围) OEM自定义服务,用于特殊功能 慎用,尽量用标准服务替代

为什么要有强制服务?你想想看,如果每个ECU支持的诊断服务都不一样,诊断仪怎么统一工作?所以ISO 14229规定了一套“最小公共集”,所有ECU必须支持。

举个例子:$10(诊断会话控制)是强制服务。没有它,诊断仪连和ECU建立会话都做不到。$11(ECU复位)也是强制服务,否则你连重启ECU都做不到。

可选服务里,$19(读取DTC信息)和$14(清除DTC)是最常用的。几乎每个ECU都会实现。$22(读取数据标识符)和$2E(写入数据标识符)也常见,用于读写标定参数。

制造商特定服务,说白了就是OEM自己玩的花活。比如某家OEM定义了一个$50服务,用来读取ECU的“生产日期”。这种服务只在自家诊断仪上能用,第三方工具基本不支持。我个人建议:能用标准服务解决的问题,就别搞自定义。否则后面维护起来,你自己都想骂人。

避坑指南:我曾经在一个项目里,为了省事把$19服务跳过了,想着“反正我们ECU不报故障”。结果OEM审核时直接打回,说“没有$19服务,你们ECU连故障诊断能力都没有”。后来连夜补上,加班到凌晨三点。所以,强制服务一个都不能少。

1.4 小结

好了,咱们今天把诊断协议栈、DCM和DEM的角色、服务分类都过了一遍。总结一下:

  • 协议栈选型:CAN还是DoIP,看带宽和成本需求
  • DCM管通信,DEM管故障,分工明确
  • 服务分类:强制服务必须全实现,可选服务尽量实现,制造商特定服务慎用

下一章咱们会深入聊DCM的配置和实现,包括怎么配置服务路由、怎么处理会话状态机。到时候我会拿一个实际项目的配置截图出来,手把手教大家配。嗯,敬请期待。