0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文搞懂UDS的各种NRC

jf_EksNQtU6 来源:嵌入式老林 2024-01-20 10:01 次阅读

01NRC介绍

当服务端收到诊断请求时,如果能执行则回复肯定响应,不能执行则回复否定响应;也有不给出响应的情况,就是抑制正响应(Suppress PositiveResponseMessageIndicationBit,简写为SPRMIB),通常来说,如果这个bit被置1,则ECU不会给出正响应(positive response)。

常用的NRC如下:

97b3dac0-b6b3-11ee-8b88-92fbcf53809c.png

这里要说一下NRC 0x22,有些客户要求很细,会将温度过高、温度过低、电压过高、电压过低、发动机转速过高等都要报对应的NRC,不在这些情况内的条件不满足就回复NRC 0x22,这样的话NRC 0x22和上面的NRC优先级就是一致的,就看哪个先满足就先回复哪个NRC。

也有些客户需求把温度过高、温度过低、电压过高、电压过低、发动机转速过高等所有的条件不满足都归类为NRC 0x22。

02NRC回复的优先级

不知道你们会不会经常把NRC回复的顺序搞混,总是不知道当有多个NRC可响应的时候,先回复哪个NRC。下面就来分享一下我的经验,当然这里的NRC优先级是参照ISO14229的,大部分车厂是也是参考这个来的,可能有个别NRC是客户定制,这种例外的按照客户需求来就行了。

NRC的优先级从高到低排列:

NRC 0x11 > 0x7F > 0x13 > 0x12 > 0x7E > 0x33 > 0x24 > 0x31 > 0x22 > 0x78

1)NRC 0x11和0x7F的区别:都是服务不支持,但0x11是整个服务不支持,而0x7F是在某个会话不支持,在其他服务下是支持的。举个例子:28服务,只支持在扩展会话下,但在默认会话下执行0x28服务,那此时回复的NRC就是0x7F。

2)NRC 0x11和0x12的区别:0x11是服务不支持,0x12是子功能不支持。这个还是比较好理解的。举个例子:19服务有很多子功能,假设客户不支持0A子功能,那执行19 0A就会回复0x12;假设客户需求不支持23服务,那执行23服务就回复0x11,而且不管你后面传的子功能参数对不对,长度对不对,都是回复0x11,因为0x11优先级最高(看标准0x21总线繁忙的NRC优先级是最高的,但没怎么用过)。

3)NRC 0x12和0x7E的区别:0x12是整个子功能不支持,而0x7E是在当前会话不支持。举个例子:19服务有很多子功能,假设客户需求不支持0A子功能,那执行19 0A就会回复0x12;假设10 02服务只在扩展会话下支持,但在默认会话下执行了,就会回复0x7E。

4)NRC 0x7F和0x7E的区别:0x7F是当前会话下服务不支持,0x7E是当前会话下子功能不支持。这两个没啥好说的,看具体情况,如果这两个都支持,则回复NRC 0x7F,因为0x7F优先级更高。

2.1 通用服务的NRC回复流程

这是ISO14229-1中的规范,这个NRC的回复优先级适用所有没有子功能的服务。从这个可看出回复NRC的顺序为:0x11 > 0x7F > 0x33。

mandatory:强制性的,也就是说这一列的NRC必须是按这个顺序来回复。

optional:可选择的,就是不一定有,可以选择性地由每个请求消息进行评估。例如出现总线繁忙时,就先回复NRC 0x21。

manufacture/supplier specific:车厂或主机厂规范,这是客户要求的,有些客户有特殊的需求,具体的按照客户要求来做就行。

97d17b48-b6b3-11ee-8b88-92fbcf53809c.png

2.2 带sub-function功能参数的服务

带sub-function参数的服务回复NRC的顺序,例如:$10、$11、$27、$28、$31、$85、$14、$19等

97e6a400-b6b3-11ee-8b88-92fbcf53809c.png

2.3 0x22服务回复NRC的顺序

0x22服务回复NRC的顺序如下图:

1)如果请求的DID不是客户支持的,要回复NRC 0x31,就不是0x12了。因为$22服务没有子功能。

2)如果请求的DID在当前会话不支持,也是回复NRC31,不是0x7E了。

总结:22服务里面没有NRC 0x12、0x7E,其他没有子功能的服务也是如此

9805c1c8-b6b3-11ee-8b88-92fbcf53809c.png

2.4 0x2E服务回复NRC的顺序

