当前位置: 首页 > news >正文

ISO14229之概述

ISO14229之概述

  • 0、概述
  • 1、术语介绍
  • 2、诊断服务报文格式
  • 3、NRC定义描述

0、概述

        ISO-14229也称为UDS(统一诊断服务),是一个用于汽车行业诊断通信的需求规范,应用于OSI七层模型的应用层(第7层)。他只规定了与诊断相关的服务需求,并未涉及通信机制;所以,对于ISO-14229的使用是可以架设在各种网络上的,除了我们比较熟悉的CAN外,还可以基于LAN、FlexRay、串口等。在前面的一些文章里,我们也介绍了UDS中常用到的一些诊断服务(如19服务、34/36/37服务、31服务等)的使用;本文则主要介绍下UDS诊断服务的格式及NRC(错误响应码)的定义描述,作为基础补充。
        

1、术语介绍

        为便于后面对UDS诊断服务格式的介绍,我们先来介绍下涉及到的术语。

        (1)、Addressing Type (寻址方式)
        寻址方式指的是诊断消息的传递方式,有以下两种寻址方式:
        物理寻址(Physical),即1对1通信,用于知道确切的被诊断ECU的地址;
        功能寻址(Functional),即1对n通信,或者说广播发送,用于不知道确切的被诊断的ECU的地址,向一组或者全体ECU发送请求。
        例如,在我们ECU的升级过程中,预编程阶段的相关诊断报文(如通过85服务关闭DTC的更新、28服务关闭其他ECU的报文发送功能),一般会通过功能寻址的方式进行发送,广播式地通知车上其他ECU。在正式升级阶段则通过物理寻址方式,进行数据传输刷写。

        (2)、SID(Service Identifier)
        用以指代某个诊断服务的1字节无符号整数。例如会话模式控制的10服务、请求复位的11服务等。

        (3)、DID(Data Identifier)
        用以标识ECU中贮存的某个诊断数据单元2字节无符号整数。例如请求数据读取的22服务:22 F1 87中的"F1 87"。对于使用者来说DID屏蔽了具体实现细节,而将重点放在了数据本身。例如当我们要读取某个单元的诊断数据时,只要操作(读)对应的DID就可以,而不必通过数据的具体地址去操作。

        (4)、NRC(Negative Response Code)
        即1字节的无符号整数表示的错误响应码。它是诊断协议为每一种执行失败的诊断服务分配的失败原因代号,便于我们对服务请求失败原因的定位分析。

        (5)、Sub-Function(子服务)
        1字节的无符号整数表示的子服务。有些诊断服务可以支持不同的诊断子服务,Sub-Function就是用来定义这种子服务的,通过他将某一个服务细分为更为具体的服务。如10服务中的01、02、03,分别表示请求进入不同的会话模式;19服务中的04、06,分别表示请求的是快照还是扩展信息等。
        其格式如下,注意其最高位(bit7)是肯定响应应答禁止位;即当该位为1时,则该请求的肯定响应不需进行回复。剩余的7个位用于表示子功能的值,具体值对应的含义在各自服务中都有进行介绍的。这里只需注意该字节最高位这个"肯定响应应答禁止位"的作用即可。如10 83是请求进入扩展会话;且如果是肯定响应(50 03)则不需进行回复

在这里插入图片描述
        

2、诊断服务报文格式

        前面介绍完了涉及到的术语,接下来我们正式来说说UDS诊断服务报文的格式,将分为请求格式、响应格式(肯定响应/否定响应)来进行介绍。

        2.1、请求格式(Request)
        诊断服务请求格式可以分为以下2种:
        [SID] + [Sub-Function] + [Parameter]
        [SID] + [Parameter]
        即有无Sub-Function的区别;这里我们是把DID也归为Parameter了。Parameter可以是DID,可以是输入参数,可以是自定义的值,字节数目也是视具体要求而定。

        2.2、肯定响应(Positive Response)
        在请求服务成功执行后,被请求的ECU会返回一个肯定响应;根据通过请求的服务格式是否带有[Sub-Function],其格式一样可以分为以下的两种:
        [SID + 0x40] + [Sub-Function] + [Parameter]
        [SID + 0x40] + [Parameter]
        这里一样把DID也归为Parameter里。要注意前面ECU收到的服务请求格式是否有带[Sub-Function],有的话则需注意[Sub-Function]中的Bit 7肯定响应应答禁止位的值。若为1,注意此时是不需发送肯定响应的。我们来看看如下的例子

A、带<Sub-function>的格式:
 Request:   10 03 ------------ 请求进入扩展会话(10是SID,03是Sub-function)
 Response:  50 03 ------------ 请求成功,回复积极响应(50是SID+0x4003是Sub-function) 

 Request:   10 83 ------------ 请求进入扩展会话(10是SID,83是Sub-function,其中肯定响应应答禁止位有效)
 Response:  无应答,因为肯定响应应答禁止位(Sub-function的Bit7)有效

