车载诊断NRC - UDS Negative Response Code

Negative Response Code

NRC Categories

>>下表中列出了ISO14229-1:2013(E)中定义的否定响应码及其使用条件:
否定响应码的取值范围为0x00 - 0xFF,被分为三组:

  • 0x00:服务器内部实现否定响应码判断逻辑时使用,表示要给出肯定响应。
  • 0x01 – 0x7F:诊断通信相关的否定响应码。
  • 0x80 – 0xFF:服务器收到诊断服务请求时,由于某些条件不满足要求而给出的否定响应码。给出这些否定响应码而不是给出0x22的目的是为了提供请求的服务不能被执行的更详细的原因

NRC 常用列表


  • 00 POSITIVERESPONSE 正响应
    • 正响应
  • 11 SERVICENOTSUPPORTED 服务不支持
    • 当诊断仪发送的请求消息中服务标识符无法识别或不支持时,ECU应发送该响应码
  • 12 SUBFUNCTIONNOTSUPPORTED 不支持子功能
    • 该响应码表明请求的动作不能执行的原因是ECU不支持请求消息中的服务特定参数。如果诊断仪已经发送了一请求消息,并且该请求消息包含能识别且支持的服务标识符,但子功能要么无法识别要么不支持,此时ECU应(shall)发送此响应代码
  • 13 INCORRECTMESSAGELENGTHORINVALIDFORMAT 不正确的消息长度或无效的格式
    • 该响应码表明请求的动作不能执行的原因是ECU接收到的请求消息长度与特定服务规定的长度不匹配或者是参数格式与特定服务规定的格式不匹配
  • 22 CONDITIONSNOTCORRECT 条件不正确
    • 该响应码表明请求的动作不能执行的原因是ECU的状态条件不允许
  • 24 REQUESTSEQUENCEERROR 请求序列错误
    • 该响应码表明请求的动作不能执行的原因是ECU收到一个非预期的请求消息序列或诊断仪发送的消息
  • 31 REQUESTOUTOFRANGE 请求超出范围
    • 该响应码表明请求的动作不能执行的原因是ECU检测到请求消息包含一个超出允许范围的参数或者是不支持或者激活会话模式下不支持的数据标识符/例程标识符的访问。应(shall)允许诊断仪在ECU内部进行读数据、写数据或通过数据调整功能的服务使用该响应代码
  • 33 SECURITYACCESSDENIED 安全访问拒绝
    • 用在需要安全访问但没通过安全访问的情况。
  • 35 INVALIDKEY 密钥无效
    • 该响应码表明ECU不允许通过安全访问的原因是诊断仪发送的密钥与ECU内存中的密钥不匹配
  • 36 EXCEEDNUMBEROFATTEMPTS 尝试次数超限
    • 请求安全访问(SecurityAccess)服务的失败次数超过服务器允许的最大次数时,回复此编码。
  • 37 REQUIREDTIMEDELAYNOTEXPIRED 延时时间未到
    • 服务器在安全访问延迟时间内收到安全访问(SecurityAccess)服务请求时,回复此编码
  • 70 UPLOADDOWNLOADNOTACCEPTED 上传下载未接受
    • 由于故障导致从服务器的存储器上传数据失败或向服务器的存储器下载数据失败时,回复此代码
  • 71 TRANSFERDATASUSPENDED 传输数据中断
    • 由于故障导致数据传输操作被中断时,回复此编码
  • 72 GENERALPROGRAMMINGFAILURE 一般编程失败
    • 该响应码表明在不可擦除的内存设备中进行擦除或编程时ECU检测到错误发生
  • 73 WRONGBLOCKSEQUENCECOUNTER 错误的序列块
    • 在执行数据传输服务(TransferData (0x36) service)的过程中,检测到数据块序列编号(BlockSequenceCounter)错误时,回复此编码
  • 78 REQUESTCORRECTLYRECEIVED_RESPONSEPENDING 正确接收请求消息-等待响应
    • 该响应码表明诊断仪请求的消息被ECU正确接收且请求消息中所有参数有效,但是将执行的动作未完成且ECU未准备好接收其它请求。一旦完成所请求的服务,ECU应(shall)发送一肯定响应消息或发送否定响应吗不为78的否定响应消息
  • 7E SUNFUNCTIONNOTSUPPORTEDINACTIVESESSION 激活会话不支持该子服务
    • 该响应码表明请求的动作不能执行的原因是当前会话模式下ECU不支持请求的子服务
  • 7F DIAGNOSTICSESSIONNOTCORRECT 激活会话不支持该服务
    • 该响应码表明请求的动作不能执行的原因是当前会话模式下ECU不支持请求的服务
### 车载UDS协议中的负反馈类型解释 #### 1. 否定响应码 (Negative Response Codes, NRCs) 否定响应码用于指示请求的服务执行失败的原因。这些代码帮助诊断工具理解为什么特定的请求未能成功处理[^1]。 #### 2. 响应错误分类 NRC可以分为多个类别,具体取决于导致错误的根本原因: - **永久性错误**:这类错误通常表示存在硬件或软件配置上的问题,可能需要维修人员介入解决。 - **临时性错误**:指那些由于瞬态条件引起的错误,比如网络超时或其他暂时性的通讯中断,在重试之后可能会消失。 - **参数错误**:当客户端发送的数据不符合预期格式或范围时触发此类错误。 - **权限不足**:如果尝试访问受保护的功能而未提供适当的安全凭证,则会返回此类型的错误消息。 - **资源不可用**:表明所需资源当前无法使用,可能是因忙于其他操作或是出于安全考虑被锁定状态。 对于具体的`Service 27`测试背景下的`NRC 13`和`NRC 24`优先级判断方面,前者代表的是子功能不支持,后者意味着请求超出ECU实现能力之外的工作量限制。在某些情况下,这两个NRC之间可能存在冲突的情况;此时需依据实际应用场景来决定哪一个应该具有更高的优先权去报告给上层应用逻辑[^2]。 ```python # Python伪代码展示如何解析NRC并作出相应反应 def handle_nrc(nrc_code): responses = { "0x13": lambda: print("Sub-function not supported"), "0x24": lambda: print("Request sequence error") } action = responses.get(hex(nrc_code), lambda: print(f"Unknown NRC {hex(nrc_code)}")) action() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CDamogu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值