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

转载:https://blog.csdn.net/qq_40242571/article/details/121007310

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通过标识符写入数据请求SIDM0x2EWDBI

#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通过标识符写入数据响应SIDM0x6EWDBIPR

#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否定响应SIDM0x7FSIDNR
#2通过标识符写入数据请求SIDM0x2ESIDRQ
#3否定响应码M0xXXNRC_

6.1.否定响应码

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

消息长度错误或格式无效

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

IMLOIF
0x22

条件不正确

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

CNC
0x31

请求超出范围

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

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

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

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

ROOR

0x33

安全访问被拒绝

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

SAD
0x72

通用编程失败

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

GPF

6.2.NRC评估序列

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报文实体
01234567
请求通过标识符写入数据(首帧)0x100x140x2E0xF1

0x90

0x570x300x4C客户端
流控帧(服务端自动发出)0x300x080x0A服务端
请求通过标识符写入数据(连续帧)0x210x300x300x300x300x340x330x4D客户端
请求通过标识符写入数据(连续帧)

0x22

0x420x350x340x310x330x320x36客户端
肯定响应0x030x6E

0xF1

0x90服务端

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值