ISO 14229-1 NRC 码详细说明表和场景 - 故障排查映射表

整理一份ISO 14229-1 NRC 码详细说明表,包含所有 NRC 码的含义、适用场景及排查建议,方便诊断故障时快速定位问题。

补充一份场景 - 故障排查映射表,包含每个场景下常见故障对应的 NRC 码及排查步骤,进一步提升诊断系统测试效率

一、ISO 14229-1 NRC 码详细说明表

NRC 码 含义(Mnemonic) 中文含义 适用场景 排查建议
0x11 ServiceNotSupported (SNS) 服务不支持 客户端请求的服务 ID(SID)未被 ECU 支持 1. 核对服务 ID 是否符合 ISO 14229-1 定义,确认未使用保留码; 2. 检查 ECU 诊断功能配置,确认该服务是否被禁用; 3. 核实诊断会话类型,部分服务仅在非默认会话下支持
0x12 SubFunctionNotSupported (SFNS) 子功能不支持 服务支持但请求的子功能参数无效或未被 ECU 支持 1. 核对子功能参数取值范围(如 0x01-0x7F); 2. 确认子功能与服务 ID 的匹配性(如 SecurityAccess 的请求种子 / 发送密钥子功能); 3. 检查 ECU 是否支持该子功能对应的功能(如编程会话下的特定子功能)
0x13 IncorrectMessageLength- OrInvalidFormat (IMLOIF) 消息长度错误或格式无效 1. 请求 / 响应消息的字节长度与服务要求不匹配;2. 消息格式不符合 ISO 14229-1 定义(如参数缺失、字节顺序错误) 1. 按服务规范校验消息总长度(含 SID、子功能、参数); 2. 检查参数字节数是否符合要求(如 DID 为 2 字节、内存地址为 4 字节); 3. 确认消息无多余 / 缺失字节,格式对齐(如高位在前、低位在后)
0x14 ResponseTooLong (RTL) 响应过长 正响应消息长度超过传输层限制(如 CAN 总线单帧最大 8 字节) 1. 拆分多 DID 请求,减少单次请求的数据量; 2. 启用分段传输机制(如 ISO 15765-2); 3. 检查 ECU 响应数据是否存在冗余,优化数据返回格式
0x21 BusyRepeatRequest (BRR) 总线忙,重复请求 ECU 正处理其他诊断任务,暂时无法响应新请求 1. 等待 ECU 当前任务完成(如编程、复位),延迟后重试; 2. 检查是否存在并发诊断请求,确保单会话下串行执行; 3. 核实诊断会话超时参数(P2/P2*),避免超时前重复请求
0x22 ConditionsNotCorrect (CNC) 条件不正确 1. ECU 当前运行状态不满足服务执行条件(如发动机运行时执行编程服务);2. 前置条件未满足(如未解锁安全访问即执行写操作) 1. 检查 ECU 状态(如点火开关状态、发动机转速)是否符合服务要求; 2. 核实前置操作是否完成(如安全访问解锁、诊断会话切换);3. 确认无其他诊断任务占用资源(如正在执行例行程序)
0x24 RequestSequenceError (RSE) 请求序列错误 服务执行需遵循固定序列,客户端跳过前置步骤 1. 按规范执行序列操作(如 SecurityAccess 需先请求种子再发送密钥); 2. 检查 LinkControl 服务是否先执行验证步骤再请求模式切换;3. 确认前序服务是否成功完成(如 RequestDownload 后再执行 TransferData)
0x31 RequestOutOfRange (ROOR) 请求超出范围 1. 参数值超出 ECU 支持的有效范围(如 DID、内存地址、数值参数);2. 请求的资源不存在(如未定义的 DID、非法内存地址) 1. 核对参数取值范围(如 DID 的 0x0000-0xFFFF、内存地址的有效区间); 2. 确认动态定义的 DID 已完成定义(如 DynamicallyDefineDataIdentifier 执行成功); 3. 检查参数是否符合 ECU 硬件限制(如内存大小、数值精度)
0x33 SecurityAccessDenied (SAD) 安全访问拒绝 1. 未解锁安全访问即请求受保护服务;2. 安全访问过程失败(如密钥错误) 1. 确认已通过 SecurityAccess 服务完成解锁(请求种子→发送密钥→正响应); 2. 核对密钥计算逻辑是否与 ECU 一致(如种子加密算法); 3. 检查安全访问等级是否匹配(如编程服务需最高安全等级); 4. 若多次失败,确认 ECU 是否触发访问延时(如 ISO 21434 要求)
0x35 InvalidKey (IK) 无效密钥 SecurityAccess 服务中客户端发送的密钥与 ECU 计算的密钥不匹配 1. 重新执行安全访问序列(先请求种子再计算密钥); 2. 核对密钥算法(如 AES、自定义加密逻辑)是否正确; 3. 检查种子时效性,确保密钥在种子有效期内发送; 4. 确认密钥字节长度与 ECU 要求一致
0x36 ExceededNumberOfAttempts (ENOA) 超出尝试次数 安全访问等服务的失败尝试次数达到 ECU 限制 1. 等待 ECU 配置的延时时间(如 1 分钟)后重试; 2. 重启 ECU 清除失败计数(部分 ECU 支持); 3. 检查密钥计算逻辑,避免重复错误; 4. 确认 ECU 安全策略(如最大尝试次数、延时时间)
0x37 RequiredTimeDelayNotExpired (RTDNE) 必要延时未到期 前一次操作后需等待的延时时间未结束(如安全访问失败后的冷却时间) 1. 按 ECU 要求等待足够延时(如 10 秒)后重试; 2. 检查诊断工具的延时机制是否生效; 3. 避免在延时期间发送其他请求,防止计数重置
0x38-0x4F ReservedByExtendedDataLink SecurityDocument (RBEDLSD) 扩展数据链路安全保留 与数据链路安全相关的错误(如加密传输失败) 1. 检查 SecuredDataTransmission 服务的安全参数配置; 2. 核实加密算法、密钥是否与 ECU 一致; 3. 确认数据链路安全状态是否正常(如 TLS 连接是否建立)
0x72 GeneralProgrammingFailure (GPF) 通用编程失败 1. 写内存、写 DID 等编程操作失败;2. 非易失性存储(如 Flash)写入错误 1. 检查 ECU 供电电压是否稳定(编程需 13.5±0.5V); 2. 确认编程会话已激活,安全访问已解锁; 3. 核实写入地址是否为可写区域(如非引导区、保护区域); 4. 检查写入数据是否符合存储格式要求(如字节对齐、校验和正确); 5. 若多次失败,排查存储硬件故障(如 Flash 损坏)
0x78 RequestCorrectlyReceived ResponsePending (RCRRP) 请求已正确接收,响应待发 ECU 已接收请求但需延时处理(如长时例行程序、编程操作) 1. 按 P2 * 超时参数等待 ECU 最终响应; 2. 期间可发送 TesterPresent 维持会话活性; 3. 若超时未响应,检查 ECU 是否处于异常状态(如编程中断)

