1.什么是诊断

车辆在运行过程中,不可避免地会发生一些故障,为了确保行车安全,我们要求车上的ECU能够实时监测部件的运行状态,一旦发现异常情况,能通过点亮报警灯等方式提示驾驶员。但是,点亮报警灯只能告诉驾驶员车辆发生了故障,最多只能定位到故障ECU,比如ABS报警灯亮说明ABS系统出现故障,但具体是什么部件发生故障并不能通过报警灯显示出来。这时就需要ECU在本地存储一个与故障相对应的故障代码,在进行维修的时候,可以通过车上的OBD接口连接诊断仪,把这个存储的故障代码读取出来,从而进一步定位到更加具体的故障部件,比如ABS传感器发生断路等。

以上就涉及到了车辆故障诊断的两个方面,一个是在线诊断(Onboard Diagnostic),包括故障实时监测、故障灯显示和故障代码实时更新存储,另一个是离线诊断(Offboard Diagnostic),就是指维修时连接外部诊断仪,进行故障码读取,从而快速定位故障部件,有的诊断仪还可以直接显示维修建议。

2.诊断协议体系

想要把存储的故障码读取出来,就需要诊断仪和ECU之间有一个通讯协议。目前最常用的是基于CAN线的UDS诊断。

UDS(Unified diagnostic service) 是由ISO 14229-1标准定义的一套国际通用的诊断服务指令,规定了诊断请求和响应的格式。在整个体系中处于最上层的应用层。

诊断指令通过 CAN(ISO 11898) 网络进行传输,当然现在也有基于CANFD或以太网等其它网络的诊断,诊断指令都是由UDS定义的,只不过底层传输方式不一样,本专栏只讨论基于CAN网络的诊断。

但有个问题是CAN每帧只能传输8个字节,而有些诊断指令的长度是大于8字节的,这个时候就需要在应用层和底层传输协议之间加入一个传输层,定义了一些多帧传输的机制。传输层对应的国际标准是ISO 15765-2/3,它的功能就是:发送方的传输层将应用层大于8字节的诊断数据按一定规则进行拆分,形成多个CAN帧进行发送,接收方的传输层收到这些CAN帧后,以相同的规则把应用层数据进行组合,形成完整的诊断数据。 它是上下层之间的一个媒介。

3.车辆诊断的发展

上面提到的是最基本的故障诊断功能,其实诊断能够完成的功能还有很多。例如,在车辆生产完毕时,需要对一些部件进行EOL下线检测,来验证装配是否正确,现在大多数下线检测都是通过诊断指令来实现的,比如给车身控制模块(BCM)发送一个诊断指令,让雨刷动两下,从而验证雨刷功能正常。

此外,很多车上的ECU会有更新升级软件的需求,最初都需要把ECU从车上拆下来,用专用的程序烧写设备进行软件烧写,但现在大部分车辆能够通过诊断仪来更新ECU软件,省去了拆装ECU的麻烦,在OBD接口上连接一个诊断仪就可以了。这个功能也是通过诊断来实现的,也就是我们常说的BootLoader。包括现在很火热的OTA,其底层实现方法也是诊断,只不过OTA不需要连接外部诊断仪,而是用Tbox、网关或车辆主机充当诊断仪,ECU软件更新包是从云端获取下来的,再通过诊断协议发送给ECU,实现软件的更新。

4.本专栏介绍

现在UDS诊断在车上越来越普及,开发和测试需求都越来越多,但UDS的学习成本其实还是蛮高的,14229-1这一本协议就四百多页,乍一看起来很没有头绪,网上其他一些资料也都比较零散。我在UDS诊断测试和开发这个方向工作了三年多了,手写了一套UDS代码和一套BootLoader代码,有了少许积累,想和大家分享一下我所学到的东西,以及开发和测试的一些经验。同时也是对自己所掌握的知识做一个全面的梳理和汇总,希望能在大家的学习过程中有一点帮助。文章我会力求简洁易懂,并且覆盖所有相关知识点,力争做一套全网做完整的UDS教程。

本专栏目前已更新完毕,包含了标准中所有服务的介绍,和与之相关的我所了解的东西。具体内容见下方目录,欢迎大家交流指正!如果有其它想要了解的地方可以评论或私信,一起探讨。感谢大家的关注~

<<<总目录>>>

1. UDS整体介绍

1.1 应用层协议整体介绍
1.2 UDS应用层软件开发方法
1.3 诊断响应规则汇总

