汽车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评估序列
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诊断之通过标识符写入数据服务(0x2E)深度剖析相关推荐
- 汽车UDS诊断之读取DTC信息服务(0x19)深度剖析
ReadDTCInformation就是读取DTC信息服务,DTC即故障编码,简称故障码. 读取DTC信息 服务 描述 ReadDTCInformation 客户端向一个服务端或多个服务端请求驻留的D ...
- 汽车UDS诊断教程 ISO15765(六)
ISO15765-2是什么?包含哪些内容? 接上一节了解具体数据链路层的使用 数据链路层接口服务 L_Data.request 该请求服务需要通过<Idetifier>标识,将& ...
- 汽车UDS诊断教程 ISO15765(十)
地址结构 概述 目标地址及源地址都编码在 29 位 CAN 标识符中,并且每个长度为 11 位. 地址的定义 一个地址包含两个部分 a) 网络地址 网络地址部分包含第一个连续的位"X&quo ...
- 【车载开发系列】UDS诊断---读取周期标识符($0x2A)
[车载开发系列]UDS诊断-读取周期标识符($0x2A) UDS诊断---读取周期标识符($0x2A) [车载开发系列]UDS诊断---读取周期标识符($0x2A) 一.概念定义 二.报文格式 1)请 ...
- 汽车UDS诊断详解及Vector相关工具链使用说明——2.2.6 周期读取DID数据(0x2A)
1. 概述 周期读取数据服务可以命令ECU周期性返回某个数据. 该服务的DID都位于0xF200-0xF2FF范围内,所以该服务的请求报文中不包含DID完整的两字节,而是只包含低字节,省略了高字节0x ...
- 汽车UDS诊断详解及Vector相关工具链使用说明——2.3.1 故障码(DTC)格式详解
1. 概述 存储数据传输功能单元其实就是读取故障码信息和清除故障码两个服务.我们本文先来看一下我们一直在说的故障码的格式是怎样的. 我们通常把诊断分成两种,我们之前一直在讲的UDS诊断属于增强型诊断, ...
- 汽车UDS诊断之诊断设备在线服务(0x3E)深度剖析
TesterPresent就是诊断设备在线服务,它是最简单的一个诊断服务. 诊断设备在线 服务 描述 TesterPresent 客户端向某服务端请求来确认此服务端是否在线,客户端有没有跟服务端连接上 ...
- 汽车UDS诊断详解及Vector相关工具链使用说明——2.1.1 诊断和通讯管理功能单元概述
从本章开始,会为大家详细讲解UDS中常用的诊断服务. 标准中把UDS所有诊断服务分为了以下几个部分: 诊断和通信管理功能单元 数据传输功能单元 传输储存的数据功能单元 输入输出控制功能单元 远程激活例 ...
- 汽车UDS诊断详解及Vector相关工具链使用说明——2.1.3 初步了解CDD(以10服务为例)
我们前一篇文章详细讲了诊断会话控制服务10服务,这篇文章来讲一下如何在CDD文件中配置这个服务和相关的诊断会话状态等内容. 具体包括: 服务属性设置 服务请求和响应格式设置 参数设置 否定响应码设置 ...
最新文章
- 聊聊企业级 Java 应用最重要的4个性能指标
- 强人工智能还有多远?先用10到20年突破这5个数学问题
- linux脚本实现复制,Shell脚本实现复制文件到多台服务器的代码分享
- [转载]Java数据库设计中的14个技巧
- element ui表单验证
- for range 经典问题
- 手把手教你Python获取全部金融数据
- 全网最简单明了的MySQL连接Eclipse方法(JDBC详细安装方式及简单操作)2020新版
- cad大理石填充图案_CAD制图初学入门者必须知道的CAD填充问题
- V-rep学习笔记:ROSInterface
- 广播信道的数据链路层和CSMA/CD协议
- 为什么每个程序员都应该学习C语言?
- 3D点云目标检测算法汇总
- 6425C-Lab8 使用组策略管理安全性(2)
- fiddler视频分析
- openwrt定时任务 2021-10-08
- 微生物组实验手册:中科院、北大和清华等52家单位的74个团队的153篇方法正在创作中(15篇已投稿)...
- 青龙面板关闭青龙二级验证
- 《MySQL系列-开发相关》MySQL新建数据库表并存储2010年到2030年的日期
- 微信最新授权登录 微信小程序无法弹出授权弹框 open-type getUserInfo获取不到用户信息 授权不弹框