【ISO14229_UDS_0x37服务详解】

1、0x37服务(RequestTransferExit,请求传输退出服务)

  Service description:
  0x37服务(RequestTransferExit,请求传输退出服务)被客户端用于终止在客户端和服务端间的数据传输。

2、请求报文格式

2.1 请求报文定义

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

字节序号参数值约定字节值
#1RequestTransferExit Request SIDM0x37

#2
.
.
#n
transferRequestParameterRecord[] = [
               transferRequestParameter#1
               .
               .
               transferRequestParameter#m ]

U
.
.
U

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

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

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

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

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

定义
transferRequestParameterRecord
此参数记录包含了服务端所需要的,用来支持数据传输的参数。这个参数的格式和长度都是汽车制造厂商指定的。

3、肯定应答报文

3.1 肯定应答报文格式定义

字节序号参数值约定字节值
#1RequestTransferExit Response SIDM0x77

#2
.
.
#n
transferResponseParameterRecord[] = [
        transferResponseParameter#1
        .
        .
        transferResponseParameter#m ]

U
.
.
U

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

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

  该服务肯定应答报文中使用到的数据参数的定义见下表:

定义
transferResponseParameterRecord
此参数记录包含了服务端所需要的,用来支持数据传输的参数。这个参数的格式和长度都是汽车制造厂商指定的。

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

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

NRC描述
0x13incorrectMessageLengthOrInvalidFormat
请求报文长度不正确时,会发送该NRC。
0x24requestSequenceError
以下情况发生会则会使用该否定应答码:
— 该服务的请求接收时,刷新程序没有完成;
— RequestDownload和RequestUpload服务没有被激活。
0x31requestOutOfRange
transferRequestParameterRecord参数中包含了无效的数据,会发送该NRC。
0x72generalProgrammingFailure
当结束客户端与服务端的数据传输时(比如,完整性校验),如果服务端检测到错误发生,会发送该NRC。

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

5、0x37服务(RequestTransferExit,请求传输退出服务)案例说明

5.1 下载数据到服务端,Download data to a server

  Assumptions:
  以下案例为客户端到服务端的数据传输,即下载。该案例包含了3步。
  第一步客户端和服务端执行RequestDownload服务,接着在客户端和服务端中的请求和肯定应答报文中有如下信息作为参数被交换。
  下表定义了 transferRequestParameter 的值。

Data Parameter NameData Parameter ValuesData Parameter Description
MemorySize (3 bytes)0x602000下载数据的起始内存地址(memoryAddress)
dataFormatIdentifier0x11dataFormatIdentifier:
— compressionMethod = 0x1X
— compressionMethod = 0xX1
MemorySize (3 bytes)0x00FFFFMemorySize = (65 535 bytes)
在requestTransferExit服务执行过程中,该参数值被服务端用于比较传输数据的实际字节数。

  下表定义了 transferResponseParameter 的值。

Data Parameter NameData Parameter ValuesData Parameter Description
maximumNumberOfBlockLength0x0081maximumNumberOfBlockLength:
(serviceId + BlockSequenceCounter (1 byte) + 127 server data bytes = 129 data bytes)

  第二步客户端传输65535字节的数据到闪存中,从服务端内存地址为0x602000起始处开始。
  第三步客户端使用 requestTransferExit 服务终止传输数据到服务端中。
  Test conditions:ignition = on,engine = off,vehicle speed = 0 [kph]。
  该案例中,有这样的假设:服务端支持3个字节的memoryAddress 和 3个字节的MemorySize。如果MemorySize包含的是未被压缩的数据的大小,带有127个字节的数据的 TransferData 服务的数量无法被计算,因为压缩方法和压缩比是不标准的。如果MemorySize包含的是被压缩数据的大小,在单个TransferData请求之后,带有127个字节的数据的 TransferData 服务的总数将会是516个。因此,最后一个TransferData 请求报文包含的 blockSequenceCounter 的值等于0x05。
  Step1:Request for download
下表定义了 RequestDownload 服务请求报文的案例,报文从客户端到服务端:

字节序号描述字节的值
#1RequestDownload Request SID0x34
#2dataFormatIdentifier0x11
#3addressAndLengthFormatIdentifier0x33
#4
#5
#6
memoryAddress [ byte#1 ] (MSB)
memoryAddress [ byte#2 ]
memoryAddress [ byte#3 ] (LSB)
0x60
0x20
0x00
#7
#8
#9
MemorySize [ byte#1 ] (MSB)
MemorySize [ byte#2 ]
MemorySize [ byte#3 ] (LSB)
0x00
0xFF
0xFF

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

字节序号描述字节的值
#1RequestDownload Response SID0x74
#2LengthFormatIdentifier0x20
#3
#4
maxNumberOfBlockLength [ byte#1 ] (MSB)
maxNumberOfBlockLength [ byte#2 ] (LSB)
0x00
0x81

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

字节序号描述字节的值
#1TransferData Request SID0x36
#2blockSequenceCounter0x01
#3
.
.
#129
transferRequestParameterRecord [ transferRequestParameter#1 ] = dataByte#3
.
.
transferRequestParameterRecord [ transferRequestParameter#127 ] = dataByte#129
0xXX
.
.
0xXX

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

字节序号描述字节的值
#1TransferData Response SID0x76
#2blockSequenceCounter0x01

在这里插入图片描述

字节序号描述字节的值
#1TransferData Request SID0x36
#2blockSequenceCounter0x05
#3
.
.
#n+2
transferRequestParameterRecord [ transferRequestParameter#1 ] = dataByte#3
.
.
transferRequestParameterRecord [ transferRequestParameter#n-2 ] = dataByte#n
0xXX
.
.
0xXX

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

字节序号描述字节的值
#1TransferData Response SID0x76
#2blockSequenceCounter0x05

  Step3:Request Transfer exit
下表定义了 RequestTransferExit 服务请求报文的案例,报文从客户端到服务端:

字节序号描述字节的值
#1RequestTransferExit Request SID0x37

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

字节序号描述字节的值
#1RequestTransferExit Response SID0x77

5.2 从服务端上传数据,Upload data from a server

  以下案例为服务端到客户端的数据传输,即上传。该案例包含了3步。
  第一步客户端和服务端执行 requestUpload 服务,接着在客户端和服务端中的请求和肯定应答报文中有如下信息作为参数被交换。
  下表定义了 transferRequestParameter 的值。

Data Parameter NameData Parameter ValuesData Parameter Description
MemorySize (3 bytes)0x201000上传数据的起始内存地址(memoryAddress)
dataFormatIdentifier0x11dataFormatIdentifier:
— compressionMethod = 0x1X
— compressionMethod = 0xX1
MemorySize (3 bytes)0x0001FFMemorySize = (511 bytes)
在执行requestTransferExit服务过程中,该参数显示了有多少数据字节会被传输,会被服务端用于比较传输数据的实际字节数。

  下表定义了 transferResponseParameter 的值。

Data Parameter NameData Parameter ValuesData Parameter Description
maximumNumberOfBlockLength0x0081maximumNumberOfBlockLength:
(serviceId + BlockSequenceCounter (1 byte) + 127 server data bytes = 129 data bytes)

  第二步服务端将会从外部RAM中内存地址为0x201000的位置处,传输 511 字节的数据,其中包含4个带有129个字节数据的transferData服务(1个字节的服务ID + 1个字节的 blockSequenceCounter + 127个字节的服务端数据) 和 1个带有5个字节数据的transferData服务(1个字节的服务ID + 1个字节的 blockSequenceCounter + 3个字节的服务端数据)。
  第三步客户端使用 requestTransferExit 服务终止传输数据到服务端中。
  Test conditions:ignition = on,engine = off,vehicle speed = 0 [kph]。
  该案例中,有这样的假设:服务端支持3个字节的memoryAddress 和 3个字节的MemorySize。而且假设服务端支持在0x36服务TransferData的blockSequenceCounter。
  Step1:Request for upload
下表定义了 RequestUpload 服务的请求报文案例,报文从客户端到服务端:

字节序号描述字节的值
#1RequestUpload Request SID0x35
#2dataFormatIdentifier0x11
#3addressAndLengthFormatIdentifier0x33
#4
#5
#6
memoryAddress [ byte#1 ] (MSB)
memoryAddress [ byte#2 ]
memoryAddress [ byte#3 ] (LSB)
0x20
0x10
0x00
#7
#8
#9
MemorySize [ byte#1 ] (MSB)
MemorySize [ byte#2 ]
MemorySize [ byte#3 ] (LSB)
0x00
0x01
0xFF

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

字节序号描述字节的值
#1RequestUpload Response SID0x75
#2LengthFormatIdentifier0x20
#3
#4
maxNumberOfBlockLength [ byte#1 ] (MSB)
maxNumberOfBlockLength [ byte#2 ] (LSB)
0x00
0x81

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

字节序号描述字节的值
#1TransferData Request SID0x36
#2blockSequenceCounter0x01

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

字节序号描述字节的值
#1TransferData Response SID0x76
#2blockSequenceCounter0x01
#3
.
.
#129
transferResponseParameterRecord [ transferResponseParameter#1 ] = dataByte#3
.
.
transferResponseParameterRecord [ transferResponseParameter#127 ] = dataByte#129
0xXX
.
.
0xXX

在这里插入图片描述

字节序号描述字节的值
#1TransferData Request SID0x36
#2blockSequenceCounter0x05

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

字节序号描述字节的值
#1TransferData Response SID0x76
#2blockSequenceCounter0x05
#3
.
.
#5
transferResponseParameterRecord [ transferResponseParameter#1 ] = dataByte#3
.
.
transferResponseParameterRecord [ transferResponseParameter#3 ] = dataByte#5
0xXX
.
.
0xXX

  Step3:Request Transfer exit
下表定义了 RequestTransferExit 服务请求报文的案例,报文从客户端到服务端:

字节序号描述字节的值
#1RequestTransferExit Request SID0x37

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

字节序号描述字节的值
#1RequestTransferExit Response SID0x77

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值