1.服务说明
客户端使用TransferData服务将数据从客户端传输到服务器(下载)或从服务器传输到客户端(上传)。
数据传输方向由前面的RequestDownload或RequestUpload服务定义。如果客户端发起了RequestDownload,则要下载的数据包含在TransferData请求消息中的参数transferRequestParameter中。如果客户端发起了RequestUpload,则要上传的数据包含在TransferData响应消息中的参数transferResponseParameter中。
TransferData服务请求包含一个blockSequenceCounter,用于改进错误处理,以防在多个TransferData请求的序列中一个TransferData服务失败。当收到RequestDownload (0x34)或RequestUpload (0x35)请求消息时,服务器的blockSequenceCounter应该初始化为1。这意味着RequestDownload (0x34)或RequestUpload (0x35)请求消息之后的第一个TransferData (0x36)请求消息以blockSequenceCounter为1开始。
2.请求消息
2.1请求消息定义
条件性:如果下载正在进行,则此参数是必需的
2.2子功能函数定义
此服务不使用子函数。
2.3请求消息数据参数定义
blockSequenceCounter:
blockSequenceCounter参数值从0x01开始,第一个TransferData请求位于RequestDownload(0x34)或RequestUpload(0x35)服务之后。对于每个后续的TransferData请求,其值递增1。值为0xFF时,blockSequenceCounter将翻转并在0x00处开始,并带有nextTransfer Data请求消息。
示例用例:
a.如果下载数据的TransferData请求在服务器中被正确接收和处理,但积极的响应消息没有到达客户端,那么客户端将确定一个应用层超时,并将重复相同的请求(包括相同的blockSequenceCounter)。服务器将接收重复的并且可以根据包含的blockSequenceCounter确定此TransferData请求是否重复。服务器将立即发送积极响应消息,而无需再次将数据写入其内存。
b.如果服务器没有正确地接收到下载数据的TransferData请求,那么服务器将不会发送积极的响应消息。客户端将确定一个应用层超时,并重复相同的请求(包括相同的blockSequenceCounter)。服务器将接收重复的TransferData请求,并可以根据包含的blockSequenceCounter确定这是一个新的TransferData。服务器将处理服务并发送积极的响应消息。
c.如果上传数据的TransferData请求在服务器中被正确接收和处理,但积极的响应消息没有到达客户端,那么客户端将确定一个应用层超时,并将重复相同的请求(包括相同的blockSequenceCounter)。服务器将接收重复的TransferData请求,并可以根据包含的blockSequenceCounter确定此TransferData请求是否重复。服务器将立即发送积极的响应消息,再次访问其内存中先前提供的数据。
d.如果服务器没有正确接收到上传数据的TransferData请求,那么服务器将不会发送积极的响应消息。客户端将确定一个应用层超时,并重复相同的请求(包括相同的blockSequenceCounter)。服务器将接收重复的TransferData请求,并可以根据包含的blockSequenceCounter确定这是一个新的TransferData。服务器将处理服务并发送积极的响应消息。
transferRequestParameterRecord:
此参数记录包含服务器支持数据传输所需的参数。此参数的格式和长度是车辆制造商指定的。例如,对于下载,transferRequestParameterRecord包括要传输的数据。
3.肯定响应消息
3.1肯定响应消息数据参数定义
blockSequenceCounter:
此参数是请求消息中blockSequenceCounter参数的回声。
transferResponseParameterRecord:
此参数应包含客户端支持数据传输所需的参数。此参数的格式和长度是特定于车辆制造商的。
示例:对于下载,参数transferResponseParameterRecord可能包括服务器计算的校验和。对于上传,参数transferResponseParameterRecord包括上传的数据。对于下载,参数transferResponseParameterRecord不应重复transferRequestParamete
4.支持的否定响应代码(NRC_)
该服务应执行以下否定响应代码。下表中记录了每个响应代码发生的情况。如果错误场景适用于服务器,则应使用列出的否定响应。
否定码 | 代名词 | 描述 |
0x13 | incorrectMessageLengthOrInvalidFormat | 如果信息长度错误,则应发送此NRC。(例如,消息长度不符合在对requestDownload服务的肯定响应中返回的maxNumberOfBlockLength参数的要求)。 |
0x24 | requestSequenceError | 服务器应使用以下响应代码: 1.如果在接收到针对该服务的请求时,RequestDownload或RequestUpload服务不是活动的; 2.如果RequestDownload或RequestUpload服务是活动的,但服务器已经接收到由activeRequestDownlod或RequestUpload-服务中的memorySize参数确定的所有数据; 注:服务器应接受重复的TransferData请求消息,其ablockSequenceCounter等于前一个TransferData要求消息中包含的值。 |
0x31 | requestOutOfRange | 如果出现以下情况,则应返回NRC: 1.transferRequestParameterRecord包含额外的控制参数(例如,额外的地址信息),并且此控制信息无效。 2.transferRequestParameterRecord与requestDownload或requestUpload服务参数maxNumberOfBlockLength不一致。 3.transferRequestParameterRecord与服务器的内存对齐约束不一致。 |
0x71 | transferDataSuspended | 如果下载模块长度不符合规定,则应退还该NRC的请求消息中发送的memorySize参数的要求requestDownload服务。 |
0x72 | generalProgrammingFailure | 如果服务器在下载数据期间擦除或编程永久存储设备(如闪存)中的内存位置时检测到错误,则应返回该NRC。 |
0x73 | wrongBlockSequenceCounter | 如果服务器检测到blockSequenceCounter的序列中有错误,则应返回此NRC。注意:服务器应接受重复具有等于前一个TransferData请求消息中包含的blockSequence计数器的TransferData要求消息。 |
0x92 / 0x93 | voltageTooHigh / voltageTooLow | 如果在服务器主电源输入端测得的电压超出将数据下载到服务器永久存储器(如闪存)的可接受范围,则应发送此返回代码(如适用)。 |
示例:
参见0x37服务