2. UDS服务详解

2.1 诊断和通讯管理功能单元

常用服务:
2.1.1 诊断和通讯管理功能单元概述
2.1.2 诊断会话控制服务(0x10)
2.1.3 初步了解CDD(以10服务为例)
2.1.4 ECU复位服务(0x11)
2.1.5 安全访问服务(0x27)
2.1.6 诊断仪在线服务(0x3E)
2.1.7 通信控制服务(0x28)
2.1.8 控制DTC设置服务(0x85)

不常用服务:
2.1.9 时间参数控制(0x83)
2.1.10 链接控制(0x87)
2.1.11 加密数据传输(0x84)
2.1.12 基于事件响应(0x86)

2.2 数据传输功能单元

常用服务:
2.2.1 数据传输功能单元概述
2.2.2 数据读取和写入服务(0x22/0x2E)

不常用服务:
2.2.3 读取内存服务(0x23)
2.2.4 写内存服务(0x3D)
2.2.5 读取DID换算信息(0x24)
2.2.6 周期读取DID数据(0x2A)
2.2.7 动态定义DID(0x2C)

2.3 存储数据传输功能单元(常用)

2.3.1 故障码(DTC)格式详解
2.3.2 故障码状态(statusOfDTC)详解
2.3.3 读取DTC数量(0x19 01)
2.3.4 读取DTC(0x19 02)
2.3.5 读取DTC快照记录(0x19 04)
2.3.6 读取DTC扩展数据记录(0x19 06)
2.3.7 读取所有支持的DTC(0x19 0A)
2.3.8 清除DTC信息(0x14)

2.4 输入输出控制功能单元(常用)

2.4.1 输入输出控制服务(0x2F)

2.5 远程激活例程控制功能单元(常用)

2.5.1 例程控制服务(0x31)

2.6 上传下载功能单元

常用服务:
2.6.1 请求下载(0x34)
2.6.2 数据传输服务(0x36)
2.6.3 请求退出传输(0x37)与数据传输流程报文实例

不常用服务:
2.6.4 请求上传(0x35)
2.6.5 请求文件传输(0x38)

3. UDS on CAN网络层传输协议(15765-2)详解

3.1 概述
3.2 CAN 与CAN FD基础
3.3 传输层协议
3.4 多帧传输
3.5 网络层定时参数
3.6 错误处理
3.7 地址格式

4. UDS on CAN应用层规范(15765-3)详解

4.1 应用层定时参数
4.2 应用层错误处理

5. 基于UDS的车用BootLoader开发方法

5.1 概述
5.2 内存空间分配和Flash擦写操作
5.3 ECU启动流程
5.4 更新流程
5.5 CRC32算法

6. Vector工具介绍

6.1 使用DiVa进行诊断自动化测试
6.2 VT System 入门
6.3 VT System 板卡介绍
6.4 VT System 的使用
6.5 VT System 的FPGA附加模块
6.6 VT System 结合Diva实现诊断自动测试

