ISO 14229 -1 上传下载功能单元(Upload Download Function Uint)
概述
功能定义:
1.RequestDownload(0x34) Service / 请求下载 0x34服务 :上位机请求下载数据到ECU中。
2.RequestUpload(0x35)Service / 请求上传 0x35服务:上位机请求Ecu上传数据到上位机中。
3.TransferData(0x36)Service / 传输数据 0x36服务:上位机下载数据到ECU中或者请求ECU上传数据到上位机中。
4.RequestTransferExit(0x37)Service / 请求传输退出 0x37服务:上位机请求终止数据传输。
5.RequestFileTransfer(0x38)Service / 请求文件传输 0x38服务:上位机请求ECU和上位机之间的文件传输。
RequestDownload(0x34) Service / 请求下载 0x34服务
31服务的作用是上位机去下载数据到ECU中。ECU收到 requestDownload 请求信息后,应采取一切必要行动接收数据,然后再发送肯定的响应信息。
Request message 34服务发送的请求消息
Request message definition 请求消息的定义
此服务无子功能。
Request message data-parameter definition 请求消息中数据参数的定义
1.dataFormatIdentifier:该数据参数是一个字节值,每个字节分别编码。高字节指定 “压缩方法”,低字节指定 “加密方法”。数值 0x00 表示既不使用压缩方法,也不使用加密方法。0x00 以外的值与车辆制造商有关。
2.addressAndLengthFormatIdentifier:该参数是一个字节值,每个字节单独编码
⎯ 第 7 - 4 位:内存大小参数的长度(字节数 )
⎯ 第 3 - 0 位:内存地址参数的长度(字节数)
3.memoryAddress:该参数是定义上位机请求下载数据到ECU时,数据下载到ECU中的位置。 该地址使用的字节数由 addressAndLengthFormatIdentifier 的低字节(第 3 - 0 位)定义。内存地址参数中的字节#m 始终是服务器中引用地址的最小有效字节。地址中最重要的字节可用作内存标识符。
使用内存标识符的一个例子是具有 16 位寻址和内存地址重叠的双处理器的ECU(当给定地址对任一处理器有效,但产生不同的物理内存设备或使用内部和外部闪存时)。在这种情况下,memoryAddress 参数中一个未使用的字节可指定为内存标识符,用于选择所需的内存设备。该功能的使用应由车辆制造商/系统供应商确定。
4.memorySize:ECU使用该参数将内存大小与 TransferData 服务期间传输的数据总量进行比较。这样可以提高编程安全性。该大小所使用的字节数由 addressAndLengthFormatIdentifier(地址和长度格式标识符)的高位字节(第 7 - 4 位)定义。如果使用了数据压缩,内存大小代表的是压缩后的大小还是未压缩的大小,这取决于车辆制造商。
Positive response message 正响应消息
正响应消息的定义
lengthFormatIdentifier:此参数为1个字节,每个片段分别编码。
⎯ 第 7 - 4 位:maxNumberOfBlockLength 参数的长度(字节数)。
⎯ 第 3 - 0 位:由文档保留,将设置为“0”
该参数的格式与请求报文中包含的 addressAndLengthFormatIdentifier 参数的格式一致。除了低位必须设置为 “0”。
maxNumberOfBlockLength:该参数由 requestDownload 正响应信息使用,用于通知上位机在每条来自上位机的 TransferData 请求信息中包含多少数据字节(maxNumberOfBlockLength)。该长度反映了完整的信息长度,包括服务标识符和传输数据请求信息中的数据参数。该参数允许上位机在开始向ECU传输数据前适应ECU的接收缓冲区大小。服务器必须接受长度等于其报告的
maxNumberOfBlockLength 的传输数据请求。至于接受长度小于 maxNumberOfBlockLength 的传输数据请求(如果有),则取决于服务器的具体情况。请注意,可能要求给定数据块中的最后一个传输数据请求长度小于 maxNumberOfBlockLength。不允许上位机写入传输数据报文(无论是压缩格式还是未压缩格式)中不包含的额外数据字节(即填充字节),因为这将影响写入后续传输数据请求数据的内存地址。
负响应代码
本服务应执行以下负面响应代码。表397中记录了每个响应代码发生的情况。如果错误场景适用于ECU,则应使用所列出的负面响应。
该服务的Nrc回复顺序应按照下述表序列
RequestUpload(0x35)Service / 请求上传 0x35服务
此服务作用于上位机请求Ecu上传数据到上位机中。
请求消息
请求消息定义
此服务不支持子功能参数
请求消息数据定义
正响应消息
正响应消息定义
正响应消息数据定义
负响应代码 NRC
负响应代码回复序列
TransferData(0x36)Service / 传输数据 0x36服务
上位机使用此服务来将数据从上位机传输到ECU(Download)或从ECU传输到上位机(Upload)。
数据传输方向由前面的 RequestDownload 或 RequestUpload 服务定义。如果上位机发起了请求下载,要下载的数据就包含在 TransferData 请求信息的参数 transferRequestParameter 中。如果上位机发起了请求上传,则要上传的数据包含在 TransferData 响应信息的参数 transferResponseParameter 中。
TransferData 服务请求包括一个 blockSequenceCounter,以便在 TransferData 服务在多个 TransferData 请求序列中失败时改进错误处理。当收到 RequestDownload (0x34) 或 RequestUpload (0x35) 请求信息时,ECU的 blockSequenceCounter 应初始化为 1。这意味着继 RequestDownload (0x34) 或 RequestUpload (0x35) 请求报文之后的第一个 TransferData (0x36) 请求报文将以 1 的 blockSequenceCounter 开始。
请求消息
请求消息定义
此服务不包含子功能参数
请求服务数据参数定义
1.blockSequenceCounter:在 RequestDownload (0x34) 或 RequestUpload (0x35) 服务后的第一个 TransferData 请求中,blockSequenceCounter 参数值从 0x01 开始。之后的每个传输数据请求,其值都以 1 为单位递增。当值为 0xFF 时,区块序列计数器会翻转,并从下一个传输数据请求信息的 0x00 开始。
使用案例:
- 如果ECU正确接收并处理了下载数据的 TransferData 请求,但上位机没有收到肯定的响应信息,那么上位机就会判定应用层超时,并重复相同的请求(包括相同的 blockSequenceCounter)。ECU将收到重复的传输数据请求,并可根据包含的 blockSequenceCounter 确定此传输数据请求是重复的。服务器将立即发送肯定的响应信息,而不会再次将数据写入内存。
- 如果ECU没有正确接收到下载数据的 TransferData 请求,ECU就不会发送肯定的响应信息。上位机将确定应用层超时,并重复相同的请求(包括相同的 blockSequenceCounter)。ECU将收到重复的 TransferData 请求,并根据包含的 blockSequenceCounter 判断这是一个新的 TransferData。ECU将处理该服务,并发送肯定的响应信息。
- 如果ECU正确接收并处理了上传数据的 TransferData 请求,但上位机没有收到肯定的响应信息,那么上位机就会判定应用层超时,并重复相同的请求(包括相同的 blockSequenceCounter)。ECU将收到重复的传输数据请求,并可根据包含的 blockSequenceCounter 确定此传输数据请求是重复的。ECU将立即发送肯定响应信息,再次访问内存中先前提供的数据。
- 如果ECU没有正确接收到上传数据的 TransferData 请求,ECU就不会发送肯定的响应信息。上位机将确定应用层超时,并重复相同的请求(包括相同的 blockSequenceCounter)。ECU将收到重复的 TransferData 请求,并根据包含的 blockSequenceCounter 判断这是一个新的 TransferData。ECU将处理该服务,并发送肯定的响应信息。
2.transferRequestParameterRecord:此参数记录包含服务器支持数据传输所需的参数。此参数的格式和长度(s)是车辆制造商特定的。
例子:对于下载来说,transferRequestParameterRecord包含了传输的数据。
正响应消息
正响应消息的定义
正响应消息数据参数的定义
1.blockSequenceCounter:该参数是请求信息中 blockSequenceCounter 参数的映现。
2.transferResponseParameterRecord:该参数应包含客户端支持数据传输所需的参数。该参数的格式和 该参数的格式和长度取决于车辆制造商。
例子:对于下载,参数 transferResponseParameterRecord 可以包含服务器计算的校验和。对于上传,参数 transferResponseParameterRecord 包括上传的数据。对于下载,参数 transferResponseParameterRecord 不应重复 transferRequestParameterRecord。
支持的NRC负响应码
负响应码回复序列
RequestTransferExit(0x37)Service / 请求传输退出 0x37服务
上位机使用此服务来终止上位机和ECU之间的数据传输(上载或下载)
请求消息
请求消息定义
此服务无子功能函数
请求消息数据参数定义
transferRequestParameterRecord:该参数记录包含ECU支持数据传输所需的参数。该参数的格式和长度取决于车辆制造商。
正响应消息
正响应消息定义
正响应消息数据参数定义
transferResponseParameterRecord:该参数应包含上位机支持数据传输所需的参数。该参数的格式和长度取决于车辆制造商。
负响应代码
负响应代码回复序列
【示例】下载/上传数据消息流程
下载数据到ECU中
假设
本子条款规定了从上位机向ECU传输数据(下载)的条件。
示例包括三个步骤。
第一步,是上位机和ECU执行 RequestDownload 服务。通过这项服务,以下信息作为参数在上位机和ECU之间的请求和正响应信息中交换。
ECU应使用此参数值与请求程序传输退出服务执行期间所传输的实际字节数进行比较。
在第二步中,客户端从内存地址 0x602000 开始向闪存传输 65 535 字节的数据到服务器。
在第三步中,客户端通过 requestTransferExit 服务终止向服务器传输数据。
测试条件:点火 = 开,发动机 = 关,车速 = 0 [kph]
在本例中,假设服务器支持三个字节的内存地址(memoryAddress)和三个字节的内存大小(MemorySize)。如果 MemorySize 包含未压缩的大小,则无法计算包含 127 个数据字节的 TransferData 服务的数量,因为压缩方法及其压缩率没有标准化。如果 MemorySize 包含压缩后的大小,则包含 127 个数据字节的 TransferData 服务总数为 516 个,其后是一个包含 3 个字节的 TransferData 请求。因此,假定最后一个 TransferData 请求报文包含的 blockSequenceCounter 等于 0x05。
Step #1:请求下载
Step #2:传输数据
Step #3:请求传输退出
从ECU中上传数据
本子条款规定了从ECU向上位机传输数据(上传)的条件。
示例包括三个步骤。
第一步,上位机和ECU执行请求上传服务。通过这项服务,以下信息将作为参数在上位机和ECU之间的请求和正响应信息中交换:
该参数值应指示应传输多少个数据字节,ECU应使用其与执行请求传输退出服务期间实际传输的字节数进行比较。
在第二步中,ECU从外部 RAM 中传输 511 个数据字节(4 个传输数据服务,129 个数据字节(127 个ECU数据字节 + 1 个服务标识数据字节 + 1 个块序列计数器字节);1 个传输数据服务,5 个数据字节(3 个ECU数据字节 + 1 个服务标识数据字节 + 1 个块序列计数器字节))。
从ECU内存地址 0x201000 开始。
在第三步中,上位机通过 requestTransferExit 服务终止向ECU传输数据。
测试条件:点火 = 开,发动机 = 关,车速 = 0 [kph] 。
在本例中,假设ECU支持三个字节的内存地址(memoryAddress)和三个字节的内存大小(MemorySize)。此外,假设ECU支持 TransferData (0x36) 服务中的 blockSequenceCounter。
Step#1:请求上传
Step #2:传输数据
·
Step #3:请求传输退出
RequestFileTransfer(0x38)Service / 请求文件传输 0x38服务
服务描述
上位机使用 requestFileTransfer 服务启动从上位机到ECU或从ECU到上位机的文件数据传输(下载或上传)。此外,该服务还具有检索文件系统信息的功能。
如果ECU实现了用于数据存储的文件系统,该服务可作为支持数据上传和下载功能的 RequestDownload 和 RequestUpload 服务的替代解决方案。在配置文件系统的下载或上传流程时,应使用 RequestFileTransfer 服务来替代 RequestDownload 或 RequestUpload。实际的数据传输和数据传输的终止是通过使用 TransferData 和 RequestTransferExit 来实现的,与 RequestDownload 或 RequestUpload 服务相同。这项服务还包括删除ECU文件系统上的文件或目录的功能。对于这种用例,TransferData 和 RequestTransferExit 服务并不适用。
ECU收到 RequestFileTransfer 请求信息后,应采取一切必要的措施接收或传输数据,然后再发送肯定的响应信息。
请求消息
请求消息定义
此服务无子功能函数参数
请求消息数据参数定义
- modeOfOperation:该数据参数定义了应用于 filePathAndName 参数中指示的文件或目录的操作类型。
附件 G 中定义了该数据参数的值。 - filePathAndNameLength:定义参数 filePath 的字节长度。
- filePathAndName:根据参数 modeOfOperation(操作模式),定义服务器文件系统中添加、删除、替换或读取文件的位置。
此外,该参数还包括作为文件路径一部分的被添加、删除、替换或读取文件的文件名。
如果参数 modeOfOperation 等于 0x05(ReadDir),则该参数表示要读取的目录。
该参数的每个字节都应按 ASCII 格式编码。 - dataFormatIdentifier:该数据参数是一个字节值,每个字节分别编码。高字节指定 “压缩方法”,低字节指定 “加密方法”。数值 0x00 表示既不使用压缩方法,也不使用加密方法。0x00 以外的值与车辆制造商有关。
如果 modeOfOperation 参数等于 0x02(DeleteFile)和 0x05(ReadDir),则请求信息中不应包含该参数。 - fileSizeParameterLength:以字节为单位定义参数 fileSizeUncompressed 和 fileSizeCompressed 的长度。
如果 modeOfOperation 参数等于 0x02(DeleteFile)、0x04(ReadFile)或 0x05(ReadDir),则请求信息中不应包含该参数。 - fileSizeUncompressed:以字节为单位定义未压缩文件的大小。
如果 modeOfOperation 参数等于 0x02(DeleteFile)、0x04(ReadFile)或 0x05(ReadDir),则请求信息中不应包含该参数。 - fileSizeCompressed:以字节为单位定义压缩文件的大小。
如果传输的是未压缩文件,该参数的所有字节都应设置为参数 fileSizeUncompressed 中使用的大小信息。
如果参数 modeOfOperation 等于 0x02(DeleteFile)、0x04(ReadFile)或 0x05(ReadDir),则请求信息中不应包含此参数。
正响应消息
正响应消息定义
正响应消息数据参数定义
- modeOfOperation:这是参数响应请求的值。
- lengthFormatIdentifier:定义 maxNumberOfBlockLength 参数的长度(字节数)。
如果 modeOfOperation 参数等于 0x02(DeleteFile),则不应在响应信息中包含此参数。 - maxNumberOfBlockLength:此参数由 requestFileTransfer 正向响应信息使用,用于通知上位机在每个来自上位机的 TransferData 请求信息中包含多少数据字节(maxNumberOfBlockLength),或ECU在上传数据时在 TransferData 正向响应中包含多少数据字节。该长度反映了完整的信息长度,包括 TransferData 请求信息或肯定响应信息中的服务标识符和数据参数。该参数允许上位机在开始向ECU传输数据前,适应ECU的接收缓冲区大小。
该参数允许上位机在开始向ECU传输数据前适应ECU的接收缓冲区大小,或在上传数据时指示每个 TransferData 正响应中将包含多少数据字节。ECU必须接受长度等于其报告的 maxNumberOfBlockLength 的传输数据请求。至于接受长度小于 maxNumberOfBlockLength 的传输数据请求(如果有),则取决于ECU的具体情况。
注意:给定数据块中的最后一个传输数据请求可能需要小于 maxNumberOfBlockLength。不允许ECU写入传输数据报文(无论是压缩格式还是未压缩格式)中不包含的额外数据字节(即填充字节),因为这将影响写入后续传输数据请求数据的内存地址。
如果 modeOfOperation 参数等于 0x02(DeleteFile),则不应在回复信息中包含该参数。 - dataFormatIdentifier:该参数与请求值一致。
如果 modeOfOperation(操作模式)参数等于 0x02(DeleteFile),则响应信息中将不包含此参数。
如果 modeOfOperation 参数等于 0x05(ReadDir),则该参数的值应等于 0x00。 - fileSizeOrDirInfoParameterLength:以字节为单位定义参数 fileSizeUncompressedOrDirInfoLength 和 fileSizeCompressed 的长度。
如果 modeOfOperation 参数等于 0x01(AddFile)、0x02(DeleteFile)或 0x03(ReplaceFile),则不应在响应信息中包含该参数。 - fileSizeUncompressedOrDirInfoLength:定义要上传的未压缩文件的大小或要读取的目录信息的长度(以字节为单位)。
如果 modeOfOperation 参数等于 0x01(添加文件)、0x02(删除文件)或 0x03(替换文件),则响应信息中不应包含该参数。 - fileSizeCompressed:以字节为单位定义压缩文件的大小。
如果 modeOfOperation 参数等于 0x01(AddFile)、0x02(DeleteFile)、0x03(ReplaceFile)或 0x05(ReadDir),则响应信息中不应包含此参数。
负响应代码Nrc
负响应代码回复序列
【示例】请求文件传输服务的消息流程
假设
本示例仅限于描述 requestFileTransfer 请求和 requestFileTransfer 正响应。在此上下文中,transferData 和 requestTransferExit 的用法与这些服务与 requestDownload 或 requestUpload 的用法相同,因此描述下载/上传序列的示例也同样适用。
请求文件传输 Request file transfer