上篇主要分享了一些基本概念和响应规则,里面提到了否定响应码,也提到了ISO14229-1的附录A是一张否定响应码的表格,里面详细介绍了否定响应码的具体含义。那么在什么时候给出什么样的否定响应码,这篇里会详细说一说。

对于所有的诊断请求,处理流程会分为两部分,第一部分是通用规则,第二部分是每个服务自身特有的规则。当然有些服务是没有第二部分的,比如10会话模式控制服务。

要注意的是,上篇文章提到的带子功能和不带子功能,在否定响应的规则里,这个也会产生影响,即其所应用的规则也会有部分不同。

下面分章节对响应的处理流程进行说明。

1.所有服务通用响应规则

这幅流程图的起始位置是收到诊断请求,左中右分成三类,分别是强制的、可选的和自定义的,含义很好理解,但是强制的部分也会因为某些功能不具备而不需要检查,例如NRC34,如果不支持认证的功能,就不需要检查,所以也不需要支持响应这个NRC,开发的时候这段逻辑直接默认OK就好。可选的NRC表示可以根据实际情况支持或者不支持,而OEM或者supplier定义的部分则是OEM或supplier根据自己的需求定义一些NRC规则,这些NRC可以是自定义的也可以是附录A的清单里的。

可选的里面特别注意的有38和39这两个,如果支持安全子层,那么就需要这两个NRC。至于安全子层是什么,后续会在84服务的分享里进行说明(开始挖坑)。

其他的下面简单解释一下:

①NRC21:当接受到请求时,有其他设备在之前请求的服务还没执行完,那么需要给出这个否定响应,代表服务端在忙,无法处理,直接拒绝的当前的请求。

②NRC11:如果服务端不支持请求里面包含的服务,需要给出这个否定响应。

③NRC7F:如果在当前会话模式不支持请求里包含的服务,注意是当前的会话模式,需要给出这个否定响应。例如在默认会话模式是不支持27服务的,如果收到了27服务的请求,则回复此NRC。

④NRC33:如果请求的服务需要先通过安全访问认证(27服务)才可以执行,但是当前的状态是没有经过安全访问的,这时候服务端就需要给出这个否定响应来表明客户端需要先经过安全访问认证才可以执行。

流程走到最后,分成了两个分支,一个是带子功能的,一个是不带子功能的。带子功能的,后面还有一部分通用的规则,而不带子功能的则直接进入到对应服务里的响应规则,针对不带子功能的,会在后续每个服务里进行详细说明。这里需要注意一个特殊的说明,就是带子功能的这个分支是不包含31服务的,为什么呢,因为31服务格式的特殊性,需要检查的内容和检查顺序与普通带子功能的服务是不一样的,后续31服务分享的时候会有专门的否定响应规则说明。

2.带子功能的服务通用响应规则

带子功能的服务,在执行完所有服务的通用规则后,会执行上图所示的响应规则。

下面,按照图示的顺序,对每个NRC所对应的情况进行简单说明:

①NRC13:当检查到请求的数据长度和所请求服务所要求的长度不一致时,需要给出这个NRC,这一步的长度指的是最小长度,仅包含服务ID和子功能两个字节,即长度小于两个字节,报错。当然不要误会NRC13仅对最小长度有效,在每个服务的检查内容里,也会有标准长度的检查要求,过长也是会响应NRC13的,具体看后面服务的介绍吧,这里不单独距离说明了。

②NRC12:如果服务端不支持请求里面包含服务的子功能,需要给出这个否定响应。

③NRC34:这里的NRC34的情况同上一节,不同点在于这里是检查子功能的时候触发的,而非服务。

④NRC7E:如果在当前会话模式不支持请求里包含服务的子功能,注意是当前的会话模式,需要给出这个否定响应。例如在扩展会话模式下不支持27服务的03子功能,收到该请求时就需要响应NRC7E。

⑤NRC33:如果请求服务的子功能需要先通过安全访问认证(27服务)才可以执行,但是当前的状态是没有经过安全访问的,这时候服务端就需要给出这个否定响应来表明客户端需要先经过安全访问认证才可以执行。

⑥NRC24:有些服务的子功能有顺序要求,例如27服务需要先请求种子然后才能发送密钥,请求种子和发送密钥是通过子功能来进行区分的,这时候如果没有先发送请求种子而直接发送了密钥,就会响应NRC24。

以上就是诊断的一些通用NRC响应规则,到这里诊断的响应规则分享完毕,欢迎大家关注后续的分享。

UDS诊断系列链接汇总_ChenglimK的博客-CSDN博客

