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

2023-05-16

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实现诊断自动测试

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 阿里OSS上传文件的两种方式的详解

    阿里OSS上传文件 一 为什么要使用云存储 xff1f 1 存储费用低 xff0c 不占用服务器的磁盘空间 2 流量费用低 xff0c 上传或下载不占用服务器带宽 二 怎么使用云存储 xff1f 方法一 xff1a javascript客户
  • antd设置表单的某个字段的值

    antd设置表单的某个字段的值 1 创建form的实例 const span class token punctuation span formObj span class token punctuation span span class
  • 数组去重,并且数组的每一项是对象object

    span class token keyword function span obj2key span class token punctuation span obj keys span class token punctuation s
  • javascript函数声明和函数表达式的区别

    一 首先它们写法不一样 xff0c 我们先写一个函数声明 函数表达式的dome span class token comment 1 函数声明 span span class token keyword let span ceshi1 sp
  • antd表单回显

    一 利用initialValue 适用于初始化固定的值 Form 的 initialValues 与 Item 的 initialValue 区别 xff1f 在大部分场景下 xff0c 我们总是推荐优先使用 Form 的 initialV
  • Netty远程桌面demo

    https github com leisuredong RemoteDesktop 从远端服务器获取屏幕截图展示在本地客户端窗口 xff0c 可以在服务端通过鼠标键盘控制远端机器
  • javascript:数据结构——栈

    栈结构的概念 是一种 后进先出 的数据结构 栈作用 在编程语的编译器和内存中保存变量 方法调用 栈操作 栈结构操作的方法 push xff1a 进栈 pop xff1a 出栈 peek xff1a 检查栈顶元素 isEmpty xff1a
  • javascript:数据结构——队列

    什么是对列 是一种 先进先出 的数据结构 xff08 如排队候车 xff0c 肯定是先排队的人先上车 xff09 实际用处 如打印机 队列操作 使用数组实现队列结构 使用类封装队列操作 span class token keyword co
  • javascript:数据结构——链表

    什么是链表 xff1f 链表是有序的列表 xff0c 链表是以节点的方式来存储 xff0c 是链式存储 每个节点包含item域 xff0c next指针 xff08 指向下一个节点 xff09 xff0c 即就是链表中的每一个元素都带有下一
  • JavaScript中的事件循环机制

    我们知道JavaScript语言是单线程的 xff0c 至于为啥是单线程 xff1f 假设有两个线程 xff0c 一个在页面上新增一个div xff0c 另一个线程在页面上删除div xff0c 那最终听谁的 xff1f 那JavaScri
  • 彻底搞懂递归

    什么是递归 xff1f 简单的来说 xff1a 递归就是函数自己调自己 下来我们来看几个例子让你彻底搞懂递归 一 计算n的阶乘 顾名思义阶乘就是所有小于及等于该数的正整数的积 xff08 0和1的阶乘是1 xff09 下面我们先用循环的方式
  • javascript:求最大公约数的几种方式

    什么是最大公约数 xff1f 几个数所共有的约数中最大的一个 即可以整除这几个数的最大的数 叫做这几个数的最大公约数 方法一 xff1a 计算机思维 span class token keyword function span span c
  • javascript深浅拷贝的实现和区别

    什么是深拷贝和浅拷贝 所谓拷贝就是赋值 xff0c 把a的值赋值给b 区别 最明显的区别就是 xff1a 把a的值赋值给b xff0c 然后你改变b xff0c 看a会不会有变化 xff0c 如果a变了那就是浅拷贝 xff0c 如果a没有变
  • javascript判断数据类型的几种方法

    首先先回顾一下javascript的数据类型都有哪些 xff1f 基本数据类型 xff1a number xff0c undefined xff0c boolean xff0c string xff0c null 复杂数据类型 xff1a
  • O-ComTool修复中文显示问题

    O ComTool Pro我个人认为是一款很好用的串口调试软件 xff0c hex与ascii互转 xff0c 报文格式化 xff0c 打印窗口停留 xff0c 加载发送文件 xff0c 内容复制等细节体验很棒 xff0c 但是有一个问题体
  • 类的关系(泛化, 实现,关联,聚合,组合,依赖)

    类的关系 在UML类图中 xff0c 常见的有以下几种关系 泛化 xff08 Generalization xff09 实现 xff08 Realization xff09 xff0c 关联 xff08 Association xff0c
  • XMLHttpRequest获取后台response返回的数据

    XMLHttpRequest获取后台response返回的数据 开发MVC网站的过程中遇到令人头疼的bug 在js中通过XMLHttpRequest获取后台返回的数据竟然是当前页面的Html代码 xff01 xff01 xff01 后台Co
  • npm 安装 chromedriver依赖超时,导致项目打包进程失败

    npm 安装 chromedriver依赖超时 xff0c 导致项目打包进程失败 网络上大部分解决方式是npm 安装换源 xff1a npm install chromedriver chromedriver cdnurl 61 http
  • 12个Visual Studio调试效率技巧

    在这篇文章中 xff0c 我们假定读者了解VS基本的调试知识 xff0c 如 xff1a F5 开始使用调试器运行程序F9 在当前行设置断点F10 运行到下一个断点处F5 从被调试的已停止程序恢复执行F11 步进到函数内 xff08 如果当
  • 思岚RPLIDAR A2激光雷达使用及问题解决

    思岚RPLIDAR A2激光雷达使用及问题解决1 下载源码第一步 xff0c 下载雷达源代码 xff0c 第一种方法是输入下列网址 xff1a http slamtec com rplidar a2 download xff0c 界面有雷达

