UDS统一诊断服务【十四】传输数据0X36服务

大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是UDS诊断传输数据0X36服务介绍,希望能对你有所帮助 。

大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是UDS诊断传输数据0X36服务介绍,希望能对你有所帮助 。

一、传输数据服务介绍

0X36服务就是用来传输数据的,当执行了请求下载服务(0X34)或请求上传服务(0X35)时,就会用到0X36服务。

数据传输的方向由请求下载服务(0X34)或请求上传服务(0X35)决定,如果客户端发起了请求下载服务(0X34),数据传输方向为客户端到服务器,要下载的数据包含在0X36服务 请求消息中的参数 transferRequestParamete中;

如果客户端发起了请求上传服务(0X35),数据传输方向为服务器到客户端,要上传的数据在0X36服务 响应消息中的参数 transferResponseParameter中。

TransferData服务请求包括一个blockSequenceCounter,以便在多个传输数据的序列中,如果传输数据服务失败,可以改进错误处理。 当接收到请求下载(0x34), 请求上传(0x35)或请求文件传输(0x38)的请求消息时(这里以0x34服务为准),服务器的blockSequenceCounter应该初始化为1。

这意味着在请求下载(0x34), 请求上传(0x35)或请求文件传输(0x38)请求消息之后的第一个数据传输(0x36)请求消息中,块序列计数器的值为1

UDS统一诊断服务【十四】传输数据0X36服务

二、数据格式介绍

2.1 请求报文

格式:

[SID] + [blockSequenceCounter] + [transferRequestParameterRecord]

这个服务也是没有子功能这个参数的

UDS统一诊断服务【十四】传输数据0X36服务

参数介绍:

1)数据块顺序计数值(blockSequenceCounter)

blockSequenceCounter参数值从0x01开始,是请求下载(0x34), 请求上传(0x35)或请求文件传输(0x38)服务之后的第一个TransferData请求。对于每个后续的TransferData请求,其值递增1。递增到0xFF时,blockSequenceCounter又从0x00开始发送下一个TransferData请求消息

示例:

a)如果下载数据的TransferData请求在服务器中被正确接收和处理,但是积极的响应消息没有到达客户端,那么客户端将确定一个应用层超时,并将重复相同的请求(包括相同的blockSequenceCounter)。服务器将接收重复的TransferData请求,并可以根据包含的blockSequenceCounter确定此TransferData请求是否重复。服务器将立即发送积极响应消息,而无需再次将数据写入其内存。

b)如果服务器没有正确地接收到下载数据的TransferData请求,那么服务器将不会发送积极的响应消息。客户端将确定一个应用层超时,并重复相同的请求(包括相同的blockSequenceCounter)。服务器将接收重复的TransferData请求,并可以根据包含的blockSequenceCounter确定这是一个新的TransferData。服务器将处理服务并发送正响应消息。

c)如果上传数据的TransferData请求在服务器中被正确接收和处理,但积极的响应消息没有到达客户端,那么客户端将确定一个应用层超时,并将重复相同的请求(包括相同的blockSequenceCounter)。服务器将接收重复的TransferData请求,并可以根据包含的blockSequenceCounter确定此TransferData请求是否重复。服务器将立即发送积极的响应消息,再次访问其内存中先前提供的数据。

d)如果服务器没有正确接收到上传数据的TransferData请求,那么服务器将不会发送积极的响应消息。客户端将确定一个应用层超时,并重复相同的请求(包括相同的blockSequenceCounter)。服务器将接收重复的TransferData请求,并可以根据包含的blockSequenceCounter确定这是一个新的TransferData。服务器将处理服务并发送正响应消息。

2)传输请求参数记录(transferRequestParameterRecord)

此参数记录包含服务器支持数据传输所需的参数。该参数的格式和长度由汽车制造商指定。

示例:对于下载,transferRequestParameterRecord包含要传输的数据

UDS统一诊断服务【十四】传输数据0X36服务

2.2 响应报文

肯定响应

报文格式:

[SID + 0X40] + [blockSequenceCounter] + [transferResponseParameterRecord]

UDS统一诊断服务【十四】传输数据0X36服务

UDS统一诊断服务【十四】传输数据0X36服务

block Sequence Counter:这个和请求消息中的保持一致就行

transferResponseParameterReco rd:这个如果前面是上传服务,则这个参数是必须的,是包含要上传的数据;如果前面是下载服务,这个参数是可选项,可以是下载数据的校验和。

否定响应:

格式:[0X7F] + [SID] + [NRC]

支持的NRC

UDS统一诊断服务【十四】传输数据0X36服务

三、举例

看个实际的例子:

0x102是这一个block要传输的数据字节数,36 后面的01是数据块序列计数器,01后面的就是要传输的实际内容了

UDS统一诊断服务【十四】传输数据0X36服务

回复的正响应是:76 01,此处没有传数据的校验和,具体的看项目的实际需求,有些项目可能需要传输校验和。

来源:嵌入式老林

声明:本站内容资源均来源于网友分享及网络公开合法渠道,但我们不对这些内容的观点、描述的准确性负责,也不保证所有信息的原创性、真实性、完整性及即时性。对于本站所含文章或资料的版权问题,如您发现有侵犯版权的情况,请联系我们进行处理。同时,我们提倡将本站内容用于个人学习交流,严禁未授权的商业用途,否则由此产生的法律后果由使用者自行承担。感谢支持!
车载通讯

UDS统一诊断服务【十三】请求下载0X34服务

2024-6-24 12:03:43

车载通讯

UDS统一诊断服务【十五】请求传输退出0X37服务

2024-6-24 12:48:40

2 条回复 A文章作者 M管理员
  1. user885

    谢谢分享

个人中心
今日签到
有新私信 私信列表
搜索