统一诊断服务(UDS)否定响应码的判定(NRC优先级)


统一诊断服务否定响应码的判定

  • 适用所有诊断服务的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。
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中进行了详细的说明。
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