什么是UDS?

UDS全称为Unified Diagnostic Services,统一的诊断服务。由ISO-14229系列标准定义。

诊断通信的过程从用户角度来看非常容易理解,诊断仪发送诊断请求(request),ECU给出诊断响应(response),而UDS就是为不同的诊断功能请求和响应之间定义了统一的内容和格式。位于OSI模型中的应用层。

作为汽车诊断通信重要构成部分,UDS在诊断中作用主要体现在以下几个方面

  1. 在诊断故障码中运用
    读取当前故障,历史故障,读取故障发生时环境信息,清除故障码
  2. 数据传输
    读取各种参数,下线配置
  3. 控制例程
    下线测试,身份认证,控制器reset等
  4. 上传下载
    刷新常用的诊断服务

Diagnostic request的格式:

Diagnostic request的格式可以分为两类:一类是拥有sub-function的,另一类是没有sub-function的,如下面两张图所示。Service ID(以下简称SID)的长度固定为1个字节,代表了这条诊断命令执行的什么功能。sub-function的长度也是1个字节,它通常表示对这个诊断服务的具体操作,比如是启动、停止还是查询这个诊断服务。而后面的parameter则根据各个诊断服务的不同具有不同的内容,长度和格式并没有统一规格,它用于限定诊断服务执行的条件,比如某个诊断服务执行的时间等。parameter的一个重要应用是作为标识符,标识诊断请求要读出的数据内容。

有一点要补充的是,其实sub-function严格来说是7个bit,而不是1个byte,因为它的最高位bit被用于抑制正响应(suppress positive response,SPR),如果这个bit被置1,则ECU不会给出正响应(positive response); 如果这个bit被置0,则ECU会给出正响应。这样做的目的是可以告诉ECU不要发不必要的response,从而节约通信资源。

Diagnostic response的格式:

Diagnostic response分为positive和negative两类。positive response意味着诊断仪发过来的诊断请求被执行了,而negative response则意味着ECU因为某种原因无法执行诊断仪发过来的诊断请求,而无法执行的原因则存在于negative response的报文中。

除了UDS之外也有其它的通信协议,比如OBD(用于汽车法规排放相关协议)。基于CAN的UDS俗称UDSonCAN,而基于K线的UDS目前很少见。对于UDS和OBD的通信结构如下图:

positive response的格式如上图所示,也基本上是由三部分组成,其中的response SID这个字节作为诊断请求的echo,它等于SID + 0X40。后面的两个部分则视具体的诊断服务而定。

negative response的格式固定为3个字节,第一个字节为0x7F,第二个字节是被拒绝掉的SID,第三个字节是这个诊断服务无法被执行的原因。下面这张图列举了部分原因代码,比如,如果ECU给出7F 22 13这个negative response,则说明22这个服务因为诊断请求数据长度不对的原因无法执行。

诊断通信的过程就是诊断仪和ECU交换数据,前者发的是request,后者发的是response,而UDS最重要的作用就是定义了这些request和response的格式和内容。

通讯机制

基于CAN的UDS俗称UDSonCAN,而基于K线的UDS目前很少见。下面是UDS通讯结构图:


UDS特点:UDS为事件驱动型,不会主动告诉外部信息,一问一答的形式,如诊断仪发出指令,UDS回复。

常用的诊断服务

下面来简单梳理一些服务的格式。

10服务:DiagnosticSessionControl

10服务的主要功能为ECU诊断状态控制。

常用的sub-function有:

0x01:defaultSession(ECU上电之后,默认状态)–默认会话

0x02:ProgrammingSession(这个session中可以进行软件刷写的一系列诊断服务)–编程会话

0x03:extendedDiagnosticSession(在这个session中可执行较多的诊断服务)–扩展回话会话注意:10 指令中不同会话的转换是按照上图的流程来的 不能随意切换。如默认会话下不能直接进入编程会话

11服务:电控单元复位


11 01 : hard Reset (simulates the power-on/start-up sequence typically performed after a server has been previously disconnected from its power supply)(模拟通常在服务器之前与其电源断开连接后执行的开机/启动顺序)

