使用capl和uds进行.bin文件的刷写

个人总结,有错误请指正

1.刷写流程

程序下载流程

1. send request: 10 03 change session mode

//test for 
//test AccessExtendSession:10 03
testcase TC_1_0_AccessExtendSession(){//case name
  testWaitForTimeout(500);  
  mesg_10.id=0x7DF;//定义该报文的ID,功能寻址
  mesg_10.DataLength=8;//定义该报文的长度为8个byte
  mesg_10.byte(0)=0x02;//定义请求数据的长度为2个byte
  mesg_10.byte(1)=0x10;//定义请求服务的SID
  mesg_10.byte(2)=0x03;//定义请求10服务的子服务为03
  mesg_10.byte(3)=0xFF;//填充字节
  mesg_10.byte(4)=0xFF;
  mesg_10.byte(5)=0xFF;
  mesg_10.byte(6)=0xFF;
  mesg_10.byte(7)=0xFF;
  output(mesg_10);  //send request
  testWaitForTimeout(100);
  }

2. send request: 85 02 change communication status

//Routine Control:85 
testcase TC_1_1_DTCControl()
{
char test_name[200]           = "TC_1_1_DTCControl";  
  //InitTestCase();
  TestStep(test_name,"---------- Add ECU information in test report ----------");  
  testStep(test_name,"Control DTC Settings DID Request");
  testWaitForTimeout(100);  
  mesg_85.id=0x7DF;
  mesg_85.DataLength=8;
  mesg_85.byte(0)=0x02;
  mesg_85.byte(1)=0x85;
  mesg_85.byte(2)=0x02;
  mesg_85.byte(3)=0xFF;
  mesg_85.byte(4)=0xFF;
  mesg_85.byte(5)=0xFF;
  mesg_85.byte(6)=0xFF;
  mesg_85.byte(7)=0xFF;  
  output(mesg_85);
}

3. send request: 31 01 start …

发送例程控制请求
此处可以通过发送85服务一样发送31服务请求,也可以通过CDD文件来发送请求
diagResize(RoutineControl,3);  
diag_service_DID(RoutineControl,"routineControlType",DiagReqType1,"Routine_Identfier",DiagReqType2,ResFlag,Response_Byte0);
void diag_service_DID(diagRequest *req,char DiagType1[],long DiagReqType1,char DiagType2[],long DiagReqType2,int ResFlag,byte Response_Byte0)
{ 
  int ret;
  diagresponse *resp;
  
  
    //send request command
    TestStep("Second Step","send DID request command");
    
    ret = DiagSetParameter(req,DiagType1,DiagReqType1);

    ret = DiagSetParameter(req,DiagType2,DiagReqType2);
    if(ret<0)
    {
      TestStepFail("Set diag parameter","cannot set diag parameter: error %d", ret);
    }    
    diagSendRequest(req);
    diagGetLastResponse(resp);    
}

4. 28 03 01

参考上述服务请求的发送方式

5. 10 02

参考上述服务请求的发送方式

6. 27 11

参考上述服务请求的发送方式

7. 27 12

参考上述服务请求的发送方式

8. 2E F1 84

9. Driver Download

9.1 请求下载 34 server

当2E服务完成后,就要开始下载驱动了,下载驱动需要用到34,36,37以及31四个服务,首先是34服务,请求下载,在该请求中包含了数据存放到ECU的起始地址,以及数据的大小。
比如:34 00 44 00 12 34 56 FF 中00123456是存放的起始地址,FF为数据大小
当请求成功并有positive response后,就开始传输数据啦

9.2 数据传输 36 server

本案例传输的数据存放在.bin文件中,我使用的下载方式是从.bin文件中将数据拿出来,放到一个数组中,再下载到ECU。
需要用到的几个capl函数:

  1. setFilePath(“D:\XXXX\\XXXX\BIN”,0); 设置存放.BIN文件的地址
  2. glbHandle = openFileRead(“文件名称.bin”,1); 选择.bin文件的阅读方式
  3. fileGetBinaryBlock(buffer,elcount(buffer),glbHandle) 将数据放到buffer中
    接下来就是使用36请求发送buffer中的数据,直到发送完成为止

9.3 退出下载 37 server

发送该请求后, 数据传输停止。

9.4 数据校验

此步骤用于校验数据的完整性

10. APP下载

APP的下载与driver的下载流程一致

11. 剩余的其他服务请求

参考上述服务的发送方式就可以完成后续的所有服务请求了

  • 1
    点赞
  • 4
    评论
  • 25
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

要你狗命

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值