UDS诊断系列之三 ISO14229协议介绍(下)相关推荐

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

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

  2. UDS诊断系列之十一 输入输出控制(2F)服务 上

    应粉丝要求,先来更新输入输出控制(2F)服务的内容. 输入输出控制(2F)服务顾名思义就是对输入和输出内容进行控制,这里的输入和输出一般指的是控制器的输入和输出引脚或者设备,例如仪表的各种灯就是仪表控 ...

  3. UDS诊断系列之四 诊断请求和响应

    这一篇重点说一下诊断的请求和响应所包含的信息以及格式要求. 一.诊断数据单元 诊断数据单元一般包含地址信息和应用数据.应用数据长度,其中应用数据会包含服务ID.子功能参数(如果有)和应用数据参数: 1 ...

  4. UDS诊断系列之五 诊断会话控制(10)服务

    诊断会话控制服务,其服务ID是0x10,主要功能为控制服务端的会话模式的切换. 一.诊断会话模式 诊断会话模式分为默认会话模式和非默认会话模式,不同的会话模式所支持的功能.权限.时间参数等等是不一样的 ...

  5. UDS诊断系列之十 DTC控制(85)服务

    DTC控制服务的主要作用是控制DTC的状态更新. 一.响应规则 DTC=diagnostic trouble code,DTC的状态是故障信息中的一个字节,用来表示故障当前的状态是正在发生还是仅仅发生 ...

  6. UDS诊断系列介绍08-19服务

    本文框架 1. 系列介绍 1.1 19服务概述 1.2 DTC故障码定义 1.3 DTC状态位 2. 19服务常用子服务 2.1 19 01服务 2.2 19 02服务 2.3 19 04服务 2.4 ...

  7. UDS诊断 - DOIP和以太网协议关系

    DoIP技术:UDS诊断服务,通过TCP/IP及以太网来进行车辆诊断,协议定义在ISO 13400. ISO13400涉及到的主要分布在传输层.网络层.数据链路层.物理层四层中. 物理层: ISO13 ...

  8. UDS诊断系列介绍07-2E服务

    本文框架 1. 系列介绍 2E服务概述 2. 2E服务请求与应答 2.1 2E服务请求 2.2 2E服务肯定响应 2.3 2E服务否定应答 3. Autosar系列文章快速链接 1. 系列介绍 UDS ...

  9. UDS诊断系列介绍13-31服务

    本文框架 1. 系列介绍 1.1 31服务概述 2. 31服务请求与应答 2.1 31服务请求 2.2 31服务正响应 2.3 31服务否定响应 3. Autosar系列文章快速链接 1. 系列介绍 ...

最新文章

  1. 【Java 语言】Java 多线程 一 ( 线程基础 : 线程启动 | 线程停止 | 线程暂停 | 线程优先级 | 守护线程)
  2. 附实例!图解React的生命周期及执行顺序
  3. pku 3020 Antenna Placement
  4. boost::signals2模块实现将参数从信号调用传递到槽的示例程序
  5. HTTP 302报文
  6. linux编译openssl
  7. C#类类型“.NET技术”
  8. [机器学习笔记]Note15--大规模机器学习
  9. Python设置默认语言编码
  10. ExtJs2.0学习系列(9)--Ext.TabPanel之第一式
  11. Linux中的redis集群搭建
  12. 在JWT令牌转获取私有化声明时出错,java.util.LinkedHashMap cannot be cast to cn.mar.crm.sys.entity.SysUser
  13. busybox devmem 直接获取、修改内存信息
  14. oracle 实现HA,使用KeepAlived实现HAProxy高可用
  15. [转载] Python的变量与常量与基本命名规则
  16. java三星题之_JAVA三星题之playing a TicTacToe game
  17. 【HAVENT原创】NodeJS 短网址开发(调用第三方接口)
  18. php如何去重,php二维数组如何去重?(代码示例)
  19. git remote: error: hook declined to update
  20. c语言人民日报排版的代码,人民日报都在玩的排版黑科技,教你1分钟上手!

热门文章

  1. leetcode 51. N 皇后
  2. 终年32岁的传奇数学家,为何让硅谷领袖们集体落泪致敬?
  3. flowable6.0-用户任务说明
  4. MindSpore论坛十一月活动宣传
  5. 思科互联网络综合应用课程实验
  6. TAGE-SC-L预测器 “TAGE-SC-L Branch Predictors”(2016)
  7. c语言 编程结束怎么表示,c语言开头(c语言编程开头和结束代码)
  8. 讲述下我在EBC金融外汇平台交易的真实体验
  9. 初学者LDPC码扫盲
  10. C语言公制长度转英制长度,英制换算(英制长度转换公制长度换算)