随机推荐

  • 雷达调制

    雷达通常有两种基本类型 xff1a 连续波 xff08 CW xff09 雷达和脉冲雷达 连续波雷达发射连续波 xff0c 并且发射的同时可以接收反射回来的的回波信号 xff0c 即收发可以同时进行 脉冲雷达间歇式发射脉冲周期信号 xff0
  • 各类优化算法综述

    目录 优化算法综述 数学规划法 精确算法 xff08 exact algorithm xff09 启发式 VS 元启发式 启发式算法 元启发式算法 What is the difference between heuristics and
  • Qt与halcon联合开发实现基于形状的模板匹配

    目录 前言 一 基于形状的模板匹配是什么 xff1f 二 具体实现 1 算子介绍 2 关键代码实现 总结 前言 第一次在CSDN写博客 xff0c 准备写一个简单的形状匹配算子的用法及实现的介绍 一 基于形状的模板匹配是什么 xff1f 基
  • VMware Wrokstation Ubuntu18虚拟机遇到ip能ping通,但是浏览器却无法访问情况

    VMware Wrokstation Ubuntu18虚拟机遇到ip能ping通 xff0c 但是浏览器却无法访问情况 解决方案 xff1a 安装防火墙 xff0c 先查询端口有没有权限 xff0c 没有就添加端口外部访问权限 xff0c
  • 使用码云、github时常用的git命令

    常用命令 边学习边总结的命令 xff0c 可能不全 xff0c 单纯做个笔记用 git branch 查看当前分支git checkout b branchname 创建branchname新分支并切换到新分支git push u orig
  • 常用涡识别方法的Tecplot实现(Q准则、λ2 准则、delta准则、Omega准则)

    常用涡识别方法的Tecplot实现 xff08 Q准则 2 准则 delta准则 Omega准则 xff09 0 前言0 1 欧拉法涡识别0 2 Tecplot中的涡识别 1 涡量法2 Q方法2 1 2D的Tecplot公式2 2 3D的T
  • FreeRTOS源码学习_01-任务调度器-2021-10-28

    FreeRTOS源码学习 01 任务调度器 一 写在前面二 源码分析1 开始任务调度 xff1a void vTaskStartScheduler 2 创建软件定时器任务 xff1a 3 检查链表队列是否有效 xff1a prvCheckF
  • ZeroMQ 学习笔记 —— PUB SUB 订阅模式

    ZeroMQ的订阅服务器 include lt zmq h gt include lt iostream gt include lt unistd h gt using namespace std int main void ctx 61
  • 将Mircrosoft Store下载的Ubuntu安装到指定位置方法,同时解决“你需要来自System的权限才能对此文件进行更改”问题

    一 概述 最近使用到WIndows的WSL功能 xff0c 需要安装ubuntu这个子系统进行仿真环境搭建 xff0c 但是又不愿意使用虚拟机 xff0c 不太方便 在安装过程中发现本身就岌岌可危的C盘经常突然爆满 xff0c 经过检查发现
  • 本地安装WSL的发行版后,导出到另一台计算机安装的办法

    一 步骤 1 首先你要在你的计算机上安装成功了WSL子系统 xff0c 然后才能导出对应版本的tar文件 xff0c 复制到另一台计算机中进行安装 2 例如我的电脑安装了Ubuntu 20 04 5这个版本 xff0c 如图 xff1a 3
  • Pixhawk基础—认识Pixhawk

    Pixhawk简介 pixhawk是由3DR联合APM小组与PX4小组于2014年推出的飞控PX4的升级版 xff0c 它同时拥有PX4和APM两套固件和相应的地面站软件 该飞控是目前全世界飞控产品中硬件规格最高的产品 Pixhawk基础
  • 关于 adb命令编辑器中无法找到设备:error: device not found 问题的解决办法

    adb命令编辑器中无法找到设备 xff1a error device not found 问题原因解决办法问题来了 解决办法 今天接手一个施乐的设备 xff0c 想要连接到电脑上进行调试 xff0c 调试程序已写好 xff0c 准备用adb
  • LinearLayout中layout_weight属性占比计算方法

    假设一个布局中有三个子布局 xff0c 三个子布局的layout weight属性占比我2 3 4 此时有两种情况 xff1a 1 wrap content比较简单 直接就按比例得了 2 fill content match content
  • 利用POI实现json数据的Excel导出

    首先需要POI jar包 xff0c 相关jar包已经分享到个人网盘 xff0c 有需要可以进行下载 链接 xff1a https pan baidu com s 1N9Cc8UgHuHIMZbWfurmm3w 提取码 xff1a cc6p
  • 基于springboot的简单restful服务demo

    这篇文章主要是本人学习springboot时一个简单的测试demo xff0c 仅供参考 springboot的介绍 xff1a 由Pivotal团队提供的全新框架 xff0c 设计的目的是简化spring新应用搭建的过程 xff0c 使用
  • leetcode刷题 Day23(LRU缓存机制)

    题目 xff1a 思路 xff1a java用LinkHashMap解决 xff0c 在LRUCache中获取缓存容量 xff0c 在put方法中 xff0c 难点在于怎么进行判断最新数据和最不常用的数据 xff0c 这里采取这种办法 xf
  • 野火&洋桃STM32开发版学习指导完整版

    该文章是我历时一个月整理总结而成 xff0c 专门针对想要通过野火 amp 洋桃STM32开发板入门stm32的读者 由于csdn编辑限制 xff0c 该学习指导只包含文字信息 如需查看含图片的完整版可进入我的博客下载页 完整版内容详实 x
  • sumo学习——sumo的路网介绍

    2 sumo路网 这里的记录的内容 xff0c 并不以如何绘制或者如何建立一个路网体系为主 xff0c 而是较为详细的介绍 xff0c 在sumo中是如何定义路网格式的 这里所有的内容都是来自于sumo的软件说明翻译 xff0c 其中部分夹
  • webpack之devtool

    关于Devtool 该选项控制是否以及如何生成源映射 官网上给出的可选值有 xff1a 其中一些值适合开发 xff0c 一些用于生产 对于开发 xff0c 您通常需要快速的Source Maps xff0c 以bundle的大小为代价 xf
  • 汽车UDS诊断详解及Vector相关工具链使用说明——总述

    1 什么是诊断 车辆在运行过程中 xff0c 不可避免地会发生一些故障 xff0c 为了确保行车安全 xff0c 我们要求车上的ECU能够实时监测部件的运行状态 xff0c 一旦发现异常情况 xff0c 能通过点亮报警灯等方式提示驾驶员 但