0x2E服务回复NRC的顺序如下图:

基本上和0x22服务一样,最后多一个NRC 0x72,判断最后把数据有没有写到内存中去,写内存失败了就报NRC 0x72。

98387834-b6b3-11ee-8b88-92fbcf53809c.png

2.5 0x14服务回复NRC的顺序

$14服务回复NRC的顺序如下图:

984f093c-b6b3-11ee-8b88-92fbcf53809c.png

2.6 0x31服务回复NRC的顺序

0x31服务的NRC回复顺序如下图:

986620fe-b6b3-11ee-8b88-92fbcf53809c.png

03物理寻址和功能寻址回复NRC

3.1 物理寻址但带sub-function服务

分成抑制正响应(SPRMIB = 1),没有抑制正响应(SPRMIB = 0)两种情况。

1)NRC 0x31不管SPRMIB有没有置位,在参数不对或不支持的情况下都回复NRC 0x31;

2)在SID不支持时,SPRMIB没有置位,则回复NRC 0x11或0x7F,看具体情况;但SPRMIB置位了,则一定回复NRC 0x11;

3)在sub-function不支持时,SPRMIB没有置位,则回复NRC 0x12或0x7E,看具体情况;但SPRMIB置位了,则一定回复NRC 0x12。

98a15eda-b6b3-11ee-8b88-92fbcf53809c.png

3.2 功能寻址但带sub-function服务

功能寻址和物理寻址又有点不一样了。

98c6339a-b6b3-11ee-8b88-92fbcf53809c.png

请求的服务是功能寻址时,NRC为:服务不支持(0x11),当前会话服务不支持(0x7F),子功能不支持(0x12),当前会话子功能不支持(0x7E),请求超出范围(0x31),不管SPRMIB是否置位,都不会回复NRC。但前提是没有回复NRC 0x78的情况下。括号里面那句话很重要

也就是说,如果请求的是功能寻址,且NRC是上面5个中的任意一个,假设是NRC 0x7F,但是服务端先回复了一个NRC 0x78,那么服务端最后就必须回复NRC 0x7F了。

98d9f8da-b6b3-11ee-8b88-92fbcf53809c.png

这里再讲一个NRC 0x78的,原文如下:

当NRC 0x78被使用了,服务端最终都要给一个响应(正响应或否定响应),和SPRMIB的值是否置位无关,和是否是功能寻址,且NRC为0x11,0x7F,0x12,0x7E,0x31无关。

简单来说就是:

1)当服务端回复了NRC 0x78,即使SPRMIB是置位的也要回复正响应;

2)当服务端回复了NRC 0x78,即使发送的请求是功能寻址,且NRC为0x11,0x7F,0x12,0x7E,0x31,也要回复对应的NRC

98f811a8-b6b3-11ee-8b88-92fbcf53809c.png

举个例子:请求了10 02服务,10 82,且服务端回复了NRC 78,那是要给正响应的。

TX 02 10 82 00 00 00 00 00

RX 03 7F 10 78 AA AA AA AA

RX 06 50 01 00 32 01 F4 AA

3.3 物理寻址但没有sub-function服务

不知道你们一开始看到这个表格一开始是否有个疑问,这里为啥没有SPRMIB是否置位的区分?因为这些是适用没有子功能的服务啊,没有子功能哪来的SPRMIB。

物理寻址没有子功能的服务请求,该回复正响应的就回复正响应,回复NRC就NRC,没有啥特殊情况。

991bd566-b6b3-11ee-8b88-92fbcf53809c.png

3.4 功能寻址但没有sub-function服务

功能寻址没有子功能的服务请求时,服务不支持,参数不对,都不回复NRC,即无响应。

992d0f52-b6b3-11ee-8b88-92fbcf53809c.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 发动机
    +关注

    关注

    33

    文章

    2436

    浏览量

    69153
  • ecu
    ecu
    +关注

    关注

    14

    文章

    880

    浏览量

    54400
  • 服务端
    +关注

    关注

    0

    文章

    66

    浏览量

    6985

原文标题:一文搞懂UDS的各种NRC