11 02 :keyOffOnReset(similar to the driver turning the ignition key off andback on)(同时关闭和重新打开点火钥匙(类似于司机把点火钥匙关掉再打开))

11 03 :soft Reset(causes the server to immediatelyrestart the application program if applicable)(使服务器立即启动应用程序(如果适用) )

27服务:SecurityAccess安全访问

对于安全级别稍微高一些的诊断服务,需要执行27这个安全访问诊断命令,进行一个简单的身份验证。

完成27服务有以下步骤:

1,诊断仪向ECU请求“请求种子”(通常是一个与时间相关的伪随机数);

2,ECU向诊断仪发送“反馈关键字”;

3,诊断仪向ECU发送“Key” (根据反馈关键字和一个本地的密码进行计算得来)

4,ECU判断诊断仪发来的“Key”是否有效

下面举个解锁的例子:

诊断仪发送:27 05

ECU响应 : 67 05 01 01 01(关键字是 01 01 01)

诊断仪发送 : 27 06 02 03 04(key值是02 03 04,seed是 01 01 01,假设本地密码为01 02 03,而算法就是将密码与seed相加)

ECU验证成功 : 67 06

此时ECU就处于unlocked的状态了,那些被保护起来的诊断服务和诊断数据可以被操作了。

28服务:CommunicationControl

该服务用于打开/关闭某些类别的报文的发送/接收。

sub-function:

0x00enableRxAndTx (激活接收和发送)

0x01enableRxAndDisableTx(激活接收和关闭发送)

0x02disableRxAndEnableTx(激活发送和关闭接收)

0x03disableRxAndTx(关闭接收和发送)

communicationType:

0x1:代表普通应用报文;

0x2:代表网络管理报文;

0x3:代表普通应用报文和网络管理报文。

14服务:ClearDiagnosticInformation

14服务主要功能为删除存储在ECU中的DTC

sub-function用于标识将要被删除的DTC种类,UDS规定用FFFFFF表示所有种类的DTC

例 :诊断仪发送:14 FF FF FF(清除所有种类的DTC)

    ECU响应: 54(给出positiveresponse)

85服务:ControlDTCSetting

该服务用于控制ECU的DTC存储。

sub-function: 0x01 : on 0x02 : off

19服务:ReadDTCInformation

19服务主要功能为读取存储在ECU中的DTC

sub-function

0x01用于读取符合特定条件的DTC数量。

0x02用于读取符合特定条件的DTC列表。

0x06用于读取某个DTC及其相关的环境数据。

Parameter

Parameter是指DTC的status。

bit0 表示这个DTC是active的还是passive的;

bit4表示这个DTC是否已经被confirm了,如果DTC的状态是confirm,则说明该DTC已经被ECU存储下来了。

比如:

19 02 08这个命令的用途,就是读取所有状态为confirm的DTC的数量。

31服务:RoutineControl

31服务是调用ECU内置的一些操作序列的接口。

sub-function

启动(0x01)

停止(0x02)

查询结果(0x03)

routineControlOptionRecord,用于标识routine执行时所需要的参数,由各家自定义它的内容

例如,假设用0x0801这个ID来代表检查ECU是否满足软件刷写条件(比如车速、转速为0,KL15接通等)的routine。

诊断仪向ECU发送31 01 08 01即可启动0x0801这个routine。

还有很多诊断服务,常用的是这些,持续更新~

