《UDS协议从入门到精通》系列——图解0x36:数据传输
Tip📌:本文描述中但凡涉及到其他UDS服务的,将陆续提供链接跳转方式以便快速了解他们。(各服务介绍持续更新中…)
学习UDS基础知识以及其他相关内容?>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<
一、简介
该服务用于在Tester和目标ECU之间传输数据,可以是从Tester向目标ECU传输(下载)或从目标ECU向Tester传输(上传)。数据传输方向由前面的0x34-RequestDownload或0x35-RequestUpload服务定义。即0x36服务必须在0x34或0x35服务之后才能正常执行。
- 如果Tester发起了0x34-RequestDownload请求,则要下载的数据包含在该服务请求消息中的transferRequestParameter参数中;
- 如果Tester发起了0x35-RequestUpload请求,则要上传的数据包含在该服务响应消息中的transferResponseParameter参数中。
二、数据包格式
2.1 服务请求格式
该服务不支持sub-function。部分参数的含义如下所示:
blockSequenceCounter(1Byte):参数的初始值为0x01,从RequestDownload (0x34)或RequestUpload (0x35)服务后的第一个TransferData请求开始。每个后续的TransferData请求,blockSequenceCounter的值递增1。当blockSequenceCounter的值达到0xFF时,它将重新变为0x00,然后随着下一个TransferData请求继续递增。
以数据下载过程中该服务的使用为例,可以看到该参数的作用:
- 如果下载数据的TransferData请求在目标ECU中已经被正确接收和处理,但目标ECU发出的正响应消息未能到达Tester,则Tester会检测到超时,并重复相同的请求(包括相同的blockSequenceCounter)。于是目标ECU会接收到重复的TransferData请求,并根据包含的blockSequenceCounter确定这是一个重复的请求。这是目标ECU会立即发送正响应消息,而无需再次写入数据到其内存中。
- 如果下载数据的TransferData请求在目标ECU中未能正确接收,则目标ECU不会发送正响应消息。于是Tester端会检测到超时,并重复相同的请求(包括相同的blockSequenceCounter)。目标ECU会接收到重复的TransferData请求,并根据包含的blockSequenceCounter确定这是一个新的请求。服务器会处理该服务,并发送正响应消息。
transferResponseParameterRecord(不定长):这个参数记录包含目标ECU需要支持数据传输的参数。这些参数的格式和长度是由车辆制造商指定的。例如,在下载操作中,transferRequestParameterRecord包含要传输的数据。
2.2 服务响应格式
2.2.1 肯定响应
blockSequenceCounter(1Byte):跟请求消息中的保持一致。
transferResponseParameterRecord(不定长):这个参数的格式和长度是由车辆制造商指定的。例如,在下载操作中(上一条请求是0x34),那么该参数可能包含目标ECU根据请求下载的数据计算得出的校验和。在上传操作中(上一条请求是0x35),该参数包含要上传的数据。在下载操作中,该参数不应与transferRequestParameterRecord重复。
2.2.2 否定响应
可能出现的NRC及其含义如下:
NRC | 含义 |
---|---|
0x13 | 消息长度错误 |
0x24 | 两种情况会回复这个NRC: ① 收到0x36请求时,0x34/0x35服务未处于活动状态,也就是在这之前没收到上传下载请求; ② 之前收到了上传下载请求,但目标ECU已根据上一次请求中的memorySize参数接收到了所有的数据; |
0x31 | 请求参数不受支持,参数错误 |
0x71 | 如果下载模块的长度不符合0x34-请求下载服务请求消息中的memorySize参数的要求,则应返回此NRC。 |
0x72 | 一般的刷写错误,比如写flash出错 |
0x73 | 如果目标ECU检测到blockSequenceCounter的序列错误,应返回此NRC。 注意,如果请求消息的blockSequenceCounter与前一个请求消息中的blockSequenceCounter相等, 则目标ECU应接受重复的那个TransferData请求消息。 |
0x92/0x93 | 电压条件不满足,比如目标ECU的主电源引脚上测量到的电压超出了下载数据到其永久存储器(例如闪存)的可接受范围 |
NRC的处理流程如下所示(即推荐的错误情况检查顺序):
三、通信示例
本小节不做通信示例。因为通常0x34、0x36、0x37三个服务是放在一起使用的,学习完这三个服务之后将做一个详细的通信示例,以便更好地了解整个数据传输过程。