【ISO14229_UDS_0x38服务详解】

1、0x38服务(RequestFileTransfer,请求文件传输服务)

  Service description:
  0x38服务(RequestFileTransfer,请求文件传输服务)被客户端用于初始化从客户端到服务端或者服务端到客户端的文件数据传输(下载或者上传)。另外,该服务有能力去获取文件系统的一些信息。
  如果服务端实现了数据存储的文件系统,则该服务可以作为RequestDownload 和 RequestUpload服务的可替代的解决方案来支持数据上传或者下载功能。当配置文件系统的下载或者上传过程时,则应该使用RequestFileTransfer服务来替代。在服务端的文件系统中,该服务应该包含删除文件或者目录的功能。对于这个案例,TransferData 和 RequestTransferExit服务不适用。
  在服务端已经接收到 RequestFileTransfer的请求报文之后,服务端在其发送肯定应答报文之前,应该采取必要的行为去接收或者传送数据。

2、请求报文格式

2.1 请求报文定义

  下表定义了请求报文的格式:

字节序号参数值约定字节值
#1RequestFileTransfer Request SIDM0x38
#2modeOfOperationM0x01 - 0x05

#3
#4
filePathAndNameLength [
           byte#1 (MSB)
           byte#2] (LSB)

M
M

0x00 - 0xFF
0x00 - 0xFF

#5
.
.
#5+n-1
filePathAndName = [
               byte#1 (MSB)
               .
               .
               byte#n ]

M
.
.
C1

0x00 - 0xFF
.
.
0x00 - 0xFF
#5+ndataFormatIdentifierC20x00 - 0xFF
#5+n+1fileSizeParameterLengthC20x00 - 0xFF

#5+n+2
.
.
#5+n+2+k-1
fileSizeUnCompressed= [
               byte#1 (MSB)
               .
               .
               byte#k ]

C2
.
.
C2,3

0x00 - 0xFF
.
.
0x00 - 0xFF

#5+n+2+k
.
.
#5+n+1+2k
fileSizeCompressed= [
               byte#1 (MSB)
               .
               .
               byte#k ]

C2
.
.
C2,3

0x00 - 0xFF
.
.
0x00 - 0xFF

  C1:这个消息参数的长度(字节数)由 filePathAndNameLength 来定义。
  C2:这些参数是否存在取决于 modeOfOperation 参数。
  C3:这个消息参数的长度(字节数)由 fileSizeParameterLength 来定义。

2.2 请求报文中子函数参数定义

  该服务未使用子函数参数。

2.3 请求报文中数据参数定义

  该服务在请求报文中的数据参数定义如下表所示:

定义
modeOfOperation
这个数据参数定义了文件或目录的操作类型,其在filePathAndName参数显示。这个参数值的定义如下表所示。
filePathAndNameLength
定义了参数 filePath的字节长度。
filePathAndName
定义了服务端中文件系统的位置,是增加,删除,替代或者是读取,取决于参数modeOfOperation。
另外,该参数包含了文件名,名字可以作为文件路径中的部分可以被增加,删除,替代或者是读取。
如果 modeOfOperation 参数值 = 0x05(ReadDir),该参数表示读取目录。
该参数的每个字节都应该按照ASCII格式来编码。
dataFormatIdentifier
该数据参数是单字节值,其每一位都可以单独编码。高位指定了压缩方法,低位指定了加密方法。0x00值表示既没有使用压缩方法,也没有使用加密方法。除了0x00之外的值都由汽车制造厂商指定。
如果 modeOfOperation 参数值等于0x02(删除文件) 和 0x05(读取目录),该参数则不应该出现在请求报文中。
fileSizeParameterLength
定义参数 fileSizeUncompressed 和 fileSizeCompressed 的字节长度。
如果 modeOfOperation 参数值等于0x02(删除文件),0x04(读取文件) 和 0x05(读取目录),该参数则不应该出现在请求报文中。
fileSizeUncompressed
定义未压缩文件的字节长度。
如果 modeOfOperation 参数值等于0x02(删除文件),0x04(读取文件) 和 0x05(读取目录),该参数则不应该出现在请求报文中。
fileSizeCompressed
定义压缩文件的字节长度。
如果传输未压缩的文件,则该参数的所有字节都应设置为参数fileSizeUncompressed中使用的大小信息。
如果 modeOfOperation 参数值等于0x02(删除文件),0x04(读取文件) 和 0x05(读取目录),该参数则不应该出现在请求报文中。

  RequestFileTransfer服务请求报文中包含了 modeOfOperation 参数。该值定义如下表:

Byte ValueDescription约定
0x00ISO/SAE reserved
ISO保留
M
0x01AddFile
该值被用来添加文件
M
0x02DeleteFile
该值被用来删除文件
M
0x03ReplaceFile
该值被用来替代文件。如果文件未储存,那么该文件应该被添加。
M
0x04ReadFile
该值被用来读取文件。如果文件未储存,那么该文件应该被添加。
M
0x05ReadDir
该值被用来读取目录。此值表示请求中不包含faileName。
M
0x06 - 0xFFISO/SAE reserved
ISO保留。
M

3、肯定应答报文

3.1 肯定应答报文格式定义

字节序号参数值约定字节值
#1RequestFileTransfer Response SIDS0x78
#2modeOfOperationM0x01 - 0x05
#3lengthFormatIdentifierC10x00 - 0xFF

#4
.
.
#4+(m-1)
maxNumberOfBlockLength = [
             byte#1 (MSB)
             .
             .
             byte#m ]

C1,2
.
.
C1,2

0x00 - 0xFF
.
.
0x00 - 0xFF
#4+mdataFormatIdentifierC10x00 - 0xFF

#4+m+1
#4+m+2
fileSizeOrDirInfoParameterLength [
           byte#1 (MSB)
           byte#2 (LSB)]

C1
C1

0x00 - 0xFF
0x00 - 0xFF

#4+m+3
.
.
#4+m+3+k-1
fileSizeUncompressedOrDirInfoLength= [
             byte#1 (MSB)
             .
             .
             byte#k ]

C1,3
.
.
C1,3

0x00 - 0xFF
.
.
0x00 - 0xFF

#4+m+3+k
.
.
#4+m+3+2k-1
fileSizeUncompressedOrDirInfoLength= [
             byte#1 (MSB)
             .
             .
             byte#k ]

C1,3
.
.
C1,3

0x00 - 0xFF
.
.
0x00 - 0xFF

  C1:这些参数是否存在取决于 modeOfOperation 参数。
  C2:这个消息参数的长度(字节数)由 fileSizeOrDirInfoParameterLength 参数的定义。
  C3:这个消息参数的长度(字节数)由 lengthFormatIdentifier 来定义。

3.2 肯定应答报文数据参数定义

  下表定义了肯定应答报文中的数据参数:

定义
modeOfOperation
此参数是请求值。
lengthFormatIdentifier
定义了 maxNumberOfBlockLength 参数的长度(字节数量)。
如果 modeOfOperation 参数值为0x02 (删除文件) ,那么该参数值不该包含在应答报文中。
maxNumberOfBlockLength
该参数被 requestFileTransfer 肯定应答报文用来通知客户端有多少的数据字节量(maxNumberOfBlockLength)包含在 TransferData 的请求报文中,或者去通知服务端有多少的数据字节量包含在 TransferData 肯定应答报文中,当上传数据时。这个长度反映了完整的消息长度,包含了服务标识符和出现在 TransferData 请求报文或者是肯定应答报文中的数据参数。该参数允许客户端在开始向服务端传输数据之前去适应服务端的接收缓冲区的大小,或者在上传的事件中显示出每个 TransferData 肯定应答报文中将包含多少个数据字节。服务端要求接收 transferData 的请求在长度上等于它汇报的 maxNumberOfBlockLength。服务端指定 transferData 请求长度应该小于接收的 maxNumberOfBlockLength 。
dataFormatIdentifier
该参数是请求值。如果 modeOfOperation 的值等于0x02(删除文件),则响应报文中不包括此参数。如果 modeOfOperation 的值等于0x05(读取目录),该参数值应该等于0x00。
fileSizeOrDirInfoParameterLength
以字节为单位,定义了待上传文件压缩文件的大小,或者待读取的目录信息的长度。如果 modeOfOperation 的值等于0x01(添加文件),0x02(删除文件) 或者 0x03 (取代文件),则应答报文中不包含此参数。
fileSizeUncompressedOrDirInfoLength
以字节为单位,定义了参数 fileSizeUncompressedOrDirInfoLength 和 fileSizeCompressed的长度。如果 modeOfOperation 的值等于0x01(添加文件),0x02(删除文件) 或者 0x03 (取代文件),则应答报文中不包含此参数。
fileSizeCompressed
以字节为单位,定义了压缩文件的长度。如果 modeOfOperation 的值等于0x01(添加文件),0x02(删除文件) 或者 0x03 (取代文件) 或者 0x05 (读取目录) ,则应答报文中不包含此参数。

4、支持的否定应答码(NRC_)

  本服务实施了如下否定响应代码,下表记录了每个否定应答码发生的情况,如果服务端在错误场景使用了该服务,则应使用如下列出的否定响应码。

NRC描述
0x13incorrectMessageLengthOrInvalidFormat
请求报文长度不正确时,会发送该NRC。
0x22conditionsNotCorrect
服务端接收到该服务的请求时,下载或者上传数据正在进行中,或者其他的条件不满足时执行该服务时,会发送该NRC。
0x31requestOutOfRange
以下情况会返回该NRC:
— 指定的 dataFormatIdentifier 无效;
— 指定的 modeOfOperation 无效;
— 指定的 fileSizeParameterLength 无效;
— 指定的 filePathAndNameLength 无效;
— 指定的 fileSizeUncompressed 无效;
— 指定的 fileSizeCompressed 无效;
— 指定的 filePathAndName 无效;
0x33securityAccessDenied
当该服务请求被接收时,服务端是保密的,会发送该NRC。
0x70uploadDownloadNotAccepted
由于某种错误,下载到服务端内存中的尝试无法完成,则返回该NRC。

  0x38服务(RequestFileTransfer,请求文件传输服务)的否定应答码(NRC)具体处理过程如下。
在这里插入图片描述

5、0x38服务(RequestFileTransfer,请求文件传输服务)案例说明

  Assumptions:
  以下条款为该案例指定了如下条件。
  下表定义了报文中的数据参数值:

NameValuesDescription
modeOfOperation0x01AddFile
filePathAndNameLength0x001EfilePathAndName参数的长度为30
filePathAndName“D:\mapdata\europe\germany1.yxz”路径包括了文件名称
dataFormatIdentifier0x11compressionMethod = 0x1X; encryptingMethod = 0xX1
fileSizeParameterLength0x02文件长度和大小都是2个字节
fileSizeUncompressed0xC35050KByte
fileSizeCompressed0x753030KByte

  下表定义了 RequestFileTransfer 服务请求报文的案例,报文从客户端到服务端:

字节序号描述字节值
#1RequestFileTransfer Request SID0x38
#2modeOfOperation0x01

#3
#4
filePathAndNameLength [
           byte#1 (MSB)
           byte#2] (LSB)

0x00
0x1E

#5
#6
#7
#8
#9
#10
#11
#12
#13
#14
#15
#16
#17
#18
#19
#20
#21
#22
#23
#24
#25
#26
#27
#28
#29
#30
#31
#32
#33
#34
filePathAndName = [
           byte#1 (MSB)
           byte#2
           byte#3
           byte#4
           byte#5
           byte#6
           byte#7
           byte#8
           byte#9
           byte#10
           byte#11
           byte#12
           byte#13
           byte#14
           byte#15
           byte#16
           byte#17
           byte#18
           byte#19
           byte#20
           byte#21
           byte#22
           byte#23
           byte#24
           byte#25
           byte#26
           byte#27
           byte#28
           byte#29
           byte#30 ]

0x44
0x3A
0x5C
0x6D
0x61
0x70
0x64
0x61
0x74
0x61
0x5C
0x65
0x75
0x72
0x6F
0x70
0x65
0x5C
0x67
0x65
0x72
0x6D
0x61
0x6E
0x79
0x31
0x2E
0x79
0x78
0x7A
#35dataFormatIdentifier0x11
#36fileSizeParameterLength0x02

#37
#38
fileSizeUnCompressed= [
           byte#1 (MSB)
           byte#2]

0xC3
0x50

#39
#40
fileSizeCompressed= [
           byte#1 (MSB)
           byte#2]

0x75
0x30

下表定义了 RequestFileTransfer 肯定应答报文的案例,报文从服务端到客户端:

字节序号描述字节值
#1RequestDownload Response SID0x78
#2modeOfOperation0x01
#3lengthFormatIdentifier0x02

#4
#5
maxNumberOfBlockLength = [
            byte#1 (MSB)
            byte#m ]

0xC3
0x50
#6dataFormatIdentifier0x11

返回UDS诊断服务功能单元介绍目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值