UDS中NRC否定响应码理解
UDS(统一诊断服务)协议中的NRC(否定响应码)是ECU在处理诊断请求时返回的错误代码,用于指示请求失败的具体原因。根据ISO 14229标准,NRC码分为三个主要范围:
NRC码分类
0x00-0x0F:保留区域
-
0x00:正响应参数值(ECU内部使用)
-
0x01-0x0F:ISO/SAE保留
0x10-0x7F:通信相关错误
常用NRC码及其含义:
| NRC码 | 名称 | 含义 |
|---|---|---|
| 0x10 | General Reject | 一般拒绝,无法准确描述错误原因时使用 |
| 0x11 | Service Not Supported | 服务不支持 |
| 0x12 | Sub-Function Not Supported | 子功能不支持 |
| 0x13 | Incorrect Message Length or Invalid Format | 报文长度或格式不正确 |
| 0x14 | Response Too Long | 响应字节数过长 |
| 0x21 | Busy Repeat Request | ECU过忙,需要重试请求 |
| 0x22 | Conditions Not Correct | 条件不满足 |
| 0x24 | Request Sequence Error | 请求顺序错误 |
| 0x25 | No Response From Subnet Component | 子网组件无响应 |
| 0x26 | Failure Prevents Execution Of Requested Action | 故障阻止请求执行 |
| 0x31 | Request Out Of Range | 请求超出范围 |
| 0x33 | Security Access Denied | 安全访问拒绝 |
| 0x35 | Invalid Key | 密钥无效 |
| 0x36 | Exceed Number Of Attempts | 超出最大尝试次数 |
| 0x37 | Required Time Delay Not Expired | 安全访问锁定时间未过期 |
| 0x78 | Request Correctly Received-Response Pending | 请求已接收,响应待处理 |
| 0x7E | Sub-Function Not Supported In Active Session | 当前会话下子功能不支持 |
| 0x7F | Service Not Supported In Active Session | 当前会话下服务不支持 |

0x80-0xFF:特定条件错误
这些NRC码用于报告更具体的错误原因,通常与ECU的特定状态条件相关,如:
-
0x81:发动机转速过高
-
0x82:发动机转速过低
-
0x83:发动机正在运行
-
0x84:发动机未运行
-
0x85:发动机运行时间过短
-
0x86:温度过高
-
0x87:温度过低
-
0x88:车速过高
-
0x89:车速过低

NRC优先级
NRC码的优先级从高到低排列为:
0x11 > 0x7F > 0x13 > 0x12 > 0x7E > 0x33 > 0x24 > 0x31 > 0x22 > 0x78
响应格式
否定响应的标准格式为:7F + 请求SID + NRC码
-
7F:固定标识符,表示否定响应
-
请求SID:原始请求的服务标识符
-
NRC码:1字节代码,表示具体错误类型
NRC码在UDS诊断中起着关键作用,帮助诊断工具快速定位问题根源,提高诊断效率和准确性。