S32K324 UDS Bootloader开发-上位机篇-CANoe制作

69 篇文章 83 订阅 ¥159.90 ¥299.90
21 篇文章 5 订阅 ¥69.90 ¥99.00
本文介绍了如何将STM32的CANoe上位机软件修改为支持多个flash块的刷写,并增加了BT勾选框功能。主要修改包括:Pannel中增加勾选框,解析hex文件脚本的调整,以及刷写脚本的改进,如hex文件块大小的扩大,判断BT选项,修正BlockSequence计算,和writeBlockData函数的优化。
摘要由CSDN通过智能技术生成

前言

在之前的文章中,介绍过STM32对应的CANoe上位机软件的制作,当时开发的只支持单个flash块的刷写,本文接着介绍拓展为多个flash块刷写的CAPL脚本修改。同时增加一个BT勾选项,为实现上电进boot等待使用,防止APP异常时不能正常刷程序

Pannel新增check勾选框

勾选框对应的模块如下:

增加勾选框对应的系统变量

配置Check Box,关联到对应系统变量

解析hex文件脚本更改

之前的脚本解析hex文件多个flash块时,解析的不对。需要修改HexBlockTotalNumber++的位置

        switch(Type){
          case 0x00:											  //数据
            if (Addr  > (ReLen + ReAddr)){  //判断为新数据块
                if(RowDataByte == 0)			  //是否为首行数据字节数
  							{ 
  								hexfile[HexBlockTotalNumber].BlockStartAddr = Addr;         //记录新数据块的起始地址
  							}
  							else										    //不是首行
  							{
  								hexfile[HexBlockTotalNumber].BlockDataLength = RowDataByte; //数据长度  
  								RowDataByte = 0;					//重新开始计数
                  HexBlockTotalNumber++; 
  								hexfile[HexBlockTotalNumber].BlockStartAddr = Addr;		      //记录新数据块的起始地址
                  

  							}
            }

刷写脚本更改

hex文件块改大

之前定义的数组大小只有5,不够,目前扩展到50,如果hex块更多,也需要更改下数组大小

struct Block hexfile_app[50];

开始刷写时判断是否勾选BT

如果勾选了BT,则跳过前面的步骤(也就是在APP中响应的步骤),直接到ProgrammingSession,目前发10 02这个还需要通过IG发送

      if(@CheckBox::BT == 1)
      {
        prog_step = ProgrammingSession;
        Resp_True_Flag = 1;
      }
      else
      {
        prog_step = EnterExtendedSession;
      }

也就是说,在没有APP的情况下,需要上电之前先用IG循环发送10 02,然后再上电,勾选BT后,取消IG发送1002,点击刷写就可以了.

计算BlockSequence数量修改

之前返回值为int,导致BlockSequence超过32767之后,就会导致CANOE自动停下来,报溢出错误,查看原因是flash块太大,此处返回值修改为dword

dword getBlockSequenceAmount(struct Block hexfile)
{
    dword blockSequenceAmount = 0;

    if (hexfile.BlockDataLength % (maxNumberOfBlockLength - 2) == 0)
    {
        blockSequenceAmount = hexfile.BlockDataLength / (maxNumberOfBlockLength - 2);
    }
    else
    {
        blockSequenceAmount = hexfile.BlockDataLength / (maxNumberOfBlockLength - 2) + 1;
    }

    return blockSequenceAmount;
}

同理,其他的涉及到长度的变量,都修改为dword,以防万一溢出。

writeBlockData函数修改

第一个block进入writeBlockData函数是判断过34服务的,但后面的block没有判断,所以后面的block需要等待34服务正响应后才能继续

 switch(prog_state)
  {
    case prog_req:
      
      if(blockNumberCount >= 1)//后面进34 服务需要等待31 checksum应答
      {
        if(Resp_True_Flag && Resp_ID == 0x71)
        {
          requestDownLoad(hexfile[blockNumberCount]); 
          Resp_True_Flag = 0;
          prog_state = prog_trans;
          sum = 0;
          j=0;
        for(i = 0;i<HexBlockTotalNumber;i++)
        {
           sum = sum + hexfile[i].BlockDataLength;
         }
         write("sum data length: %i ", sum);
        }
      }
      else
      {
        requestDownLoad(hexfile[blockNumberCount]); //第一次进入34 不需要判断响应
        prog_state = prog_trans;
              write("HexBlockTotalNumber %i ", HexBlockTotalNumber);
        sum = 0;
        for(i = 0;i<HexBlockTotalNumber;i++)
        {
           sum = sum + hexfile[i].BlockDataLength;
         }
         write("sum data length: %i ", sum);
      }

至此,拓展为多个flash块刷写的上位机就修改完了。

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赞哥哥s

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值