文章出处:【微信号:谈思实验室,微信公众号:谈思实验室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Labview 基于CAN UDS烧录Hex文件

    本帖最后由 xu391600076 于 2021-8-11 13:18 编辑 1. Hex文件读取解析并计算CRC-32校验码2. UDS服务通讯3. UDS刷写逻辑过程复制下面这段话,打开闲
    发表于 08-11 11:41

    UDS诊断命令备忘录

    UDS实践性强,逻辑复杂,很多服务非要体验过次才能理解,导致包括我在内的初学者感觉晦涩难懂,不明觉厉,因此将自己的理解写下来、整理下来,与君共勉。零、UDS诊断命令备忘录、简介
    发表于 08-26 16:09

    搞懂UPS主要内容

    导读:UPS是系统集成项目中常用到的设备,也是机房必备的设备。本文简单介绍了UPS的种类、功能、原理,品质选择与配置选择方式,基础维护等相关的内容。搞懂UPS本文主要内容:UPS种类、功能
    发表于 09-15 07:49

    搞懂开关电源波纹的产生

    参考搞懂开关电源波纹的产生、测量及抑制开关电源纹波的产生上图是开关电源中最简单的拓扑结构-buck降压型电源。随着SWITCH的开关,电感L中的电流也是在输出电流的有效值上下波动的。所以在输出端
    发表于 12-30 08:31

    STM32 Bootloader UDS技术要点是什么?

    STM32 Bootloader UDS技术要点是什么?
    发表于 02-11 07:26

    OBDII与UDS的区别是什么

    PrimaryECU在已经开发完UDS诊断的基础上增加OBD II诊断、OBD II与UDS的区别?这里主要介绍在诊断开发上面OBD II与UDS的区别,此外为了方便描述,下文中用O
    发表于 02-23 06:55

    搞懂几种常见的射频电路类型及主要指标

    搞懂几种常见的射频电路类型及主要指标。
    发表于 07-27 10:26 9次下载
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b>几种常见的射频电路类型及主要指标

    看懂UDS协议栈中的时间参数

      UDS 协议是道路车辆通用诊断规范的简称,目前主要应用在商用车电气零部件系统中,各个电气子系统基于该协议与外部诊断设备进行数据交互,从而实现程序更新、故障读取等功能。完整的协议栈包含了多个
    发表于 04-02 17:12 1次下载

    搞懂跳线架与配线架区别别再搞混了

    说起网络布线,不得不提跳线架 配线架 这些产品,很多人会把跳线架和配线架搞混,搞懂跳线架与配线架区别别再搞混了,下面跟着科兰小编起来了解
    的头像 发表于 05-19 11:27 1734次阅读

    UDS基础知识介绍

    UDS(Unified Diagnostic Services 统的诊断服务)是种通用的诊断服务标准,用于汽车电子控制单元(ECU)的诊断和调试。
    的头像 发表于 05-30 10:57 1.3w次阅读
    <b class='flag-5'>UDS</b>基础知识介绍

    UDS常用诊断服务

    UDS诊断包括6大类,26种服务,每种服务都有自己独立的ID,即SID(Service Identifier) 常见NRC码 什么是NRC
    的头像 发表于 06-12 10:36 1.1w次阅读
    <b class='flag-5'>UDS</b>常用诊断服务

    搞懂配线架相关知识

    配线架在综合布线中起到整理各类线缆的作用,不光能提供个整洁的环境,对于线缆的寿命和效果也是很有帮助的,下面就跟着科兰通讯小编一起来搞懂配线架相关知识。 配线架套什么定额 配线架套用综合布线中的机柜
    的头像 发表于 08-04 10:02 1365次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b>配线架相关知识

    基于MM32F0140的UDS Bootloader学习笔记

    基于MM32F0140的UDS Bootloader学习笔记
    的头像 发表于 10-30 17:11 715次阅读
    基于MM32F0140的<b class='flag-5'>UDS</b> Bootloader学习笔记

    汽车UDS协议栈与XCP协议栈

    UDS协议栈 汽车UDS协议栈是种用于汽车电子控制单元(ECU)之间进行诊断和通信的标准协议。UDS(Unified Diagnostic Services)协议定义了
    的头像 发表于 10-27 16:35 4025次阅读
    汽车<b class='flag-5'>UDS</b>协议栈与XCP协议栈

    UDS之29服务:认证服务

    汽车工业的很多领域都有严格的国际标准,其中针对车载诊断的ISO14229规定了车载诊断服务的通用需求(UDS),UDS主要应用于OSI模型的应用层,UDS协议根据功能的不同定义了26种诊断服务
    的头像 发表于 11-30 08:24 2060次阅读
    <b class='flag-5'>UDS</b>之29服务:认证服务