汽车UDS诊断详解及Vector相关工具链使用说明——总述相关推荐

  1. 汽车UDS诊断详解及Vector相关工具链使用说明——2.3.1 故障码(DTC)格式详解

    1. 概述 存储数据传输功能单元其实就是读取故障码信息和清除故障码两个服务.我们本文先来看一下我们一直在说的故障码的格式是怎样的. 我们通常把诊断分成两种,我们之前一直在讲的UDS诊断属于增强型诊断, ...

  2. 汽车UDS诊断详解及Vector相关工具链使用说明——6.1 使用DiVa进行诊断自动化测试

    1. Diva软件简介 Diva是一个诊断测试脚本自动生成工具,输入是CANdelaStudio制作的CDD或ODX文件,经过Diva配置,自动生成诊断测试工程和脚本,可以导入CANoe软件进行诊断自 ...

  3. 汽车UDS诊断详解及Vector相关工具链使用说明——2.1.3 初步了解CDD(以10服务为例)

    我们前一篇文章详细讲了诊断会话控制服务10服务,这篇文章来讲一下如何在CDD文件中配置这个服务和相关的诊断会话状态等内容. 具体包括: 服务属性设置 服务请求和响应格式设置 参数设置 否定响应码设置 ...

  4. 汽车UDS诊断详解及Vector相关工具链使用说明——2.1.1 诊断和通讯管理功能单元概述

    从本章开始,会为大家详细讲解UDS中常用的诊断服务. 标准中把UDS所有诊断服务分为了以下几个部分: 诊断和通信管理功能单元 数据传输功能单元 传输储存的数据功能单元 输入输出控制功能单元 远程激活例 ...

  5. 汽车UDS诊断详解及Vector相关工具链使用说明——2.2.6 周期读取DID数据(0x2A)

    1. 概述 周期读取数据服务可以命令ECU周期性返回某个数据. 该服务的DID都位于0xF200-0xF2FF范围内,所以该服务的请求报文中不包含DID完整的两字节,而是只包含低字节,省略了高字节0x ...

  6. 汽车UDS诊断详解及Vector相关工具链使用说明——5.5 CRC32算法

    对于CRC32算法,汽车行业通常采用IEEE 802.3的规定,多项式为04C11DB7h,初始值为FFFFFFFFh,校验结果需和FFFFFFFFh按位进行异或计算.以下是我本次使用的CRC32算法 ...

  7. 汽车UDS诊断详解及Vector相关工具链使用说明——2.3.2 故障码状态(statusOfDTC)详解

    在ECU中,每个故障码会有一个字节长度的状态字节(statusOfDTC),DTC状态指示了该DTC所对应的故障是否发生.是否被确认等状态.DTC状态每一位的定义如下: 我们结合下面的例子,来看一下这 ...

  8. 汽车UDS诊断详解及Vector相关工具链使用说明——6.2 VT System 入门

    1. 概述 在ECU开发过程中,测试的重要性不言而喻.最初,当ECU的软硬件都开发完成后,需要将其接入真实系统中,连接好各个传感器和负载,对其输入特定的信号,观察其相应的功能和动作是否正确.在测试故障 ...

  9. 汽车UDS诊断详解及Vector相关工具链使用说明——3.4 多帧传输

    前文已经大概介绍了多帧传输,本文我们详细展开讲讲. [首先要注意的是:多帧传输只能使用物理寻址,不支持功能寻址,功能寻址发送的多帧传输的首帧应被接收方忽略.] 我们假设发送方要向接收方发送32字节的数 ...

  10. 汽车UDS诊断详解及Vector相关工具链使用说明——2.3.7 读取所有支持的DTC(0x19 0A)

    1. 概述 19服务最后一个常用的子功能是0A-读取所有支持的DTC,这个子功能是让ECU返回所有支持的DTC,不论DTC状态如何.故障是否发生,都要返回.它通常被整车厂用来测试ECU中实际支持的DT ...

最新文章

  1. ORACLE用户权限管理笔记整理
  2. python与MySQL交互
  3. outlook自动保存html,当创建一个新的HTML电子邮件时保持默认的Outlook格式
  4. android locknow,java – Android DevicePolicyManager lockNow()
  5. 关于卸载Python第三方包的粗暴方法
  6. css怎麽将按钮变长,CSS3 按钮边线环绕渐变缩短和伸长
  7. Mysql中添加汉字乱码无法识别问题
  8. 通过资源名称得到资源id
  9. Linux安装之Linux mint
  10. 数据挖掘二手车价格预测 Task05:模型融合
  11. Oracle_视图_索引_plsql_游标_存储过程_存储函数_触发器
  12. 计算机打印东西怎么横向打印机,打印机横向打印怎么设置,打印机不能横向打印...
  13. 机器学习——模型融合
  14. EPLAN中如何画屏蔽双绞线
  15. MMS的基本特征与特点(转)
  16. Leetcode刷题100天—5855. 找出数组中的第 K 大整数(优先队列)—day22
  17. 窗外逶迤的月光如水般倾泻
  18. ajax-jq-php(mysql)四级省市级联
  19. 专科毕业生该何去何从?
  20. boost asio 文件服务器,基于boost::asio封装搭建的简单服务器

热门文章

  1. 信息系统项目管理师必背核心考点(二十四)WBS分解的原则
  2. ROS | 机器人操作系统简介
  3. Livereload介绍
  4. 兼容百家的统一独立的执法记录仪可视指挥调度平台
  5. 收藏!示波器探头的选择与使用
  6. 【ZMap】unable to initialize blacklist / whitelist
  7. Win32软件开发: 按键精灵 鼠标模拟器(VibraClick)
  8. Idea利用JSP模板设置统一路径(basePath)
  9. unity2018关联不到vs_Unity2018 VS2017打开CS脚本,提示全红及无法加载工程等问题解决...
  10. PLSQL Developer使用