汽车UDS诊断之通过标识符写入数据服务(0x2E)深度剖析

WriteDataByIdentifier就是通过标识符写入数据服务,这里的标识符(ID)指的是数据标识符,也就是我们经常说的DID

目录

1.英文术语

2.缩写表

3.服务描述

4.请求消息定义

4.1.请求消息子功能定义

4.2.请求消息数据参数定义

5.肯定响应消息定义

5.1.肯定响应消息数据参数定义

6.否定响应消息定义

6.1.否定响应码

6.2.NRC评估序列

7.服务使用示例

7.1.示例#1-写入数据标识符0xF190(VIN码)

7.1.1.步骤1:请求通过标识符写入数据

7.1.2.操作汇总


通过标识符写入数据
服务 描述
WriteDataByIdentifier

客户端向服务端请求写入一个DID对应标识的数据记录值。

1.英文术语

英文术语 翻译
WriteDataByIdentifier 通过标识符写入数据

WriteDataByIdentifier Request SID

通过标识符写入数据请求SID

ISO14229定义此值为0x2E

WriteDataByIdentifier Response SID

通过标识符写入数据响应SID

ISO14229定义此值为(0x2E+0x40)

dataIdentifier 数据标识符,缩写为DID

2.缩写表

缩写 解释
SID 服务标识符
DID 数据标识符
Cvt

约定值

M 强制的

C 有条件的

U 用户选项

NRC

否定响应码

3.服务描述

通过标识符写入数据服务就是向对应的数据标识符写入数据记录值

通过标识符写入数据服务重点知识:

  • 该服务请求中只能有一个DID
  • 对于某些特定的DID,可以设置在某个安全等级下访问某个诊断会话模式下访问
  • 使用此服务写入数据时,可以设置某些前提条件(譬如:车速为0km/h);
  • 对于某些特定的DID,可以禁止写访问,所以这些DID不能使用此服务写入(譬如:动态定义的DID读写属性是只读);

