【车载开发系列】UDS诊断当中的NRC

本文详细解析了车载开发中UDS诊断中的NRC概念,包括NRC的不同类型、优先级排序、通用服务的回复流程,以及物理寻址和功能寻址时的NRC处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【车载开发系列】UDS诊断当中的NRC

【车载开发系列】UDS诊断当中的NRC

  • 【车载开发系列】UDS诊断当中的NRC
    • 一. NRC概念介绍
    • 二. NRC回复的优先级
      • 1)NRC 0x11和0x7F的区别
      • 2)NRC 0x11和0x12的区别
      • 3)NRC 0x12和0x7E的区别
      • 4)NRC 0x7F和0x7E的区别
    • 三. 通用服务的NRC回复流程
      • 1)mandatory
      • 2)optional
      • 3)manufacture/supplier specific
    • 四. 物理寻址和功能寻址回复NRC
      • 1)物理寻址但带sub-function服务
      • 2)功能寻址但带sub-function服务
    • 五. 常用NRC定义

一. NRC概念介绍

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

二. 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。29服务都不支持,那此时回复的NRC就是0x11。

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优先级更高。

三. 通用服务的NRC回复流程

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

1)mandatory

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

2)optional

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

3)manufacture/supplier specific

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

四. 物理寻址和功能寻址回复NRC

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。

2)功能寻址但带sub-function服务

请求的服务是功能寻址时,NRC为:服务不支持(0x11),当前会话服务不支持(0x7F),子功能不支持(0x12),当前会话子功能不支持(0x7E),请求超出范围(0x31),不管SPRMIB是否置位,都不会回复NRC。但前提是没有回复NRC 0x78的情况下。
也就是说,如果请求的是功能寻址,且NRC是上面5个中的任意一个,假设是NRC 0x7F,但是服务端先回复了一个NRC 0x78,那么服务端最后就必须回复NRC 0x7F了。

五. 常用NRC定义

10(General reject)
11(Service not supported)服务不支持
12(Subfunction not supported)不支持子服务
13(Incorrect message length or invalid format)不正确的消息长度或无效的格式
14(Response too long)响应过长
21(Busy repeat request)重复请求忙
22(Conditions not correct)条件不正确
24(Request sequence error)请求序列错误
25(noResponseFromSubnetComponent)子网节点无应答
26(failurePreventsExecutionOfRequestedAction)故障阻值请求工作执行
31(Request out of range)请求超出范围
33(Security access denied)安全访问拒绝
35(Invalid key)密钥无效
36(Exceed number of attempts)超出尝试次数
37(Required time delay not expired)所需时间延迟未到
7E(Subfunction not supported in active session)激活会话不支持该子服务
7F(Service not supported in active session)激活会话不支持该服务

### UDS NRC 11 错误代码解释 ISO 14229(Unified Diagnostic Services, UDS)协议定义了一系列负响应代码(Negative Response Codes, NRCs),用于描述ECU在处理诊断请求时遇到的错误情况。NRC 11表示子功能未支持/无效(Sub-function Not Supported/Invalid)。当客户端发送的服务请求中包含特定子功能参数,而服务器端不支持该子功能或者接收到非法值时会返回此错误码[^1]。 #### 子功能的概念 UDS服务通常由基础服务ID和服务特性的扩展部分组成,后者即为子功能字段。并非所有UDS服务都具备子功能特性;对于那些确实存在的情况,如果目标设备无法识别所指定的操作细节,则触发NRC 11响应。 #### 常见场景分析 - **配置差异**:不同车型或硬件版本可能实现的功能集有所区别,导致某些操作被拒绝执行并伴随NRC 11反馈。 - **输入验证失败**:即使理论上支持某项服务,但如果传递的数据超出允许范围同样会产生此类异常提示。 - **权限不足**:尽管较少直接通过NRC 11体现,但在特殊情况下也可能因缺乏相应授权而导致相同表现形式。 --- ### 示例代码片段用于模拟接收和解析UDS负响应 (Python) 下面提供了一段基于CANoe或其他工具开发环境下的伪代码样例,演示如何判断以及处理来自车辆网络中的NRC 11情形: ```python def interpret_udse_response(response_data): nrc_byte = response_data[2] # Assuming standard position of NRC byte if nrc_byte == 0x7F: # Check for negative response marker service_id = response_data[1] if response_data[3] == 0x11: print(f"Service {hex(service_id)} encountered Sub-function not supported/invalid issue.") interpret_udse_response([0x03, 0x22, 0x7F, 0x11]) # Example call with hypothetical data indicating NRC 11 condition. ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值