首页 > 其他分享 >LIN诊断实现MCU本地OTA升级

LIN诊断实现MCU本地OTA升级

时间:2024-10-14 15:12:28浏览次数:5  
标签:OTA LIN 升级 CRC MCU 节点 分区

一、目标
通过PC端上位机实现MCU本地的OTA升级,本篇文章对实现的目的、需要用到的第三方工具、LIN诊断帧、升级协议、MCU端升级过程以及PC端升级过程做详细说明。

二、目的
最近在做MCU项目时需要将样机寄给客户进行验证,在客户的验证过程中要求参数可调试,如果需要修改软件升级MCU就很麻烦。于是就想做个上位机实现MCU升级功能,项目中MCU只有LIN接口可以用来作为调试接口,于是就想通过LIN诊断协议进行参数调试和实现本地OTA升级功能。

三、第三方工具
一般LIN开发用的调试工具是CANOE,但是CANOE太贵了,客户端也不一定有CANOE工具,于是选用了在淘宝就可以买到的一款USB转LIN的调试工具-图莫斯UTA0503,如下图:

用这款工具的好处是厂家提供了二次开发的接口库,用户可以使用这个库进行二次开发,实现自己的PC上位机,支持QT等实现。

四、LIN诊断帧
从发送格式上,诊断帧的PDU 单元U (Packet Data Unit,分组数据单元)可分为单帧(Single Frame,SF)、首帧(First Frame,FF)和续帧(Consecutive Frames, CF)三种。从发送源上,主机发送请求 PDU,从机发送应答 PDU。 如下图所示,为 PDU 格式,包括节点地址(NAD),协议控制信息(PCI),LEN,服务 ID(SID),应答服务 ID(RSID), 消息字节段(D1~D6)。首字节 NAD 首先发送,末字节 D4,D5,D6 最后发送。

第一个字节是 NAD(node address),用于区分不同从机节点的地址。 0x00 用于休眠命令; 0x01~0x7D 从机节点地址,即 NAD 0x7E 功能节点地址(功能 NAD); 0x7F 广播节点地址(广播 NAD); 0x80~0xFF 用户自定义。

第二个字节是 PCI(Protocol Control Information)信息,包含了 PDU 单元类型和消息字节长度 的信息。如下表:

单帧中,附加信息 Length 表示消息字节数加 1。首帧中,附加信息只表示 Length 的高 4 位,低 8 位在 LEN 中表示。因此在消息长度为 12 位数据,最大长度为 4095(0xFFF)。 续帧中的附加信息表示首帧后,跟随的续帧的编号,第一个续帧编号为 1,之后累加 1。如果续帧数多于 15 个,那么帧计数器在第 16 个续帧时从 0 重新计数。

SID(Service Identifier)表示了从机节点应完成的服务请求。节点配置服务的 SID 区间为 0xB0~0xB7,诊断 服务的 SID 区间为 0x000xAF,0xB80xFE。

RSID(Response Service Identifier)表示从机节点应答的内容,它的值是 SID+0x40。

五、升级协议
5.1 升级时序如下图所示:

5.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升级功能。用户可以在没有烧写工具的情况下通过LIN升级APP软件,升级界面如下图1所示,界面中有“升级节点探测”功能和“升级”功能两块。

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

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


八、总结
通过实现LIN诊断协议OTA升级功能,让我对LIN诊断协议有了更加深刻的理解。本文定义的协议也适用于OTA远程升级,对升级流程中有考虑不足的请指出,谢谢。

标签:OTA,LIN,升级,CRC,MCU,节点,分区
From: https://www.cnblogs.com/fcxok/p/18464261

相关文章

  • 实现基于UDS LIN诊断协议的本地OTA升级
    一、目标在上篇文章LIN诊断实现MCU本地OTA升级_linota-CSDN博客中已经基于LIN诊断协议实现了通过PC端上位机对MCU进行本地的OTA升级,但是没有完全按照UDS协议实现。本篇将在上篇文章的基础上进行改进,实现基于UDSLIN诊断协议的本地OTA升级。本篇文章对实现的目的、需要用到的第三......
  • 华为云 linux centos8 安装tendis
    一、下载下载地址:http://tendis.cn/#/点击右上角的Download点击tendisplus-2.7.0-rocksdb-v8.5.3.tgz,由于下载速度非常慢,改用wget方式下载解决云服务器中访问github速度慢的问题:linux中在/etc/hosts中添加如下内容:20.205.243.166github.com输入下载命令:wgethttps:/......
  • Linux常用命令(每日两更)
     一、Linux基础命令1、bc数字计算器作用:用于数字计算以及进制转换#安装bc工具[root@192~]#yum-yinstallbc>/dev/null;echo-e"\a"​#bc用于数字计算[root@192~]#echo"1+1"|bc2​#bc用于进制转换obase表示输出的进制,ibase表示输入的进制[root@19......
  • linux free 解释
    [root@kafka-1node_export]#free-mtotalusedfreesharedbuff/cacheavailableMem:3896391303094743273在Linux系统中,free-m命令用于显示系统内存的使用情况。输......
  • Linux NFS
    NFS网络文件系统,英文NetworkFileSystem(NFS),是由SUN公司研制的UNIX表示层协议(presentationlayerprotocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。用vm虚拟两个linux;并同时关闭firewalld&SELINUXsystemctldisablefirewalldsetenforce0 s......
  • arm Linux中dma的cache管理
    概述前两周有人询问DMA下的cache操作和dma-coherent。以前零碎看过代码。临时找,还没有找到。这两天整理了调用流程,也找到了dma-coherent的用法。Linux的文档里没有详细说明dma-coherent的用法。根据代码,如果dma的设备树里有dma-coherent,Linux则认为硬件会维护cache一致性,不会在d......
  • Linux系统之ipcalc命令的基本使用
    (Linux系统之ipcalc命令的基本使用)一、ipcalc命令介绍ipcalc命令是一个用于计算和显示IP地址和子网掩码相关信息的工具。它可以帮助用户快速计算出IP地址、子网掩码、网络地址、广播地址等信息。二、ipcalc命令的使用帮助2.1ipcalc命令的help帮助信息使用--help,查询ipca......
  • 【Linux】useradd和adduser的区别
    先说结论:useradd是Linux本身自带的命令,属于原始级命令,有很多的参数可以设置,但对初学者使用不太友好。         adduser是一个Perl脚本,【推荐使用】在Linux系统中,创建用户是一个常见的操作,而useradd和adduser是两个常用的命令。虽然这两个命令的主要功能相似,但......
  • 【北京迅为】itop-3588开发板快速测试手册openkylin系统功能测试
             iTOP-3588开发板采用瑞芯微RK3588处理器,是全新一代AloT高端应用芯片,采用8nmLP制程,搭载八核64位CPU(四核Cortex-A76+四核Cortex-A55架构),集成MaliG610MP4四核GPU,内置AI加速器NPU,算力达6Tops,集成独立的8K视频硬件编码器和硬件解码器,提供了许多功能强大的嵌入......
  • Linux集群架构搭载高可用负载均衡集群
    一.Linux集群概述•根据功能划分为两大类:高可用和负载均衡•高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务•实现高可用的开源软件有:heartbeat、keepalived•负载均衡集群,需要有一台服务器作为分发器,它负责把用......