首页 > 其他分享 >实现基于UDS诊断协议的CAN本地OTA升级

实现基于UDS诊断协议的CAN本地OTA升级

时间:2024-10-14 15:22:54浏览次数:1  
标签:UDS CRC OTA 分区 升级 诊断 本地 MCU LIN

一、目标
在上篇文章实现基于UDS LIN诊断协议的本地OTA升级-CSDN博客博客中已经基于LIN UDS诊断协议实现了通过PC端上位机对MCU进行本地的OTA升级。本篇将在上篇文章的基础上实现基于UDS 诊断协议的CAN本地OTA升级。本篇文章对实现的目的、需要用到的第三方工具请查看之前的博客相应章节,本文不再赘述。本文对CAN诊断帧和LIN诊断帧区别、升级协议、MCU端升级过程以及PC端升级过程做详细说明。

二、LIN和CAN诊断的区别

LIN诊断是通过节点地址(NAD)进行寻址,而CAN诊断是通过物理地址进行寻址。LIN诊断响应地址即为节点地址。而CAN响应的物理地址需要约定好。比如定义CAN诊断物理地址为0x700,MCU响应地址为0x701。

从发送格式上,LIN诊断帧(单帧)的PDU 单元包括:NAD+PCI+SID+D1~D5

而CAN诊断帧(单帧)的PDU单元包括:PCI+SID+D1~D6

可以比较直观的看出CAN诊断帧比LIN诊断帧在PDU单元数据上少了NAD的定义,因为物理地址可作为ID发送,不需要单独的节点地址定义。

三、升级协议

3.1 升级时序如下图所示

3.2 升级协议诊断帧数据定义

四、MCU端升级流程

MCU端flash分区如上图所示,boot为启动分区,app1为A分区,也是app启动运行的分区,app2为B分区,用于升级过程接收保存升级包数据的备份分区,data flash分区为用户数据保存区域和升级标志等信息保存区域。

MCU端接收升级数据包并写入B分区并累加CRC校验码,当升级包接收完成后计算的CRC校验码和PC端发送过来的校验码一致的话说明接收的数据包是完整的,写入升级标志置位、包总数和CRC等信息,并重启MCU。Boot启动时读取升级标志,包总数和CRC校验值,判断升级标志是否置位,如果置位则读取B分区内容并计算CRC校验值,如果计算的CRC校验值和保存的CRC校验值一致说明B分区数据完整无误。擦除A分区数据内容,将B分区数据拷贝到A分区。跳转到A分区运行。

五、PC端升级过程

上位机提供了本地OTA升级功能。用户可以在没有烧写工具的情况下通过CAN升级APP软件,升级界面如下图1所示。

其中“升级节点探测”功能是为了探测可升级的节点地址,为后续升级使用。如果探测到可升级的MCU节点,将在“探测节点地址列表”中显示。

在“节点地址”所在的编辑框直接填写节点地址。然后点击“加载升级文件”按钮选则需要升级的bin文件,Bin文件信息将在旁边的矩形框中显示。点击“开始升级”按钮开始进行升级。如果升级过程中出现错误,比如CRC校验错误等,可以再次点击“开始升级”按钮进行升级,升级过程比较慢,大概需要两三分钟。当所有的升级包都发送成功后会弹出对话框提示用户是否需要写入升级标志并重启MCU,如果用户点击取“取消”按钮,升级包数据仅仅保存在B分区,并不会更新到A分区,升级过程实际并没有完成。用户点击“确定”按钮才真正重启MCU将B分区数据拷贝到A分区,并从A分区启动运行程序。

注:有需要整套代码,包括MCU UDS LIN协议栈及上位机程序欢迎私信咨询。

标签:UDS,CRC,OTA,分区,升级,诊断,本地,MCU,LIN
From: https://www.cnblogs.com/fcxok/p/18464287

