UDS服务应该支持哪些否定响应码
USD诊断服务的否定响应中包含有导致否定响应原因的编码,称为否定响应码(NRC, Negative Response Code)。否定响应码的取值范围为0x00 - 0xFF,被分为三组:
- 0x00:服务器内部实现否定响应码判断逻辑时使用,表示要给出肯定响应。
- 0x01 – 0x7F:诊断通信相关的否定响应码。
- 0x80 – 0xFF:服务器收到诊断服务请求时,由于某些条件不满足要求而给出的否定响应码。给出这些否定响应码而不是给出0x22的目的是为了提供请求的服务不能被执行的更详细的原因。
具体的否定响应编码及其使用条件,请见本文最后的列表。
由于诊断服务的功能不同,其所支持的否定响应码是不完全相同的。那每个诊断服务要支持哪些否定响应码呢?
所有服务都需支持的否定响应码
首先,ISO14229-1:2013(E)中定义了一组每个诊断服务都需要支持的否定响应码。见下表。
否定响应码 NRC |
定义 Definition |
---|---|
0x21 | 服务器忙 BusyRepeatRequest |
0x11 | 诊断服务不支持 ServiceNotSupported |
0x7F | 诊断服务在当前会话下不支持 serviceNotSupportedInActiveSession |
0x78 | 收到诊断请求,等待响应 RequestCorrectlyReceived-ResponsePending |
具体的服务需要支持的否定响应码
其次,针对具体的诊断服务,ISO14229-1:2013(E)定义了其所需支持的特定否定响应码。这里以诊断会话控制服务(0x10)为例。在ISO14229-1:2013(E)的9.2.4章节,定义了诊断会话控制服务(0x10)需要支持的否定响应码,为0x12、0x13、0x22。其它诊断服务支持的特定否定响应码,可以参考标准中的相应章节。
否定响应码 NRC |
描述 Description |
---|---|
0x12 | 子功能不支持 |
0x13 | 报文长度不正确 |
0x22 | 服务执行条件不满足 |
这里列举了常用的诊断服务所支持的否定响应码。如下表:
诊断服务标识 Service ID |
诊断服务 Diagnostic Service |
支持的否定响应码 Supported NRC |
---|---|---|
0x10 | 诊断会话控制 DiagnosticSessionControl |
0x12, 0x13, 0x22 |
0x11 | ECU复位 ECUReset |
0x12, 0x13, 0x22, 0x33 |
0x14 | 清楚故障信息 ClearDiagnosticInformation |
0x13, 0x22, 0x31, 0x72 |
0x19 | 读取故障码信息 ReadDTCInformation |
0x12, 0x13, 0x31 |
0x22 | 通过ID读取数据 ReadDataByIdentifier |
0x13, 0x14, 0x22, 0x31, 0x33 |
0x27 | 安全访问 SecurityAccess |
0x12, 0x13, 0x22 |