目录
1、0x36服务(TransferData,数据传输服务)
Service description:
0x36服务(TransferData,数据传输服务),既可以被客户端用于从客户端到服务端的数据传输(即下载),也可以用于服务端到客户端的数据传输(即上传)。
数据传输方向由进程中的RequestDownload 或者是 RequestUpload的服务来决定。如果客户端开始一个RequestDownload服务,要下载的数据应该包含在transferRequestParameter的参数中,具体的参数在0x36服务的请求报文中。如果客户端开始一个RequestUpload服务,要上传的数据应该包含在transferResponseParameter的参数中,具体的参数在0x36服务的应答报文中。
在多个TransferData请求中,防止有一个TransferData服务失败了,TransferData服务的请求包含了一个blockSequenceCounter,来改善错误处理。当接收到RequestDownload (0x34)服务或者RequestUpload (0x35)服务的请求报文时,服务端的blockSequenceCounter应该被初始化为1。这意味着在RequestDownload (0x34) 或者 RequestUpload (0x35)请求消息之后的第一个TransferData (0x36)的请求报文,blockSequenceCounter会从1开始。
2、请求报文格式
2.1 请求报文定义
下表定义了请求报文的格式:
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | TransferData Request SID | M | 0x36 |
#2 | blockSequenceCounter | M | 0x00 - 0xFF |
#3 . . #n | transferRequestParameterRecord[] = [ transferRequestParameter#1 . . transferRequestParameter#m ] | C . . U | 0x00 - 0xFF . . 0x00 - 0xFF |
C = Conditional:如果一个下载正在进程中,该参数则是强制的。
2.2 请求报文中子函数参数定义
该服务未使用子函数参数。
2.3 请求报文中数据参数定义
该服务在请求报文中的数据参数定义如下表所示:
定义 |
---|
blockSequenceCounter 在RequestDownload (0x34)或RequestUpload (0x35)服务之后的第一个TransferData请求,blockSequenceCounter的参数值从0x01开始。对于每个后续的TransferData请求,其值递增1。blockSequenceCounter增加,超过在0xFF的值时,下一个TransferData请求消息从0x00重新开始。 使用的案例如下: — 在服务端,如果一个TransferData下载数据的请求被正确的接收并且处理了,但肯定应答报文没有到达客户端,那么客户端将会确认应用层超时,并且会重复同样的请求(包括同样的blockSequenceCounter)。服务端将会接收重复的TransferData请求,并且基于包含的blockSequenceCounter去确认这个TransferData请求是重复的。一旦再一次写入数据到内存中后,服务端会立即发送肯定应答报文。 — 在服务端,如果一个TransferData下载数据的请求没有被正确的接收,接着服务端不会发送肯定应答报文。客户端将会确认应用层超时,并且会重复同样的请求(包括同样的blockSequenceCounter)。服务端将会接收重复的TransferData请求,并且基于包含的blockSequenceCounter去确认这个TransferData请求是新的。服务端将会处理这个服务,并且会发送肯定应答报文。 — 在服务端,如果一个TransferData上传数据的请求被正确的接收并且处理了,但肯定应答报文没有到达客户端,那么客户端将会确认应用层超时,并且会重复同样的请求(包括同样的blockSequenceCounter)。服务端将会接收重复的TransferData请求,并且基于包含的blockSequenceCounter去确认这个TransferData请求是重复的。一旦再一次写入数据到内存中后,服务端会立即发送肯定应答报文。 — 在服务端,如果一个TransferData上传数据的请求没有被正确的接收,接着服务端不会发送肯定应答报文。客户端将会确认应用层超时,并且会重复同样的请求(包括同样的blockSequenceCounter)。服务端将会接收重复的TransferData请求,并且基于包含的blockSequenceCounter去确认这个TransferData请求是新的。服务端将会处理这个服务,并且会发送肯定应答报文。 |
transferRequestParameterRecord 此参数记录包含服务端支持数据传输所需的参数。该参数的格式和长度由汽车制造商指定。 EXAMPLE 对于下载来说,transferRequestParameterRecord包含了传输的数据内容。 |
3、肯定应答报文
3.1 肯定应答报文格式定义
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | TransferData Response SID | M | 0x76 |
#2 | blockSequenceCounter | M | 0x00 - 0xFF |
#3 . . #n | transferResponseParameterRecord[] = [ transferResponseParameter#1 . . transferResponseParameter#m ] | C . . U | 0x00 - 0xFF . . 0x00 - 0xFF |
C = Conditional:如果一个上传正在进程中,该参数则是强制的。
3.2 肯定应答报文数据参数定义
该服务肯定应答报文中使用到的数据参数的定义见下表:
定义 |
---|
blockSequenceCounter 该参数是请求报文中的blockSequenceCounter参数。 |
transferResponseParameterRecord 该参数包含了一些参数,这些参数是客户端支持数据传输所需要的。这个参数的格式和长度是车辆制造厂商所指定的。 EXAMPLE 对于下载来说,参数transferResponseParameterRecord可以包括服务端计算得到的checksum值。对于上传来说,参数transferResponseParameterRecord包含了上传的数据内容。对于下载来说,参数transferResponseParameterRecord不会重复transferRequestParameterRecord。 |
4、支持的否定应答码(NRC_)
本服务实施了如下否定响应代码,下表记录了每个否定应答码发生的情况,如果服务端在错误场景使用了该服务,则应使用如下列出的否定响应码。
NRC | 描述 |
---|---|
0x13 | incorrectMessageLengthOrInvalidFormat 请求报文长度不正确时,会发送该NRC。(比如消息长度不满足requestDownload服务的肯定应答报文中返回的maxNumberOfBlockLength参数的要求) |
0x24 | requestSequenceError 以下情况会则会使用该否定应答码: — 当该服务接收到请求时,如果RequestDownload 或者 RequestUpload服务没有激活; — 如果RequestDownload 或者 RequestUpload服务已经激活,但服务端已经接收到所有的数据了,数据由在激活的RequestDownlod 或者 RequestUpload服务中的memorySize参数来决定。 |
0x31 | requestOutOfRange 以下情况会会发送该NRC: — transferRequestParameterRecord包含了额外的控制参数(如附加的地址信息)并且这个控制信息是无效的; — transferRequestParameterRecord与requestDownload 或者 requestUpload服务中的参数maxNumberOfBlockLength不一致; — transferRequestParameterRecord与服务端内存中分配的约束条件不一致; |
0x71 | transferDataSuspended 如果下载模块的长度与requestDownload服务请求报文中发送的memorySize参数不一致时,会返回该否定应答码。 |
0x72 | generalProgrammingFailure 在下载数据过程中,如果服务端在永久内存设备(如Flash)擦除或者刷写一块内存区域时,检测到错误发生,会发送该NRC。 |
0x73 | wrongBlockSequenceCounter blockSequenceCounter的顺序发生错误时,会发送该NRC。 |
0x92/0x93 | voltageTooHigh / voltageTooLow 下载数据到服务端永久内存中时,检测到服务端针脚上的电压超出可接受范围,会发送该NRC。 |
0x36服务(RequestUpload,请求上传服务)的否定应答码(NRC)具体处理过程如下。
5、0x36服务(TransferData,数据传输服务)案例说明
具体的案例见0x37服务(RequestTransferExit,请求传输退出服务)的案例