记:从零开始讲解UDS(四)——应用层概述(2)错误码(NRC)概述

7 篇文章 11 订阅
6 篇文章 26 订阅

最近工作繁忙,又在准备自考,博客的更新也就有些延误了。因为疫情原因,自考推迟了一些时间,所有我才能抽出来时间接着写文章……


0x00 概述

UDS(University Diagnostics System通用诊断系统)是一个在整车系统上经常使用的设备维护协议。其主要遵循的法规为:ISO-15765、ISO-14229,其主要协议模式脱胎于OBD(On-board diagnostics)诊断协议。经常应用在整车的各种ECU上面。是一个在整车ECU应用层开发经常使用的也是较为复杂的协议层之一。
本篇文章主要介绍了UDS大部分常用的UDS错误码,以及一些较复杂的错误码的触发流程。阅读本文之前,您需要了解的一些前置技能有:

技能名称技能熟练度技能教程链接
CAN总线熟悉暂无
数据类型熟悉暂无
OBD了解暂无
整车缩写了解暂无

0x01 分类

错误码是每一个成熟协议都会有的,也是辅助查找问题的重要手段之一。UDS暂定的数据协议中,错误码位为一个byte,可以表示理论上256个故障,被分为了大约20~30个专用错误码与可扩展的区间。官方定义是三个大的区间:0x00;0x01~7F;0x80~0xFF.但是内部有很多的预留码值,所以被分开了大约20个左右的区间。

官方分区的定义为:

0x00 并不是错误值,一般都是错误报警。

0x01~0x7F主要为通信错误的错误码

0x80~0xFF 主要是针对特定服务的特定错误码。

0x02 介绍

下面的介绍都是有定义的UDS错误码,没有定义的我会统一放在最后。

0x20 10错误码组

0x10 普通的拒绝指令,仅在没有办法使用别的错误码进行解释的时候的默认错误返回,当然,一般的应用服务都会有特殊的错误码返回。

0x11 无法识别服务码。一般是因为等级不够或者是发送错误。

0x12 无法识别服务码的子服务。一般也是因为等级不够或者发送错误。

0x13 错误的数据报格式或者长度,这个错误码一般出现在网络层或者应用层。用于判断是否是编码和协议出现错误。一般长度都会在服务定义的时候规定好,一般只要不符就会报错。

0x14 过长的数据返回。一般是因为数据的定义协议与要传输的数据大小不符,一般是因为传输的数据报在打包的时候发现数据过长。

0x21 20错误码组

0x21 过忙导致无法执行。一般是不会遇到,但是当写入DTC或者清除DTC时发送可能会遇到。故一般会在这边与主机厂商议等待时间。一般诊断仪也会等待100ms~200ms.

0x22 不正确的输入条件,大概是需要输入的是ASCII,但是传入的是HEX这种情况。或者是没在扩展模式(权限较高)下查询特殊的DTC(SN)。

0x24 发送的顺序不对。可能是类似于密码校验的顺序出错或者校准的错误。

0x25 处理的子网无法响应。如果给T-BOX类的服务中转网关就可能会遇到,也就是当前网段识别了这个指令但是发送到子网中无法被执行或者是当前ECU(服务器)无法满足足够的条件进行执行。

0x26 DTC出现了错误的记录。这个故障一般不会提前爆出。但是会在DTC登记特殊标记的时候在某些车厂的要求下可能会返回这个。但是大多数不会返回。

0x22 30错误码组

0x31 过长的请求目标。这个主要是因为当前制定的code超出了当前允许的最大范围,但是又不是参数的定义最大范围,比如0xff为当前数据定义最大的数据,但是应用层协议定义了0x7F,但是client发送了0xf0,就会超出当前的范围。

0x33 安全访问问题。这个一般是因为27服务没有正确的操作完成,并且访问了需要安全权限访问的服务。一般要求严格的车厂会要求当前的ECU记录这次访问的时间与这种错误的次数。

0x35 错误的访问key,这次涉及到了很长的安全保护逻辑,这种访问主要是因为想要错误的进行高权限的破解,所以也有很高的保护逻辑。详情可以查看我对于应用层的27服务的介绍……曾经被困在某司现场花了1小时实现当前逻辑的我表示真的会记得很清楚……😂

0x36 超出了错误的安全测试次数。这个一般是和0x35绑定的。所以根据也可以查看0x27服务的介绍。

0x37 超出的错误次数延时的反馈,这个也是基本上绑定0x36的,所以还是查看0x27的服务介绍吧~

0x23 70错误码组

0x70 传输错误。一般是定义的位置错误或者是传输了错误的控制指令。

0x71 传输终端。这个和正常服务并不一致,是因为某种原因导致当前的传输错误。

0x72 日常的编程错误。 一般是擦除或者是因为写入错误,但是没啥具体的错误。就可以发出这个故障。

0x73 错误的块计数器。因为下载一般在下载的时候传输的数据块少了,或者是下载的时候丢包。块数的定义会在后期的烧写操作详细讲解。

0x78 挂起的访问等待请求。这个严格上来讲不算是错误,仅在当前操作正在进行的时候出现了新的请求。ECU想要诊断仪进行相关的等待的反馈,这个反馈也要受到基础的操作超时限制。

0x7E 不满足当前要求请求子服务。就是在权限不够情况就请求了错误的服务。

0x7F 不满足当前要求请求服务。这个和0x7E差不多,区别只在于当前这个服务是主服务,不是主服务内的子服务。

0x24 80错误码组

0x81 编程管理地址过高。 这个也没啥说的……

0x82 编程管理地址过低。…………参上

0x83 引擎运行,这个我的理解是在ECU运行初始化操作时无法进行任何操作。

0x84 引擎未运行。参上

0x85 引擎运行时间过短,个人认为是有些车厂定义的初始化时间没有满足就会被输出这个故障码。

0x86 温度过高 0x87 温度过低。

0x88 车速过高 0x89 车速过低

0x8A 踏板过高 0x8B踏板过低

0x8C 不在空挡 0x8D不在指定挡位

0x8F未开启制动开关(电子驻车或手刹)

0x25 90错误码组

0x90 车辆不在P档,这个似乎都没啥说的……毕竟谁也不想更新一半就莫名其妙的开车了……

0x91 变速离合开关无法满足要求。

0x92 电压过高,一般会导致写入不稳定,但是不会坏。

0x93 电压过低,一般会导致无法写入或擦除。

0x26保留码组

0x31 ISO保留

0x15~0x20、0x23、0x27~0x30、0x32、0x34、0x50~0x6F、0x74~0x77、0x79~0x7D、0x80、0x8E、0xFF

0x32 文档保留

0x38~0x4F、0x94~0xEF、0xF0~0xFE

0x03 后记

因为故障码几乎贯穿了UDS应用层的全部生命周期。而且ISO文档写了较为系统,所以我就将其根据有用的、预留的分了类,并且简要的介绍了一些故障码的触发条件。
这篇文章属于我在自考期间挤时间写出的一篇文章,所以可能在某些故障码的整理和归类出现遗漏(因为这篇文章写了一周)。所以如果有所遗漏,请和我说下,我会将其补全。

更多

本文首发自 记:从零开始讲解UDS(四)——应用层概述(2)错误码(NRC)概述,更多文章可进入我的博客详查

  • 14
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GreenDreamer

如果帮到了你,还望请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值