通过标识符写入数据服务可能用途:

  • 配置信息写入到服务器,如:VIN码;
  • 清除非易失性存储器
  • 重置学习值;
  • 设置选项类型(对某些数据设置选项,以供选择运行

4.请求消息定义

请求消息定义
A_Data字节 参数名称 Cvt 字节值 助记符
#1 通过标识符写入数据请求SID M 0x2E WDBI

#2

#3

DID[]= [

              字节#1(MSB)

              字节#2]

M

M

0x00-0xFF

0x00-0xFF

DID_

HB

LB

#4

#m+3

数据记录[]= [

                        字节#1(MSB)

                        字节#2]

M

U

0x00-0xFF

0x00-0xFF

DREC_

DATA_1

    :

DATA_m

4.1.请求消息子功能定义

该服务不使用子功能参数。(肯定也没有抑制肯定响应位,因为没有子功能参数

4.2.请求消息数据参数定义

请求消息数据参数定义
定义

DID

此参数标识服务端的数据记录值。譬如:某协议定义了DID = 0xF190,标识了服务端的VIN码。

简单说此参数就是一个标识。

注:有关DID参数定义,可查阅

数据记录

此参数是客户端向服务端请求写入的关联DID所标识的数据记录值,此数据记录值由车辆制造商定义

5.肯定响应消息定义

肯定响应消息定义
A_Data字节 参数名称 Cvt 字节值 助记符
#1 通过标识符写入数据响应SID M 0x6E WDBIPR

#2

#3

DID[]#1 = [

                   字节#1(MSB)

                   字节#2]

M

M

0x00-0xFF

0x00-0xFF

DID_

HB

LB

5.1.肯定响应消息数据参数定义

肯定响应消息数据参数定义
定义

DID

此参数标识服务端的数据记录值,是与上面的请求消息中的DID相同。譬如:某协议定义了DID = 0xF190,标识了服务端的VIN码。

6.否定响应消息定义

否定响应消息定义
A_Data字节 参数名称 Cvt 字节值 助记符
#1 否定响应SID M 0x7F SIDNR
#2 通过标识符写入数据请求SID M 0x2E SIDRQ
#3 否定响应码 M 0xXX NRC_

6.1.否定响应码

此服务支持的否定响应码
否定响应码 描述 助记符
0x13

消息长度错误或格式无效

如果消息的长度错误,则应发送此否定响应码。

IMLOIF
0x22

条件不正确

如果服务端不满足条件,就无法清除储存在服务端中的DTC相关信息,则应返回此NRC。

CNC
0x31

请求超出范围

以下情况下,应发送该NRC:

——设备不支持所请求的DID值;

——当前会话中不支持所请求的DID;

——该DID设置的读写属性是只读

ROOR

0x33

安全访问被拒绝

如果请求写入的DID有一个需要进行安全访问,此时服务端若处于非解锁状态或非对应的解锁状态下,则应返回此NRC。

SAD
0x72

通用编程失败

如果服务端在写入存储器(根据地址写)时检测到错误,则应返回此NRC。

GPF

6.2.NRC评估序列

汽车UDS诊断之通过标识符写入数据服务(0x2E)深度剖析_第1张图片

7.服务使用示例

7.1.示例#1-写入数据标识符0xF190(VIN码)

7.1.1.步骤1:请求通过标识符写入数据

譬如:在某个协议中定义,该数据标识符0xF190包含VIN码

通过标识符写入数据请求消息

消息方向

客户端→服务端

消息类型

请求

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1

通过标识符写入数据请求SID

0x2E

WDBI

#2

#3

DID[]= [

              字节#1(MSB)

              字节#2]

0xF1

0x90

DID_B1

DID_B2

#4

#5

#6

#7

#8

#9

#10

#11

#12

#13

#14

#15

#16

#17

#18

#19

#20

数据记录[] = [

                          数据#1 = VIN数字1 ="W"

                          数据#2 = VIN数字2 ="O"

                          数据#3 = VIN数字3 ="L"

                          数据#4 = VIN数据4 ="O"

                          数据#5 = VIN数据5 ="O"

                          数据#6 = VIN数据6 ="O"

                          数据#7 = VIN数据7 ="O"

                          数据#8 = VIN数据8 ="4"

                          数据#9 = VIN数据9 ="3"

                          数据#10 = VIN数据10 ="M"

                          数据#11 = VIN数据11 ="B"

                          数据#12 = VIN数据12 ="5"

                          数据#13 = VIN数据13 ="4"

                          数据#14 = VIN数据14 ="1"

                          数据#15 = VIN数据15 ="3"

                          数据#16 = VIN数据16 ="2"

                          数据#17 = VIN数据17 ="6"]

0x57

0x30

0x4C

0x30

0x30

0x30

0x30

0x34

0x33

0x4D

0x42

0x35

0x34

0x31

0x33

0x32

0x36

DREC_DATA1

DREC_DATA2

DREC_DATA3

DREC_DATA4

DREC_DATA5

DREC_DATA6

DREC_DATA7

DREC_DATA8

DREC_DATA9

DREC_DATA10

DREC_DATA11

DREC_DATA12

DREC_DATA13

DREC_DATA14

DREC_DATA15

DREC_DATA16

DREC_DATA17

通过标识符写入数据响应消息

消息方向

服务端→客户端

消息类型

响应

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1

通过标识符读取数据响应SID

0x6E

WDBIPR

#2

#3

DID[] = [

                字节#1(MSB)

                字节#2]

0xF1

0x90

DID_B1

DID_B2

7.1.2.操作汇总

步骤1:请求通过标识符读取数据

图解:

注:超过8字节数据使用首帧和连续帧进行拆解。

操作 CAN报文 实体
0 1 2 3 4 5 6 7
请求通过标识符写入数据(首帧) 0x10 0x14 0x2E 0xF1

0x90

0x57 0x30 0x4C 客户端
流控帧(服务端自动发出) 0x30 0x08 0x0A 服务端
请求通过标识符写入数据(连续帧) 0x21 0x30 0x30 0x30 0x30 0x34 0x33 0x4D 客户端
请求通过标识符写入数据(连续帧)

0x22

0x42 0x35 0x34 0x31 0x33 0x32 0x36 客户端
肯定响应 0x03 0x6E

0xF1

0x90 服务端

到这里我们的0x2E服务基本学完了。

以上解释有没有解决大家的疑惑,如果还是觉得有疑惑的地方,欢迎大家踊跃提出,一起分享,共同进步!!!

有CSDN号的也可以帮忙点个关注,我会陆续更新其它UDS服务

你可能感兴趣的:(UDS诊断,c语言)