IAR和OTA(六)

IAR和OTA(基于CAN)

效果演示

can_ota_new

从视频中可以看出,烧录Can_uds_ota(boot)进芯片,之后通过图莫斯可以接收到Tproject(app)并更新到flash指定地址空间中,拿beyond对比更新后flash里边的内容,可以发现与Boot和App对应上了。
注:Boot_App.hex和App.hex对比,最下边(Boot_App.hex)有红色多出的部分,那是因为KF32A156写flash一次最少需要写1024字节,小于1024会写入错误,所以我在App.hex后边不足1024的部分填充满到了1024字节。
Boot_App.hex和boot.hex对比,最下边(Boot_App.hex)有红色多出的部分,该区域是存储的boot和app的标志位,也是分别1024字节(前边的55AA55AA就是标志)。

Boot_APP <-> boot
在这里插入图片描述
Boot_APP <-> app
在这里插入图片描述

Boot、APP划分

在这里插入图片描述
需要更改一下链接文件。对于boot,更不更改链接文件无所谓,因为如果不更改的话,最开始烧录的默认是从0x0000 0000地址烧录,之后更新app进入,也不会去覆盖到boot的那一部分;对于app,就要更改链接文件ld了,它指示将app烧录的起始地址和空间大小。图莫斯ota进去的话也是根据这里的设置来配置的。

在这里插入图片描述

在这里插入图片描述

上位机配置

1.设置物理地址、功能地址、响应地址
在这里插入图片描述
2.进入扩展会话(10 03服务)
在这里插入图片描述
3.检测编程的前提条件(31 01服务)
在这里插入图片描述
4.关闭DTC设置(85 02 服务)在这里插入图片描述
5.关闭非诊断通信(28 03服务)
在这里插入图片描述
6.进入编程会话(10 02服务)
在这里插入图片描述
7.解锁ECU(27服务)
在这里插入图片描述
ECU会有一个种子,将这个种子发送给图莫斯之后,图莫斯通过dll动态库里边的算法,计算出key,再将key和ECU计算出的key进行比较。图莫斯提供了dll的源码,可以直接在里边适配自己的算法。后边会提供。

8.接收烧录app.hex(34服务、36服务)
在这里插入图片描述
9.复位(11 01服务)
在这里插入图片描述

报文解析

简单看一下报文,和LIN篇的大同小异,本实验主要是实现一个框架,对关闭DTC,key值的计算,验证app有效性没有具体实现。只实现了烧录部分。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码

	#define UDS_ADDR_FORMATS    NORMAL	//NORMAL=0,EXTENDED,MIXED

   int MaxSFDataLen=0;
    int MaxFFDataLen=0;
    int MaxCFDataLen=0;
    int DataIndex=0;
    if(UDS_ADDR_FORMATS==NORMAL){	//wuboyu:这里采样标准地址格式
        MaxSFDataLen = UDS_MAX_DLC-1;
        MaxFFDataLen = UDS_MAX_DLC-2;
        MaxCFDataLen = UDS_MAX_DLC-1;
    }else{
        MaxSFDataLen = UDS_MAX_DLC-2;
        MaxFFDataLen = UDS_MAX_DLC-3;
        MaxCFDataLen = UDS_MAX_DLC-2;
        buffer[DataIndex++] = UDS_EXT_ADDR;
    }
    if((DataLen+1) <= MaxSFDataLen){//SF
        buffer[DataIndex++] = DataLen+1;//PCI
        buffer[DataIndex++] = RSID;
        for(int i=0;i<DataLen;i++){
            buffer[DataIndex++] = *pData++;
        }
        uint8_t ret = CAN_UDS_SendData(buffer,DataIndex);
        if(!ret){
            return ret;
        }
    }else{//FF+CF

注意到这个UDS_ADDR_FORMATS没有?这个它其实是个宏定义,可以选择NORMAL, EXTENDED, MIXED,分别对应上一篇说到的寻址格式。处标准寻址外,其他的两种,“数据段”的第一个字节为扩展地址,第二个字节是PCI,之后才是真的有用的数据。

参考资料

在此特别感谢图莫斯提供的代码和技术支持,感谢!
CAN_UDS_OTA源码
27服务(生成.dll的源码)

  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值