一、DCM诊断协议概述

大家好,我是老张。做汽车电子诊断这块十几年了,今天咱们聊聊DCM诊断协议。说实话,很多刚入行的工程师一看到UDS协议栈就头大,觉得太抽象。其实没那么复杂,咱们把它拆开来看。

1.1 UDS协议栈介绍

UDS,全称是Unified Diagnostic Services,统一诊断服务。说白了,它就是一套标准化的“汽车看病”语言。你想想看,一辆车上有几十个ECU,每个ECU都可能出问题,总得有个统一的沟通方式吧?UDS就是干这个的。

UDS协议栈长什么样呢?我习惯把它分成三层:

  • 应用层:定义具体的诊断服务,比如读取故障码、写入数据等
  • 会话层:管理诊断会话,控制通信状态
  • 传输层:负责数据的分包和重组,确保大报文能正确传输

嗯,这里要注意,UDS是基于OSI模型来的,但实际应用中我们更关注应用层和传输层。我记得刚做第一个项目时,被传输层的TP层搞得晕头转向,后来才发现,其实只要理解了它的分包机制,就没那么难了。

核心要点:UDS协议栈的核心是“请求-响应”模式。诊断仪发一个请求,ECU回一个响应。就这么简单。

给大家看个实际例子。假设我们要读取ECU的软件版本号:

// 诊断请求:读取数据通过标识符(0x22服务)
// 请求报文:22 F1 90
// 含义:服务ID=0x22,数据标识符=0xF190(软件版本号)

// 正常响应:62 F1 90 01 02 03 04
// 含义:肯定响应,数据标识符=0xF190,数据=01 02 03 04(版本号)

// 异常响应:7F 22 31
// 含义:否定响应,服务ID=0x22,否定码=0x31(请求超出范围)

这个例子很典型。我在项目中遇到过好几次,工程师写对了请求,但ECU就是不回正确响应。后来发现,原来是数据标识符的格式搞错了。0xF190和0x90F1,顺序一颠倒,ECU就不认了。

1.2 DCM在AUTOSAR架构中的位置

AUTOSAR架构,说白了就是把汽车软件标准化。DCM(Diagnostic Communication Manager)是AUTOSAR架构中负责诊断通信的模块。

我画了个图,大家看看DCM在AUTOSAR架构中的位置:

AUTOSAR架构中DCM的位置 应用层(Application Layer) SWC(软件组件) RTE(运行时环境) BSW(基础软件层) DCM 诊断通信管理器 其他BSW模块 NvM、EcuM、CanTp等 MCAL(微控制器抽象层) ← 诊断通信的核心模块 ← 与DCM协同工作

从图上可以看出来,DCM位于BSW层,在RTE之下,MCAL之上。它负责接收诊断请求,然后调用相应的服务处理函数。我个人习惯把DCM看作是“诊断通信的交通警察”,它不负责具体的诊断逻辑,只负责把请求正确地分发到该去的地方。

小提示:在AUTOSAR配置工具中,DCM的配置项非常多。我建议新手先从“诊断服务表”入手,把每个服务ID对应的处理函数配置好,其他的慢慢来。

1.3 诊断通信的基本流程

诊断通信的基本流程,其实就三步:请求、处理、响应。但实际项目中,细节比这个多得多。

我给大家梳理一下完整的流程:

  1. 建立物理连接:诊断仪通过CAN、CAN FD或以太网连接到车辆
  2. 建立诊断会话:发送0x10服务,进入指定的诊断会话模式
  3. 安全访问(如果需要):发送0x27服务,通过种子-密钥验证
  4. 发送诊断请求:比如读取故障码、读取数据等
  5. ECU处理请求:DCM解析请求,调用对应的服务处理函数
  6. 发送诊断响应:肯定响应或否定响应
  7. 结束诊断会话:发送0x11服务(ECU复位)或0x82服务(结束会话)

为什么会这样设计?你想想看,如果任何人都能随便访问ECU,那车辆的安全性就没法保证了。所以安全访问这一步,说白了就是给诊断加了一把锁。

我曾经在一个项目中遇到过这样的问题:诊断仪发送了正确的请求,但ECU就是不响应。排查了半天,发现是诊断会话没有建立成功。嗯,这里要注意,ECU在默认会话模式下,很多诊断服务是不支持的。必须先通过0x10服务切换到扩展会话模式,才能执行读写操作。

避坑指南:我曾经在量产阶段发现,某批ECU在诊断通信时偶尔会超时。后来定位到是传输层的TP层配置问题——发送缓冲区的深度不够,导致大报文被丢弃。所以,配置DCM时一定要根据实际报文大小,合理设置缓冲区。

给大家看个完整的诊断通信时序图:

诊断通信时序图 诊断仪 ECU 0x10 03 (建立扩展会话) 0x50 03 (肯定响应) 0x27 01 (请求种子) 0x67 01 XX XX (种子值) 0x27 02 YY YY (发送密钥) 0x67 02 (安全访问成功) 0x22 F1 90 (读取软件版本) 0x62 F1 90 01 02 03 04 (版本数据) 时间

这个时序图很直观。诊断仪先建立会话,然后做安全访问,最后才发送真正的诊断请求。每一步都有对应的响应,如果哪一步出错了,ECU会返回否定响应,告诉你哪里不对。

好了,关于DCM诊断协议的概述就讲到这里。这些基础概念搞清楚了,后面咱们再深入聊具体的配置和实战技巧,就会轻松很多。

本章小结:

  • UDS协议栈分三层:应用层、会话层、传输层
  • DCM在AUTOSAR架构中位于BSW层,是诊断通信的核心模块
  • 诊断通信的基本流程:建立会话 → 安全访问 → 请求/响应 → 结束会话
  • 配置DCM时,注意缓冲区大小和会话模式的切换

可可精品资料库