相关文章

  • LIN诊断实现MCU本地OTA升级
    一、目标通过PC端上位机实现MCU本地的OTA升级,本篇文章对实现的目的、需要用到的第三方工具、LIN诊断帧、升级协议、MCU端升级过程以及PC端升级过程做详细说明。二、目的最近在做MCU项目时需要将样机寄给客户进行验证,在客户的验证过程中要求参数可调试,如果需要修改软件升级MCU就......
  • 实现基于UDS LIN诊断协议的本地OTA升级
    一、目标在上篇文章LIN诊断实现MCU本地OTA升级_linota-CSDN博客中已经基于LIN诊断协议实现了通过PC端上位机对MCU进行本地的OTA升级,但是没有完全按照UDS协议实现。本篇将在上篇文章的基础上进行改进,实现基于UDSLIN诊断协议的本地OTA升级。本篇文章对实现的目的、需要用到的第三......
  • Java-Vue使用浏览器调用本地exe服务
    Java-浏览器调用本地exe服务Java+Vue编写的BS服务调用本地的exe服务,从技术来说介绍这块的内容本来就很少,浏览器访问本地文件从安全限制上又存在诸多限制,本文章也是本人在实际开发过程中遇到了需要这种应用的场景,花费一些时间实践出的一种解决方案。1.Vue画面-button按钮<el-button......
  • 【环境配置教程】MYSQL----win系统本地同时安装MySQL5.7.xx、MySQL8.0.xx
    文章目录1.下载mysql8和mysql5.7的压缩包2.解压到本地3.安装MySQL8.xx.xx第一步配置环境变量第二步新建配置文件第三步MySQL数据库初始化第四步临时密码第五步安装并开启mysql8服务第六步登陆mysql8修改密码4.安装MySQL5.7第一步配置环境变量第二步新建......
  • Safari Webkit, NotAllowedError: The request is not allowed
    使用tauriv2,跑前后端项目学习时,遇到这条报错:UnhandledPromiseRejection:NotAllowedError:Therequestisnotallowedbytheuseragentortheplatforminthecurrentcontext,possiblybecausetheuserdeniedpermission.测试代码console.log(navigator.userAge......
  • YOLOv11改进 | 注意力篇 | YOLOv11引入CoTAttention注意力
    1. CoT介绍1.1 摘要:具有自注意力的Transformer引发了自然语言处理领域的革命,最近激发了Transformer式架构设计的出现,在众多计算机视觉任务中取得了具有竞争力的结果。然而,大多数现有设计直接在2D特征图上采用自注意力,以获得基于每个空间位置处的孤立查询和键对的注......
  • 将threejs的官方文档部署到本地,遇到的问题及解决方法
    问题:官方文档浏览速度慢。 1.下载https://threejs.org/官网首页左侧,点击“download”下载  2.得到压缩包:three.js-master.zip解压到本地 3. 部署用VSCode打开解压后的文件夹运行命令:npminstall运行命令:npmrundev  报错:  问了一下AI,得到如何解......
  • win软件 超强的本地视频 图片去水印 动态水印!
    AI视频图片去水印HitPawWatermarkRemover电脑软件,内涵安装教程,以后看到有水印的视频不怕啦,用这个就行了,可以去除动态水印!【下载】https://pan.quark.cn/s/1ba6f088f0b2【应用名称】:HitPawWatermarkRemover【应用版本】:2.1.2【应用大小】:263m【测试机型】pc【......
  • docker入门(二)之容器命令及私有仓库的部署(本地和harbor)
    容器命令:1.启动容器接下来演示在docker下运行一个ubuntu系统,从中学习各容器命令。--name="容器新名字"为容器指定一个名称(不指定的话会随机分配一个名字)。-d:后台运行容器并返回容器ID,也就启动守护式容器(后台运行)-i:以交互模式运行容器,通常与-t同时使用-t:为......
  • 瑞芯微RK3566/RK3568 Android11使用OTA升级固件方法,深圳触觉智能鸿蒙开发板演示,备战第
    本文介绍瑞芯微RK3562/RK3568在Android11系统OTA(U盘/TF卡)升级固件方法,使用的是触觉智能的PurplePiOH鸿蒙开源主板,搭载了瑞芯微RK3566芯片,类树莓派设计,是Laval官方社区主荐的一款鸿蒙开发主板。1、OTA包生成在源码根目录上执行以下命令编译OTA包makeinstallclean#make-j4#......