【UDS服务-$36在CAPL中的使用函数】

前言

36服务是bootloader刷写app时常用的一个诊断服务。本文将介绍36服务在CAPL中常使用的一些函数。

36服务的作用

客户端利用TransferData(传输数据)服务从客户端向服务器(下载)或从服务器向客户端(上传)传输数据。

36服务的请求格式

查看ISO 14229-1可知道$36的请求格式:
在这里插入图片描述
由表格可知$36由3部分组成:
1.诊断服务请求ID,该部分为固定值0x36。
2.blockSequenceCounter,由于传输数据量一般都很大,需要多次使用$36才能完成所有数据的传输,该参数表示所有数据被分割后的序号。
3.transferRequestParameterRecord[],该参数为一个数组,包含每次需要传输的数据。

36服务在CAPL中的常用函数

以下介绍$36在CAPL中实现的常用方法。

variables
{
  /*TransferData*/
  DiagRequest Diagnostic.Download_Transmit                                       DiagReq_36_TransferData;
  byte DataBuffer[0x7FFFFF];
}


diagSetParameter(DiagReq_36_TransferData, "BlockSequenceCounter", sequence_num);

diagSetParameterRaw(DiagReq_36_TransferData, "TransferRequestParameterRecord", DataBuffer,DataBuffer_len);

diagSendRequest(DiagReq_36_TransferData);

下面对各部分进行解读:

1. 变量声明

variables
{
  /*TransferData*/
  DiagRequest Diagnostic.Download_Transmit                                       DiagReq_36_TransferData;
  byte DataBuffer[0x7FFFFF];
}
  • DiagRequest Diagnostic.Download_Transmit DiagReq_36_TransferData;

在variables部分对$36声明,定义诊断请求对象,对应UDS服务0x36 (TransferData)。

其中Diagnostic.Download_Transmit 是在cdd中定义的服务快捷方式限定符。

  • byte DataBuffer[0x7FFFFF];

用于缓存下载数据的缓存buffer。

2. 设置blockSequenceCounter参数

diagSetParameter(DiagReq_36_TransferData, "BlockSequenceCounter", sequence_num);

当传输数据为标准内容时,使用diagSetParameter()设置发送数据。

BlockSequenceCounter,是标准UDS参数,对应ISO 14229-1可知道$36的请求格式。

sequence_num,表示当前的传输块的序号,需要用户自己维护这个计数器的递增逻辑。

3. 设置发送数据transferRequestParameterRecord[]

diagSetParameterRaw(DiagReq_36_TransferData, "TransferRequestParameterRecord", DataBuffer,Cur_DataBuffer_len);

当包含自定义数据内容时,使用diagSetParameterRaw()设置发送数据。

TransferRequestParameterRecord,是标准UDS参数,对应ISO 14229-1可知道$36的请求格式。

DataBuffer,是一个数据缓存数组,用于保存当前待传输数据。

Cur_DataBuffer_len,对应当前待传输数据的长度。

4. 发送单次$36数据

diagSendRequest(DiagReq_36_TransferData);

以上三步设置好$36所有需要填充的数据,使用diagSendRequest()发送$36的数据。

总结

在了解$36的请求格式后,可在CAPL中按照其格式要求,传输所有数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值