UDC否定响应码学习
概述
在UDS(Unified Diagnostic Services,统一诊断服务)协议中,当诊断仪向ECU发送请求后,ECU可能返回否定响应,表示无法执行请求。否定响应有固定的报文格式。
否定响应报文格式
字节位置 | 含义 | 值 | 说明 |
---|---|---|---|
0 | 否定响应标识 | 0x7F | 固定值,表示这是一个否定响应 |
1 | 请求的服务ID | [SID] | 回显诊断仪请求的服务ID |
2 | 否定响应码 | [NRC] | 表示失败的具体原因 |
常见否定响应码(NRC)列表
NRC (Hex) | 名称 | 中文含义 | 常见原因 |
---|---|---|---|
0x10 | General Reject | 一般拒绝 | ECU由于未指明的原因无法执行请求 |
0x11 | Service Not Supported | 服务不支持 | 请求的服务ID在该ECU中未实现 |
0x12 | Sub-Function Not Supported | 子功能不支持 | 请求服务的子功能不被支持 |
0x13 | Incorrect Message Length Or Invalid Format | 报文长度错误或格式无效 | 请求报文长度或格式不符合要求 |
0x22 | Conditions Not Correct | 条件不正确 | ECU当前状态无法执行该请求 |
0x31 | Request Out Of Range | 请求超出范围 | 请求参数值不在ECU允许范围内 |
0x33 | Security Access Denied | 安全访问被拒绝 | 需要安全解锁但未解锁或密钥错误 |
0x35 | Invalid Key | 无效密钥 | 安全访问密钥错误 |
0x36 | Exceed Number Of Attempts | 尝试次数超限 | 安全访问密钥错误次数过多 |
0x37 | Required Time Delay Not Expired | 要求的时间延迟未满足 | 安全访问失败后需要等待 |
0x7E | Sub-Function Not Supported In Active Session | 在当前会话下不支持子功能 | 请求的子功能需要在其他会话中执行 |
0x7F | Service Not Supported In Active Session | 在当前会话下不支持服务 | 请求的服务在当前会话模式下被禁止 |
通信示例
诊断仪请求:
22 F1 90 // 读取DID=F190
ECU肯定响应:
62 F1 90 00 00 00 00 // 0x22 + 0x40 = 0x62
ECU否定响应:
7F 22 31 // 否定响应(0x7F), 请求服务(0x22), 原因:超出范围(0x31)