优秀的编程知识分享平台

网站首页 > 技术文章 正文

UDS协议中服务ID与诊断请求及NRC回复解析

nanyue 2024-12-20 17:45:46 技术文章 3 ℃

UDS协议中会涉及到一些专业术语,服务ID(Service ID(SID))、诊断请求(Diagnostic Request)、正响应/负响应(Positive/Negative Response)、负响应码(Negative Response Code - NRC)

UDS中常用的缩写

UDS —— Unified Diagnostic Service(统一诊断服务)
ECU —— Electronic Control Unit(电子控制单元)
SF —— Single Frame(单帧)
FF —— First Frame(第一帧)
CF —— Consecutive Frame(连续帧)
FC —— Flow Control(流控制帧)
SF_DL —— Single Frame Data Length(单帧数据长度)
FF_DL —— First Frame Data Length(第一帧数据长度)
SN —— Sequence Number(帧序号)
FS —— Flow Status(流控制状态)
BS —— Block Size(块大小)
STmin —— Minimum Separation Time(最小连续帧时间间隔)
SID —— Service Identifier(服务标识符)
DTC —— Diagnostic Trouble Code(故障诊断代码)
DID —— Data Identifier(数据标识符)
NRC —— Negative Response Code(否定响应码)
EOL —— End Of Line(下线)
ISO —— International Standards Organization(国际标准组织)
NA —— Not Applicable(不适用)

1.Service ID服务标识符

在UDS协议中,Service ID(SID)是指服务标识符,用于标识要执行的服务。每个服务都有一个唯一的SID,在诊断会话中通过SID来区分要执行/响应哪种服务请求。

14229-1中定义了26种服务并将这些服务分为6大类:

诊断和通信管理类
数据传输类
存储数据传输类
输入输出控制类
例程功能类
上传下载类

表格中黑色加粗部分为常用的服务,其他的不常用。

大类

SID (Hex)

诊断服务名

服务Service

诊断和通信管理类

10

诊断会话控制

Diagnostic Session Control

11

ECU复位

ECU Reset

27

安全访问

Security Access

28

通讯控制

Comunication Control

3E

待机握手

Tester Present

83

访问时间参数

Access Timing Parameter

84

安全数据传输

Secured Data Transmission

85

控制DTC的设置

Control DTC Setting

86

事件响应

Response On Event

87

链路控制

Link Control

数据传输类

22

通过ID读数据

Read Data By Identifier

23

通过地址读取内存

Read Memory By Adress

24

通过ID读比例数据

Read Scaling Data By Identifier

2A

通过周期ID读取数据

Read Data By Periodic Identifier

2C

动态定义标识符

Dynamically Define Data Identifier

2E

通过ID写数据

Write Data By Identifier

3D

通过地址写内存

Write Memory By Adress

存储数据传输类

14

清除诊断信息

Clear Diagnostic Infomation

19

读取故障码信息

Read DTC Infomation

输入输出控制类

2F

通过ID控制输入输出

Input/Output Control By Identifier

例程功能类

31

例行程序控制

Routine Control

上传下载类

34

请求下载

Request Download

35

请求上传

Request Upload

36

数据传输

Transfer Data

37

请求退出传输

Request Transfer Exit

38

请求文件传输

Request File Transfer

2.诊断请求(Diagnostic Request)

?诊断请求是指诊断工具向车辆发送的请求消息,用于请求执行某个服务。诊断请求消息由三个部分组成:SID、子功能和实际数据。其中,SID用于标识要执行的服务,至于子功能:指的是这个服务还能更进一步的划分或者具有启动/暂停之类的子功能。

??尽管服务类型不尽相同,但UDS针对这些服务定义了统一的诊断请求包的格式,每个诊断请求由1个Byte的SID + 1个Byte的 sub-function(实际上是1bit spr + 7bit sub-function)+ 不定长的实际数据构成,其格式如下所示:

其中sub-function占据7位:

sub-function :0x00-0x7F
spr=1
该字节范围
0x00-0xFF
spr=0
该字节范围
0x00-0x7F

注:spr存在的目的是告诉ECU针对某个服务请求是否需要发送正响应数据,用于减少ECU发送不必要的响应,节约系统资源:

spr=1, 抑制正响应,即ECU不给出正响应;

spr=0, 需要ECU给出正响应,如果某个服务没有sub-function,即没有第二个字节,那默认是要发正响应的。


3.正响应/负响应(Positive/Negative Response)

诊断工具向车辆发送服务请求后,如果服务执行成功,则返回的响应消息称为正响应,反之返回的响应消息称为负响应。