UDS诊断基础知识简介-ISO14229相关推荐

  1. Linux中文件描述符1,linux内核中的文件描述符(一)--基础知识简介

    原标题:linux内核中的文件描述符(一)--基础知识简介 Kernel version:2.6.14 CPU architecture:ARM920T Author:ce123(http://blo ...

  2. SpringCloud(1) 架构演进和基础知识简介

    一.传统架构演进到分布式架构 简介:讲解单机应用和分布式应用架构演进基础知识 (画图) 高可用 LVS+keepalive 1.单体应用:开发速度慢.启动时间长.依赖庞大.等等 2.微服务:易开发.理 ...

  3. IT:后端进阶技术路线图(初级→中级→高级)、后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介、技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略

    IT:后端进阶技术路线图(初级→中级→高级).后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介.技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略 目录 后端 ...

  4. Windows通用克隆系统入门基础知识简介

    Windows通用克隆系统入门基础知识简介 这里的Windows是指微软的Windows 2000/XP/2003(后文中未经说明的,凡是Windows均指这三种系统):所谓的通用克隆,俗名万能克隆, ...

  5. linux内核中的文件描述符(一)--基础知识简介

    linux内核中的文件描述符(一)--基础知识简介 Kernel version:2.6.14 CPU architecture:ARM920T Author:ce123(http://blog.cs ...

  6. IC卡(智能卡)基础知识简介

    目录 IC卡(智能卡)基础知识简介 1.何为IC卡(智能卡) 2.IC卡的相关规范 3.智能卡如何管理其存储器 4.智能卡如何对信息存取过程进行控制 IC卡(智能卡)基础知识简介 IC卡(智能卡)基础 ...

  7. 计算机电源的输出电压包括,计算机电源的基础知识简介

    计算机电源的基础知识简介 1.简述计算机机箱的分类. 机箱根据不同的分类别标准有不同的分类,首先根据机箱的外形可以把机箱分为卧式和立式两种. 按照机箱的尺寸又可以分为超薄.半高.3/4高.全高等4种类 ...

  8. InSAR基础知识简介

    InSAR基础知识简介 合成孔径雷达干涉测量 雷达相位 跨轨干涉仪&沿轨干涉仪 地形干涉测量 干涉图解译 相干 1.配准 2.去除平地相位 3.大气延迟相位 4.多视和滤波处理.去除散斑 5. ...

  9. 101-相机基础知识简介

    101-相机基础知识简介 一.相机主要部件 二.色彩滤镜矩阵(Color Filter Array) Quad Bayer 备忘 简单介绍Camera的相关术语与原理 一.相机主要部件 Camera主 ...

  10. UDS诊断系列之二 ISO14229协议介绍(上)

    ISO14229系列,涵盖了UDS的服务定义以及在各车载总线上的一些特殊应用指导,以及各总线类型所对应的下层协议要求,下面就是该系列中各协议所对应的内容清单. 协议编号 协议名称 协议内容 14229 ...

最新文章

  1. 不仅是 64 位 Android L 还有这 9 大亮点
  2. Android移动开发之【通往安卓的神奇之旅】基于回调的事件处理
  3. Android-PullLayout
  4. 深度学习 | Why and How:神经网络中的权重初始化
  5. 比机器人更优越的半机械昆虫,颜控党们会接受吗?
  6. 2020-02-09 改udev硬件配置策略,改ETHTOOL_OPTS 或改 `/etc/NetworkManager/dispatcher.d/20-ethtool`...
  7. python 2.7.9 安装beautifulsoup4
  8. Gitlab文件管理之把文档传到指定文件夹
  9. mt管理器小白破解之路-基础篇第一课
  10. 深度学习视觉领域常用数据集汇总
  11. 正则表达式(一)字符串匹配
  12. 蓝桥web模拟赛:时间管理大师
  13. OSChina 周四乱弹 ——丑到端水水更流,举杯浇丑丑更丑
  14. 鸡年生的男宝宝取什么名字好?为宝宝起名也有小技巧
  15. 如何将CVAT的docker镜像上传到华为云镜像中心SWR
  16. 2022年汽车驾驶员(中级)理论题库模拟考试平台操作
  17. 国家一级计算机等级考试 阴影效果的预设值为内部右上角,全国计算机等级考试一级练习题(1)解析...
  18. 贵阳c语言学习,贵阳市c语言编程
  19. 安卓 文本框怎么贴近边缘_flash怎么设置帧频-Adobe flash修改帧频的方法
  20. Performance性能测试工具

热门文章

  1. 黑塞矩阵和雅克比矩阵
  2. 个人微信api接口调用,微信好友收发消息
  3. Git下载安装及设置详细教程
  4. Maxwell简单使用
  5. vue uniapp如何实现横向滚动周历,横向滚动一周日历
  6. 论文的英文文献在哪找(除了知网)?
  7. Spring Boot LiveReload 插件使用
  8. MDK5软件入门之新建工程项目模板
  9. Yalmip最优化求解器+matlab | 教程(一)
  10. 15个Python游戏小项目