B、不带<Sub-function>的格式:
 Request:   22 F1 84 --------- 请求进入扩展会话(22是SID,F1 84 是DID,即Parameter)
 Response:  62 F1 84 01 ------ 请求成功,回复积极响应(62是SID+0x40,F1 84 是DID,即Parameter,01是ECU返回的数据,也是归于Parameter)

        2.3、否定响应(Negative Response)
        否定响应的格式比较固定,第一字节固定是0x7F,第二字节是之前请求服务的SID,第三个字节是错误响应码,指示具体错误响应的原因,这个NRC可以在协议中查到,并且不同的服务所支持的NRC也有规定。格式如下:
        [0x7F] + [SID] + [NRC]
        

3、NRC定义描述

NRC值定义描述
11ServiceNotSupported/服务不支持诊断仪发送的请求消息中服务标识符无法识别或不支持
12SubFunctionNotSupported/不支持子服务诊断仪发送的请求消息中子服务无法识别或不支持
13IncorrectMessageLengthOrInvalidFormat/不正确的消息长度或无效的格式请求消息长度与特定服务规定的长度不匹配或者是参数格式与特定服务规定的格式不匹配
21BusyRepeatRequest/重复请求忙表明ECU太忙而不能去执行请求。一般来说,在这种情况下,诊断仪应进行重复请求工作
22conditionsNotCorrect/条件不正确表明ECU的状态条件不允许支持该请求
24requestSequenceError/请求序列错误表明收到的是非预期的请求消息序列
25noResponseFromSubnetComponent/子网节点无应答表明ECU收到请求,但所请求的操作无法执行
26failurePreventsExecutionOfRequestedAction/故障阻值请求工作执行表明请求的动作因一故障原因而没有执行
31requestOutOfRange/请求超出范围请求消息包含一个超出允许范围的参数;或者是不支持的数据标识符/例程标识符的访问
33securityAccessDenied/安全访问拒绝诊断仪无法通过ECU的安全策略
35invalidKey/密钥无效诊断仪发送的密钥与ECU内存中的密钥不匹配
36exceedNumberOfAttempts/超出尝试次数诊断仪尝试获得安全访问失败次数超过了ECU安全策略允许的值
37requiredTimeDelayNotExpired/所需时间延迟未到在ECU所需的请求延迟时间过去之前诊断仪又执行了一次请求。
70uploadDownloadNotAccepted/不允许上传下载表明试图向ECU内存上传/下载数据失败的原因是条件不允许
71transferDataSuspended/数据传输暂停表明由于错误导致数据传输操作的中止
72generalProgrammingFailure/一般编程失败表明在不可擦除的内存设备中进行擦除或编程时ECU检测到错误发生
73wrongBlockSequenceCounter/错误的数据块序列计数器ECU在数据块序列计数序列中检测到错误发生
78requestCorrectlyReceived-ResponsePending/正确接收请求消息-等待响应表明ECU正确接收到请求消息,但是将执行的动作未完成且ECU未准备好接收其它请求
7EsubFunctionNotSupportedInActiveSession/激活会话不支持该子服务当前会话模式下ECU不支持请求的子服务
7FserviceNotSupportedInActiveSession/激活会话不支持该服务当前会话模式下ECU不支持请求的服务
92voltageTooHigh/电压过高当前电压值超过了编程允许的最大门限值
93voltageTooLow/电压过低当前电压值低于了编程允许的最小门限值

相关文章:

  • 需求增加也要走保证金流程——CSDN外包实践(62)
  • DBC文件解析
  • Sun中国工程研究院院长王星耀:开源策略是为了挤掉微软
  • 使用DBCView编辑DBC文件过程(一)
  • 使用DBCView编辑DBC文件过程(二)
  • DBC和EXCEL相互转换
  • 中小企业需要什么样的软件服务?
  • DBC文件编辑——基于DBCVIew4.3
  • 最近在研究的一个东东-移动证券
  • libcurl随笔
  • 2021-04-21
  • DBCExcel 上线了
  • 网页元素位置(scroll、client、offsetWidth等)获取、设置详解
  • OpenCV-Aruco模块调用 [python版]
  • 鼠标光标样式(cursor style)大全
  • 【Leetcode】104. 二叉树的最大深度
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • Android Studio:GIT提交项目到远程仓库
  • AWS实战 - 利用IAM对S3做访问控制
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • create-react-app项目添加less配置
  • JavaScript 基本功--面试宝典
  • java中的hashCode
  • JS变量作用域
  • Redux系列x:源码分析
  • 第2章 网络文档
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于组件的设计工作流与界面抽象
  • 浏览器缓存机制分析
  • 入手阿里云新服务器的部署NODE
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • mysql面试题分组并合并列
  • PostgreSQL之连接数修改
  • 阿里云移动端播放器高级功能介绍
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (pytorch进阶之路)扩散概率模型
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (论文阅读11/100)Fast R-CNN
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .gitignore文件—git忽略文件
  • .htaccess配置重写url引擎
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!