统一诊断服务否定响应码的判定
- 适用所有诊断服务的NRC及其优先级
- 适用于带子功能参数的诊断服务的NRC及其优先级
- ISO14229-1中做了具体的NRC判断逻辑描述的诊断服务的NRC优先级
- 通过ID写入数据服务(WriteDataByIdentifier, SID 0x2E)所支持的NRC优先级
- 通过ID读取数据服务(ReadDataByIdentifier,SID 0x22)支持的否定响应码优先级
- 清除故障信息服务(ClearDiagnosticInformation, SID 0x14)支持的否定响应码优先级
- 通过ID进行输入输出控制服务(InputOutputControlByIdentifier, SID 0x2F)支持的否定响应码优先级
- 例程控制服务(RoutineControl,SID 0x31)支持的否定响应码优先级
- 请求下载(RequestDownload, SID 0x34)支持的否定响应码优先级
- 请求上传服务(RequestUpload,SID 0x35)支持的否定响应码优先级
- 数据传输服务(TransferData,SID 0x36)支持的否定响应码优先级
- 请求退出传输服务(RequestTransferExit,SID 0x37)支持的否定响应码优先级
上一篇文章《UDS服务应该支持哪些否定响应码》中介绍了具体的诊断服务应该支持哪些否定响应码。在实际的应用过程中,经常出现否定响应的场景同时满足多个否定响应码的情况。但否定响应中的NRC只能给出一个。那么,这种情况下应该给出哪个否定响应码呢?这就涉及到诊断服务否定响应码判定优先级问题。
在ISO14229-1:2013(E)中,对否定响应的处理过程有详细地说明。
适用所有诊断服务的NRC及其优先级
首先,我们来看Figure 5 – General server response behaviour。
上图的描述可以总结为下表中的NRC优先级。这是判定优先级最高的一组NRC。适用于所有的诊断服务。
优先级 Priority |
否定响应码 NRC |
备注 Notes |
---|---|---|
1 | 0x21 | 可选 服务器正忙于执行已请求的诊断服务,暂时无法执行当前请求的诊断服务时,回复此编码 |
2 | 0xXX | 整车制造商或零部件供应商自定义 |
3 | 0x11 | 强制要求 服务器不支持请求的诊断服务。诊断请求中的服务标识符(Service ID)是服务器不支持的或不能识别的,则回复此编码。 |
4 | 0x7F | 强制要求 诊断请求中的服务标识符(Service ID)在当前的会话下不支持时,回复此编码。 |
5 | 0x33 | 可选 在所请求的诊断服务需要服务器处于解锁状态,但服务器未被解锁时,回复此编码。 |
6 | 0xXX | 整车制造商或零部件供应商自定义 |
观察Figure 5 - General server response behaviour的左下角,可以发现进一步的否定响应判断被分成了两个分支。
适用于带子功能参数的诊断服务的NRC及其优先级
分支一,带子功能参数的诊断服务(0x31服务除外)。常用的带子功能参数的诊断服务如下:
诊断服务标识 Service ID |
诊断服务 Diagnostic Service |
---|---|
0x10 | 诊断会话控制 DiagnosticSessionControl |
0x11 | ECU复位 ECUReset |
0x19 | 读取故障码信息 ReadDTCInformation |
0x27 | 安全访问 SecurityAccess |
0x28 | 通信控制 CommunicationControl |
0x3E | 测试设备在线 TesterPresent |
0x85 | 控制故障码设置 ControlDTCSetting |
这些带子功能的诊断服务,适用于ISO14229-1:2013(E)中Figure 6 - General server response behaviour for request messages with sub-function parameter中描述的处理逻辑。
这部分处理逻辑可以被总结为如下的NRC处理优先级.(优先级从7开始。优先级为1~6的否定响应码请参考适用所有诊断服务的NRC及其优先级。下同。)
优先级 Priority |
否定响应码 NRC |
备注 Notes |
---|---|---|
7 | 0x13 | 强制要求 仅用于判断最小数据长度。诊断请求的数据长度小于2字节时,回复此编码 |
8 | 0x12 | 强制要求 服务器支持诊断请求中的服务标识符(Service ID),但不支持其中的子功能参数时,回复此编码。 |
9 | 0x7E | 强制要求 诊断请求中服务的子功能参数在当前的会话下不支持时,回复此编码。 |
10 | 0x33 | 可选。 诊断服务的子功能要求的安全等级未解锁时,回复此编码 |
11 | 0x24 | 可选。 诊断服务的子功能需要按照某种顺序依次请求,而当前不满足此条件时,回复此编码。典型的例子是安全访问服务(SID 0x27) |
12 | 0xXX | 整车制造商或零部件供应商自定义 |
ISO14229-1中做了具体的NRC判断逻辑描述的诊断服务的NRC优先级
分支二,ISO14229-1中做了具体的NRC判断逻辑描述的诊断服务。这部分常用的诊断服务如下:
诊断服务标识 Service ID |
诊断服务 Diagnostic Service |
---|---|
0x22 | 通过ID读取数据 ReadDataByIdentifier |
0x2E | 通过ID写入数据 WriteDataByIdentifier |
0x14 | 清除故障信息 ClearDiagnosticInformation |
0x2F | 通过ID进行输入输出控制 InputOutputControlByIdentifier |
0x31 | 例程控制 RoutineControl |
0x34 | 请求下载 RequestDownload |
0x35 | 请求上传 RequestUpload |
0x36 | 数据传输 TransferData |
0x37 | 请求退出传输 RequestTransferExit |
在ISO14229-1:2013(E)中,对这些服务支持的NRC的判定做了具体说明。这里以通过ID写入数据服务(WriteDataByIdentifier, SID 0x2E)为例。在ISO14229-1:2013(E)的10.7.4章节Figure 21 - NRC handling for WriteDataByIdentifier service中进行了详细的说明。
由此图中的描述,可以得出
通过ID写入数据服务(WriteDataByIdentifier, SID 0x2E)所支持的NRC优先级
优先级 Priority |
否定响应码 NRC |
备注 Notes |
---|---|---|
7 | 0x13 | 强制要求 诊断请求的数据长度小于4字节时,回复此编码 |
8 | 0x31 | 强制要求 服务器不支持请求的DID或请求的DID不支持写入操作时,回复此编码 |
9 | 0x13 | 强制要求 完整的数据长度与预期不一致时,回复此编码 |
10 | 0x33 | 强制要求 此服务要求的安全等级未解锁时,回复此编码 |
11 | 0x22 | 可选。 DID的写入条件不满足时,回复此编码 |
12 | 0x31 | 强制要求 写入的数据无效时,回复此编码 |
13 | 0x72 | 强制要求 数据写入到存储器失败时,回复此编码 |
参考ISO14229-1:2013(E)中的相关章节,可以得出其它诊断服务的否定响应处理优先级。
通过ID读取数据服务(ReadDataByIdentifier,SID 0x22)支持的否定响应码优先级
优先级 Priority |
否定响应码 NRC |
备注 Notes |
---|---|---|
7 | 0x13 | 强制要求 诊断请求的数据长度小于4字节时,回复此编码 |
8 | 0x13 | 强制要求 完整的数据长度不符合预期,或请求的DID数量超过服务器支持的最大数量时,回复此编码 |
9 | 0x33 | 强制要求 请求的DID要求的安全等级未解锁时,回复此编码 |
10 | 0x22 | 可选。 读取DID的条件不满足时,回复此编码 |
12 | 0x31 | 强制要求 请求的所有DID都不被服务器支持或在当前的会话下不支持时,回复此编码 |
13 | 0x14 | 强制要求 诊断响应的数据长度超过服务器支持的最大值时,回复此编码 |
清除故障信息服务(ClearDiagnosticInformation, SID 0x14)支持的否定响应码优先级
优先级 Priority |
否定响应码 NRC |
备注 Notes |
---|---|---|
7 | 0x13 | 强制要求 数据长度不为4字节时,回复此编码 |
8 | 0x31 | 强制要求 服务器不支持请求中的GroupOfDTC参数时,回复此编码 |
9 | 0x22 | 可选。 当清除DTC的条件不满足时,回复此编码 |
10 | 0xXX | 整车制造商或零部件供应商自定义 |
11 | 0x72 | 强制要求 向存储器写入数据失败时,回复此编码 |
通过ID进行输入输出控制服务(InputOutputControlByIdentifier, SID 0x2F)支持的否定响应码优先级
优先级 Priority |
否定响应码 NRC |
备注 Notes |
---|---|---|
7 | 0x13 | 强制要求 数据长度小于4字节时,回复此编码 |
8 | 0x31 | 强制要求 请求的服务在当前会话下不被支持或请求中的InputOutputControlParameter参数不被支持时,回复此编码 |
9 | 0x13 | 强制要求 完整的数据长度与预期不一致时,回复此编码 |
10 | 0x31 | 强制要求 服务器不支持请求中的ControlState参数或ControlMask参数时,回复此编码 |
11 | 0x33 | 强制要求 如请求的DID需要的安全等级未解锁时,回复此编码 |
12 | 0x22 | 可选 当请求的输入输出控制功能的执行条件不满足时,回复此编码 |
13 | 0xXX | 整车制造商或零部件供应商自定义 |
例程控制服务(RoutineControl,SID 0x31)支持的否定响应码优先级
优先级 Priority |
否定响应码 NRC |
备注 Notes |
---|---|---|
7 | 0x13 | 强制要求 数据长度小于4字节时,回复此编码 |
8 | 0x31 | 强制要求 服务器不支持请求中的例程标识(RID)时,回复此编码 |
9 | 0x33 | 强制要求 请求的例程标识(RID)所需的安全等级未解锁时,回复此编码 |
10 | 0x12 | 强制要求 服务器不支持请求的子功能参数时,回复此编码 |
11 | 0x13 | 强制要求 完整的数据长度不符合预期时,回复此编码 |
12 | 0x31 | 强制要求 服务器不支持请求中的RoutineControlOptionRecord参数时,回复此编码 |
13 | 0x22 | 可选 当请求的例程控制的执行条件不满足时,回复此编码 |
14 | 0x24 | 可选 如下情况下,可回复此编码 - 例程正在执行,在此收到了启动例程控制(StartRoutine)请求 - 例程没有执行,而收到了停止例程控制(StopRoutine)请求 - 收到请求例程控制结果(RequestRoutineResults)的请求时,由于例程没有被执行等原因无法给出执行结果时 |
15 | 0xXX | 整车制造商或零部件供应商自定义 |
请求下载(RequestDownload, SID 0x34)支持的否定响应码优先级
优先级 Priority |
否定响应码 NRC |
备注 Notes |
---|---|---|
7 | 0x13 | 强制要求 诊断请求的数据长度小于5字节时,回复此编码 |
8 | 0x31 | 强制要求 诊断请求中的DataFormatIdentifier参数或AddressAndLengthFormatIdentifier参数无效时时,回复此编码 |
9 | 0x13 | 强制要求 完整的数据长度与预期不一致时,回复此编码 |
10 | 0x31 | 强制要求 诊断请求中的参数MemoryAddress或MemorySize无效时时,回复此编码 |
11 | 0x33 | 强制要求 服务要求的安全等级未解锁时,回复此编码 |
12 | 0x22 | 可选 服务器在接收下载数据的过程中又收到了请求下载服务时,回复此编码 |
13 | 0x70 | 强制要求 服务器由于故障原因不能执行下载时,回复此编码 |
14 | 0xXX | 整车制造商或零部件供应商自定义 |
请求上传服务(RequestUpload,SID 0x35)支持的否定响应码优先级
优先级 Priority |
否定响应码 NRC |
备注 Notes |
---|---|---|
7 | 0x13 | 强制要求 诊断请求的数据长度小于5字节时,回复此编码 |
8 | 0x31 | 强制要求 诊断请求中的参数DataFormatIdentifier或AddressAndLengthFormatIdentifier无效时时,回复此编码 |
9 | 0x13 | 强制要求 完整的数据长度与预期不一致时,回复此编码 |
10 | 0x31 | 强制要求 诊断请求中的参数MemoryAddress或MemorySize无效时时,回复此编码 |
11 | 0x33 | 强制要求 服务要求的安全等级未解锁时,回复此编码 |
12 | 0x22 | 可选。 请求上传数据服务的执行条件不满足时,回复此编码。例如服务器在执行请求上传数据的传输过程中再次收到了请求上传数据服务 |
13 | 0x70 | 强制要求 服务器由于故障原因不能执行下载时,回复此编码 |
14 | 0xXX | 整车制造商或零部件供应商自定义 |
数据传输服务(TransferData,SID 0x36)支持的否定响应码优先级
优先级 Priority |
否定响应码 NRC |
备注 Notes |
---|---|---|
7 | 0x13 | 强制要求 诊断请求的数据长度小于2字节时,回复此编码 |
8 | 0x24 | 强制要求 如下情况,回复此代码 -收到此服务前,服务器未收到请求下载(RequestDownload)或请求上传服务(RequestUpload) -收到此服务前,服务器收到了请求下载(RequestDownload)或请求上传服务(RequestUpload),并且也已经收到了请求传输的全部数据 |
9 | 0x71 | 强制要求 传输的下载数据长度与之前收到的请求下载(RequestDownload)服务中的参数MemorySize不一致时,回复此编码 |
10 | 0x73 | 强制要求 服务器检测到数据传输的BlockSequenceCounter错误时,回复此编码 |
11 | 0x31 | 强制要求 如下情况,回复此编码 -请求传输的数据长度与之前服务器收到的请求下载(RequestDownload)或请求上传服务(RequestUpload)后给出的肯定响应中的MaxNumberOfBlockLength不一致时(不包括最后一个Block的传输) -请求传输的数据长度与服务器的存储器数据对齐要求不一致时 |
12 | 0x72 | 可选 服务器在擦除或写入非易失存储器发生错误时,回复此编码 |
13 | 0x92/0x93 | 可选。 服务器的供电电压超出了允许向非易失存储器写入数据的电压范围(供电电压过高或过低)时,回复此编码 |
14 | 0xXX | 整车制造商或零部件供应商自定义 |
请求退出传输服务(RequestTransferExit,SID 0x37)支持的否定响应码优先级
优先级 Priority |
否定响应码 NRC |
备注 Notes |
---|---|---|
7 | 0x24 | 强制要求 如下情况,回复此代码 -收到此服务时,编程过程未完成 -收到此服务前,服务器未收到请求下载(RequestDownload)或请求上传服务(RequestUpload) |
8 | 0x31 | 可选 请求中的参数无效时,回复此编码 |
9 | 0x13 | 强制要求 诊断请求的数据长度与预期不一致时,回复此编码 |
10 | 0xXX | 整车制造商或零部件供应商自定义 |
参考文献
Road vehicles - Unified diagnostic services (UDS) - Part 1: Specification and requirements, Second edition 2013-03-15