目录
1、0x37服务(RequestTransferExit,请求传输退出服务)
Service description:
0x37服务(RequestTransferExit,请求传输退出服务)被客户端用于终止在客户端和服务端间的数据传输。
2、请求报文格式
2.1 请求报文定义
下表定义了请求报文的格式:
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | RequestTransferExit Request SID | M | 0x37 |
#2 . . #n | transferRequestParameterRecord[] = [ transferRequestParameter#1 . . transferRequestParameter#m ] | U . . U | 0x00 - 0xFF . . 0x00 - 0xFF |
2.2 请求报文中子函数参数定义
该服务未使用子函数参数。
2.3 请求报文中数据参数定义
该服务在请求报文中的数据参数定义如下表所示:
定义 |
---|
transferRequestParameterRecord 此参数记录包含了服务端所需要的,用来支持数据传输的参数。这个参数的格式和长度都是汽车制造厂商指定的。 |
3、肯定应答报文
3.1 肯定应答报文格式定义
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | RequestTransferExit Response SID | M | 0x77 |
#2 . . #n | transferResponseParameterRecord[] = [ transferResponseParameter#1 . . transferResponseParameter#m ] | U . . U | 0x00 - 0xFF . . 0x00 - 0xFF |
3.2 肯定应答报文数据参数定义
该服务肯定应答报文中使用到的数据参数的定义见下表:
定义 |
---|
transferResponseParameterRecord 此参数记录包含了服务端所需要的,用来支持数据传输的参数。这个参数的格式和长度都是汽车制造厂商指定的。 |
4、支持的否定应答码(NRC_)
本服务实施了如下否定响应代码,下表记录了每个否定应答码发生的情况,如果服务端在错误场景使用了该服务,则应使用如下列出的否定响应码。
NRC | 描述 |
---|---|
0x13 | incorrectMessageLengthOrInvalidFormat 请求报文长度不正确时,会发送该NRC。 |
0x24 | requestSequenceError 以下情况发生会则会使用该否定应答码: — 该服务的请求接收时,刷新程序没有完成; — RequestDownload和RequestUpload服务没有被激活。 |
0x31 | requestOutOfRange transferRequestParameterRecord参数中包含了无效的数据,会发送该NRC。 |
0x72 | generalProgrammingFailure 当结束客户端与服务端的数据传输时(比如,完整性校验),如果服务端检测到错误发生,会发送该NRC。 |
0x37服务(RequestTransferExit,请求传输退出服务)的否定应答码(NRC)具体处理过程如下。
5、0x37服务(RequestTransferExit,请求传输退出服务)案例说明
5.1 下载数据到服务端,Download data to a server
Assumptions:
以下案例为客户端到服务端的数据传输,即下载。该案例包含了3步。
第一步客户端和服务端执行RequestDownload服务,接着在客户端和服务端中的请求和肯定应答报文中有如下信息作为参数被交换。
下表定义了 transferRequestParameter 的值。
Data Parameter Name | Data Parameter Values | Data Parameter Description |
---|---|---|
MemorySize (3 bytes) | 0x602000 | 下载数据的起始内存地址(memoryAddress) |
dataFormatIdentifier | 0x11 | dataFormatIdentifier: — compressionMethod = 0x1X — compressionMethod = 0xX1 |
MemorySize (3 bytes) | 0x00FFFF | MemorySize = (65 535 bytes) 在requestTransferExit服务执行过程中,该参数值被服务端用于比较传输数据的实际字节数。 |
下表定义了 transferResponseParameter 的值。
Data Parameter Name | Data Parameter Values | Data Parameter Description |
---|---|---|
maximumNumberOfBlockLength | 0x0081 | maximumNumberOfBlockLength: (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 服务请求报文的案例,报文从客户端到服务端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | RequestDownload Request SID | 0x34 |
#2 | dataFormatIdentifier | 0x11 |
#3 | addressAndLengthFormatIdentifier | 0x33 |
#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 肯定应答报文的案例,报文从服务端到客户端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | RequestDownload Response SID | 0x74 |
#2 | LengthFormatIdentifier | 0x20 |
#3 #4 | maxNumberOfBlockLength [ byte#1 ] (MSB) maxNumberOfBlockLength [ byte#2 ] (LSB) | 0x00 0x81 |
Step2:Transfer data
下表定义了 TransferData 服务请求报文的案例,报文从客户端到服务端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | TransferData Request SID | 0x36 |
#2 | blockSequenceCounter | 0x01 |
#3 . . #129 | transferRequestParameterRecord [ transferRequestParameter#1 ] = dataByte#3 . . transferRequestParameterRecord [ transferRequestParameter#127 ] = dataByte#129 | 0xXX . . 0xXX |
下表定义了 TransferData 肯定应答报文的案例,报文从服务端到客户端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | TransferData Response SID | 0x76 |
#2 | blockSequenceCounter | 0x01 |
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | TransferData Request SID | 0x36 |
#2 | blockSequenceCounter | 0x05 |
#3 . . #n+2 | transferRequestParameterRecord [ transferRequestParameter#1 ] = dataByte#3 . . transferRequestParameterRecord [ transferRequestParameter#n-2 ] = dataByte#n | 0xXX . . 0xXX |
下表定义了 TransferData 肯定应答报文的案例,报文从服务端到客户端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | TransferData Response SID | 0x76 |
#2 | blockSequenceCounter | 0x05 |
Step3:Request Transfer exit
下表定义了 RequestTransferExit 服务请求报文的案例,报文从客户端到服务端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | RequestTransferExit Request SID | 0x37 |
下表定义了 RequestTransferExit 服务肯定应答报文的案例,报文从服务端到客户端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | RequestTransferExit Response SID | 0x77 |
5.2 从服务端上传数据,Upload data from a server
以下案例为服务端到客户端的数据传输,即上传。该案例包含了3步。
第一步客户端和服务端执行 requestUpload 服务,接着在客户端和服务端中的请求和肯定应答报文中有如下信息作为参数被交换。
下表定义了 transferRequestParameter 的值。
Data Parameter Name | Data Parameter Values | Data Parameter Description |
---|---|---|
MemorySize (3 bytes) | 0x201000 | 上传数据的起始内存地址(memoryAddress) |
dataFormatIdentifier | 0x11 | dataFormatIdentifier: — compressionMethod = 0x1X — compressionMethod = 0xX1 |
MemorySize (3 bytes) | 0x0001FF | MemorySize = (511 bytes) 在执行requestTransferExit服务过程中,该参数显示了有多少数据字节会被传输,会被服务端用于比较传输数据的实际字节数。 |
下表定义了 transferResponseParameter 的值。
Data Parameter Name | Data Parameter Values | Data Parameter Description |
---|---|---|
maximumNumberOfBlockLength | 0x0081 | maximumNumberOfBlockLength: (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 服务的请求报文案例,报文从客户端到服务端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | RequestUpload Request SID | 0x35 |
#2 | dataFormatIdentifier | 0x11 |
#3 | addressAndLengthFormatIdentifier | 0x33 |
#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 肯定应答报文的案例,报文从服务端到客户端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | RequestUpload Response SID | 0x75 |
#2 | LengthFormatIdentifier | 0x20 |
#3 #4 | maxNumberOfBlockLength [ byte#1 ] (MSB) maxNumberOfBlockLength [ byte#2 ] (LSB) | 0x00 0x81 |
Step2:Transfer data
下表定义了 TransferData 服务请求报文的案例,报文从客户端到服务端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | TransferData Request SID | 0x36 |
#2 | blockSequenceCounter | 0x01 |
下表定义了 TransferData 肯定应答报文的案例,报文从服务端到客户端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | TransferData Response SID | 0x76 |
#2 | blockSequenceCounter | 0x01 |
#3 . . #129 | transferResponseParameterRecord [ transferResponseParameter#1 ] = dataByte#3 . . transferResponseParameterRecord [ transferResponseParameter#127 ] = dataByte#129 | 0xXX . . 0xXX |
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | TransferData Request SID | 0x36 |
#2 | blockSequenceCounter | 0x05 |
下表定义了 TransferData 肯定应答报文的案例,报文从服务端到客户端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | TransferData Response SID | 0x76 |
#2 | blockSequenceCounter | 0x05 |
#3 . . #5 | transferResponseParameterRecord [ transferResponseParameter#1 ] = dataByte#3 . . transferResponseParameterRecord [ transferResponseParameter#3 ] = dataByte#5 | 0xXX . . 0xXX |
Step3:Request Transfer exit
下表定义了 RequestTransferExit 服务请求报文的案例,报文从客户端到服务端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | RequestTransferExit Request SID | 0x37 |
下表定义了 RequestTransferExit 服务肯定应答报文的案例,报文从服务端到客户端:
字节序号 | 描述 | 字节的值 |
---|---|---|
#1 | RequestTransferExit Response SID | 0x77 |