RequestTransferExit(0x37)—— 请求传输退出
这个服务是用来终止数据传输的(上传/下载)。
1.服务请求报文定义
图1 服务请求报文定义
Sub-Function:
本服务没有子服务。
服务请求报文中参数定义:
transferRequestParameterRecord:用来传输的数据,格式和长度是由车厂自定义的。
2.肯定响应
图2 肯定响应报文格式
transferResponseParameterRecord:由用户定义。
3.支持的NRC
图3 0x37服务支持的NRC
4.示例
此示例分为3步:
Step 1:
用户和ECU之间通过RequestDownload(0x34)服务来交换数据。
transferRequestParameter如下:
参数名称 | 参数值 | 描述 |
---|---|---|
memoryAddress | 0x602000 | 下载地址 |
dataFormatIdentifier | 0x11 | |
MemorySize | 0x00FFFF | 内存大小,这个值在执行RequestTransferExit(0x37)服务时,会用来和实际执行的数据传输内存大小进行对比 |
transferResponseParameter如下:
参数名称 | 参数值 | 描述 |
---|---|---|
maximumNumberOfBlockLength | 0x0081 | maximumNumberOfBlockLength:(serviceId + BlockSequenceCounter (1 byte) + 127 server databytes = 129 data bytes) |
Step 2:
用户将65535字节的数据下载到Flash起始地址为0x602000的内存中。
Step 3:
用户通过请求RequestTransferExit(0x37)来终止数据传输。
测试条件:
(1)IG = ON
(2)Engine = OFF
(3)Vehicle Speed = 0 kph
报文示例:
Step 1:请求RequestDownload(0x34)服务
发送请求:34 11 33 60(MSB) 20 00(LSB) 00(MSB) FF FF(LSB)
肯定响应:74 20 00(MSB) 81(LSB)
Step 2:请求TransferData (0x36)服务,传输数据
发送请求:36 01 XX XX XX XX XX ……(XX表示下载的数据)
肯定响应:76 01
发送请求:36 02 XX XX XX XX XX ……(XX表示下载的数据)
肯定响应:76 02
……
发送请求:36 05 XX XX XX XX XX ……(XX表示下载的数据)
肯定响应:76 05
(假设要请求5次才能把数据下载完,blockSequenceCounter = 5)
Step 3:请求RequestTransferExit(0x37)服务
发送请求:37
肯定响应:77
总结:
以上步骤的执行过程都是由上位机工具来执行的,可以用CANoe中的CAPL语言来开发上位机,这个工具开发难度应该不算太大,主要是注意.s19/.s28/.hex文件的解析过程,然后利用CAN/LIN消息发送函数接口,发送三个服务的执行请求序列就可以了。