二、场景 - 故障排查映射表

应用场景 常见故障 对应 NRC 码 排查步骤
## 诊断通信管理
切换诊断会话 会话切换失败 0x12、0x22 1. 检查会话类型参数(0x01 默认、0x02 编程、0x03 扩展)是否有效(NRC 0x12); 2. 确认 ECU 当前状态允许切换(如发动机熄火才能进入编程会话)(NRC 0x22); 3. 核对会话切换后是否返回 P2/P2 * 超时参数,确认切换成功
ECU 复位 复位请求被拒绝 0x22、0x33 1. 检查 ECU 是否处于关键运行状态(如发动机运行时拒绝硬复位)(NRC 0x22); 2. 确认安全访问已解锁(部分复位类型需安全访问)(NRC 0x33); 3. 核实复位类型参数(0x01 硬复位、0x03 软复位)是否支持
安全访问解锁 解锁失败 0x12、0x33、0x35、0x36 1. 检查子功能参数(0x01 请求种子、0x02 发送密钥)是否正确(NRC 0x12); 2. 确认未解锁时触发受保护服务(NRC 0x33); 3. 核对密钥计算是否正确(NRC 0x35); 4. 若多次失败,等待延时或重启 ECU(NRC 0x36)
## 数据传输
读取 DID 数据 读取失败 0x13、0x22、0x31、0x33 1. 检查 DID 请求格式(2 字节)和总长度是否正确(NRC 0x13); 2. 确认 ECU 状态允许读取(如部分 DID 需扩展会话)(NRC 0x22); 3. 核实 DID 是否为 ECU 支持的有效 ID(NRC 0x31); 4. 若为加密 DID,确认安全访问已解锁(NRC 0x33)
写入 DID 数据(如 VIN 码) 写入失败 0x13、0x22、0x31、0x33、0x72 1. 校验写入消息长度(含 DID 和数据)是否符合要求(NRC 0x13);2. 检查 ECU 是否处于可写状态(如非默认会话、发动机熄火)(NRC 0x22); 3. 确认 DID 支持写入(非只读 DID)(NRC 0x31); 4. 核实安全访问已解锁(NRC 0x33); 5. 检查写入数据格式(如 VIN 为 17 字节 ASCII 码)和存储状态(NRC 0x72)
读取内存地址数据 读取失败 0x13、0x31、0x33 1. 确认地址长度格式标识(如 0x14 表示 4 字节地址 + 1 字节长度)正确(NRC 0x13); 2. 检查内存地址是否在 ECU 有效地址范围内(NRC 0x31); 3. 若为加密内存区域,确认安全访问已解锁(NRC 0x33)
## 存储数据传输
读取 DTC 信息 读取失败 0x12、0x13、0x31 1. 检查 DTC 读取子功能(如 0x02 读取 DTC 列表)是否有效(NRC 0x12); 2. 校验消息格式(如 DTC 状态掩码为 1 字节)(NRC 0x13); 3. 确认请求的 DTC 组标识或状态掩码是否有效(NRC 0x31)
清除 DTC 信息 清除失败 0x22、0x31、0x72 1. 检查 ECU 状态(如发动机运行时无法清除排放相关 DTC)(NRC 0x22); 2. 核实 DTC 组标识(如 0xFFFFFF 表示所有组)是否有效(NRC 0x31); 3. 检查存储介质是否正常,能否执行擦除操作(NRC 0x72)
## 编程操作
ECU 固件下载 下载失败 0x22、0x33、0x72 1. 确认已激活编程会话,ECU 处于编程模式(NRC 0x22); 2. 核实安全访问已解锁,获得编程权限(NRC 0x33); 3. 检查下载地址、数据长度是否正确,存储介质是否可写(NRC 0x72); 4. 确认传输数据校验和正确,无传输错误