?正响应报文的字节组成格式如下图所示:

一个最简单的例子(0x10-诊断会话控制服务):

一个不带sub-function的例子(0x22-通过DID读数据):

?负响应消息由两部分组成:SID和负响应码(NRC)。SID用于标识响应的服务,负响应码指示服务执行失败的原因。

??负响应报文的字节组成格式如下所示:

一个0x10-诊断会话控制服务例子:


4.负响应码(Negative Response Code - NRC)

在UDS协议中,负响应码用于指示服务执行失败的原因。NRC用一个字节表示,每个取值都对应一种不同的错误类型。

NRC码

含义

NRC码

含义

0x01 - 0x0f

暂保留;

0x78

收到请求,延迟响应;

0x10

未知错误,服务被拒绝;

0x79 - 0x7d

暂保留;

0x11

不支持该服务请求;

0x7e

当前会话下子功能不支持;

0x12

不支持子功能;

0x7f

当前会话下服务不支持;

0x13

消息长度或格式错误;

0x80

暂保留;

0x14

请求信息长度超出;

0x81

rpm(每分钟转速)太高;

0x15 - 0x20

暂保留;

0x82

rpm太低;

0x21

服务端正忙;

0x83

当前引擎正在运行;

0x22

条件不满足;

0x84

当前引擎未运行;

0x23

暂保留;

0x85

截止当前时间引擎运行时间太短;

0x24

请求顺序错误;

0x86

温度过高;

0x25

指令已经被接收,但是未被执行;

0x87

温度过低;

0x26

失败的操作导致当前操作无法执行;

0x88

车速过高;

0x27 - 0x30

暂保留;

0x89

车速过低;

0x31

参数错误;

0x8a

油门/踏板过高(超过了当前要求的最大阈值);

0x32

暂保留;

0x8b

油门/踏板过低;

0x33

安全校验未通过;

0x8c

变速器档位不在空档;

0x34

暂保留;

0x8d

变速器档位不在排挡;

0x35

密钥不匹配;

0x8e

暂保留;

0x36

已达到解锁最大错误次数;

0x8f

制动开关没有关闭

0x37

超时时间未到;

0x90

换挡杆不在驻车档;

0x38 - 0x4f

由扩展数据链路安全性保留;

0x91

变矩器离合器锁定;

0x50 - 0x6f

暂保留;

0x92

电压过高;

0x70

不允许上传下载;

0x93

电压过低;

0x71

数据传输中断;

0x94 - 0xef

暂保留(特定条件下);

0x72

擦除或烧写内存错误;

0xf0 - 0xfe

为汽车制造商保留;

0x73

块序列计数错误;

0xff

暂保留;

0x74 - 0x77

暂保留;




5.ECU诊断层与会话层参数

No

术语

说明

01

P2server

当tester给ECU发送请求时,ECU要在P2server时间内给出响应

02

P2server*

如果ECU在处理别的任务,不能给出响应,现在P2server内给出pending的响应,同时在P2server*时间内给出响应

03

P2Client

在tester端成功发送诊断请求后等待ECU发送响应时的超时时间

04

P2*Client

在接收到ECU应答的NRC为0x78时,到Tester收到ECU响应的单帧或首帧的超时时间

05

P4Server

ECU 接收一个请求(T_Data.indication)到最终响应(T_Data.request)开始传输的时间间隔

06

S3Server

保持在非默认会话下的超时时间,超时后返回默认会话模式

07

S3Client

发送下个TesterPresent以保持在非默认会话模式的时间

08

P3client_phys

诊断工具连续请求的时间间隔 - 物理

09

P3client_func

诊断工具连续请求的时间间隔 - 功能

S3server补充说明:

在非默认会话,如此时请求进入扩展会话10 03,且没有请求0x3E握手服务。则会在定时器S3server超时后,会话模式退回默认会话。一般该时间会设置为5000ms。


参考内容

[1]CSDN作者lingboweitu的文章《UDS常用缩写》,文章链接为:

https://blog.csdn.net/lingboweitu/article/details/84790728

[2] CSDN作者车载系统攻城狮的文章《UDS协议从入门到精通(UDS速查手册)》,文章链接为:

https://blog.csdn.net/qq_40309666/article/details/130831416

[3] CSDN作者《【车载开发系列】UDS当中的时间参数》,文章链接为:https://blog.csdn.net/Last_Impression/article/details/132452312

本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。


作 者 | 郭志龙

编 辑 | 郭志龙
校 对 | 郭志龙

Tags:

最近发表
标签列表