LIN诊断实现MCU本地OTA升级

这篇具有很好参考价值的文章主要介绍了LIN诊断实现MCU本地OTA升级。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、目标

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

二、目的

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

三、第三方工具

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

LIN诊断实现MCU本地OTA升级,LIN通信协议,mcu,OTA升级,LIN诊断

用这款工具的好处是厂家提供了二次开发的接口库,用户可以使用这个库进行二次开发,实现自己的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 最后发送。

LIN诊断实现MCU本地OTA升级,LIN通信协议,mcu,OTA升级,LIN诊断

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

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

LIN诊断实现MCU本地OTA升级,LIN通信协议,mcu,OTA升级,LIN诊断

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

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

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

五、升级协议

5.1 升级时序如下图所示:

LIN诊断实现MCU本地OTA升级,LIN通信协议,mcu,OTA升级,LIN诊断

5.2 升级协议定义: 

1)节点探测指令:
PC端请求 byte1(NAD) byte2(PCI) byte3(SID) byte4 byte5 byte6 byte7 byte8
 单帧 需要探测的节点地址 0x06 0xB2 0x20 产商ID低8位 产商ID高8位 功能ID低8位 功能ID高8位
说明:使用0xB2诊断服务进行节点探测,byte4的0x20为自定义的节点探测服务识别ID,产商ID和功能ID根据MCU定义修改
MCU端应答 byte1(NAD) byte2(PCI) byte3(RSID) byte4 byte5 byte6 byte7 byte8
 单帧 MCU节点地址 0x06 0xF2 0x21 0x22 0x23 0x24 0x25
说明:如果节点存在,MCU应答byte4~byte8的内容可以自行定义。
2)开始升级指令:
PC端请求 byte1(NAD) byte2(PCI) byte3(SID) byte4 byte5 byte6 byte7 byte8
 单帧 需要升级的节点地址 0x06 0x22 0xFA 0x30 0x00 0x00 0x00
说明:使用0x22诊断服务发送节点升级指令,byte4的0xFA为自定义的节点升级服务识别ID,byte5的0x30为开始升级指令。
MCU端应答 byte1(NAD) byte2(PCI) byte3(RSID) byte4 byte5 byte6 byte7 byte8
 单帧 MCU节点地址 0x06 0x62 0xFA 0x30 错误码 0x00 0x00
说明:byte6字节为错误码定义,参照升级错误码定义。
3)升级包总数指令:
PC端请求 byte1(NAD) byte2(PCI) byte3(SID) byte4 byte5 byte6 byte7 byte8
单帧  需要升级的节点地址 0x06 0x22 0xFA 0x31 包总数高8位 包总数低8位 0x00
说明:byte5的0x31为升级包总数指令,byte6和byte7为2字节大小的升级包总数的高8位和低8位。
MCU端应答 byte1(NAD) byte2(PCI) byte3(RSID) byte4 byte5 byte6 byte7 byte8
 单帧 MCU节点地址 0x06 0x62 0xFA 0x31 错误码 0x00 0x00
说明:byte6字节为错误码定义,参照升级错误码定义。
4)升级包ID请求指令:
PC端请求 byte1(NAD) byte2(PCI) byte3(SID) byte4 byte5 byte6 byte7 byte8
 单帧 需要升级的节点地址 0x06 0x22 0xFA 0x32 0x00 0x00 0x00
说明:byte5的0x32为升级ID请求指令,由MCU告知当前需要发送的下一个升级包ID。
MCU端应答 byte1(NAD) byte2(PCI) byte3(RSID) byte4 byte5 byte6 byte7 byte8
 单帧 MCU节点地址 0x06 0x62 0xFA 0x32 错误码 包ID高8位 包ID低8位
说明:byte6字节为错误码定义,参照升级错误码定义。Byte7和8为MCU下一个升级包ID。
5)升级包数据指令:
PC端请求 byte1(NAD) byte2(PCI) byte3(LEN) byte4(SID) byte5 byte6 byte7 byte8
首帧  需要升级的节点地址 0x10 0x45 0x22 0xFA 0x33 包ID高8位 包ID低8位
续帧1  需要升级的节点地址 0x21 D1 D2 D3 D4 D5 D6
续帧2  需要升级的节点地址 0x22 D7 D8 D9 D10 D11 D12
续帧3  需要升级的节点地址 0x23 D13 D14 D15 D16 D17 D18
续帧4  需要升级的节点地址 0x24 D19 D20 D21 D22 D23 D24
续帧5   需要升级的节点地址 0x25 D25 D26 D27 D28 D29 D30
续帧6  需要升级的节点地址 0x26 D31 D32 D33 D34 D35 D36
续帧7  需要升级的节点地址 0x27 D37 D38 D39 D40 D41 D42
续帧8  需要升级的节点地址 0x28 D43 D44 D45 D46 D47 D48
续帧9  需要升级的节点地址 0x29 D49 D50 D51 D52 D53 D54
续帧10  需要升级的节点地址 0x2A D55 D56 D57 D58 D59 D60
续帧11  需要升级的节点地址 0x2B D61 D62 D63 D64 0xFF 0xFF
说明:byte5的0x33为升级包数据发送指令,包数据长度为64字节(D1~D64),最后一包的数据不满64字节则填充0xFF。
MCU端应答 byte1(NAD) byte2(PCI) byte3(RSID) byte4 byte5 byte6 byte7 byte8
 单帧 MCU节点地址 0x06 0x62 0xFA 0x33 错误码 包ID高8位 包ID低8位
说明:byte6字节为错误码定义,参照升级错误码定义。Byte7和8为MCU下一个升级包ID。
6)CRC校验码发送指令:
PC端请求 byte1(NAD) byte2(PCI) byte3(SID) byte4 byte5 byte6 byte7 byte8
 单帧 需要升级的节点地址 0x06 0x22 0xFA 0x34 校验码高8位 校验码低8位 0x00
说明:byte5的0x34为升级包校验码发送指令,由PC计算(累加升级包数据每个字节包括填充的0xFF)并发送计算的CRC校验码值(16字节)。
MCU端应答 byte1(NAD) byte2(PCI) byte3(RSID) byte4 byte5 byte6 byte7 byte8
 单帧 MCU节点地址 0x06 0x62 0xFA 0x34 错误码 校验码高8位 校验码低8位
说明:byte6字节为错误码定义,参照升级错误码定义。Byte7和8为MCU计算的CRC校验码数值,算法同PC端。
7)重启MCU指令:
PC端请求 byte1(NAD) byte2(PCI) byte3(SID) byte4 byte5 byte6 byte7 byte8
 单帧 需要升级的节点地址 0x06 0x22 0xFA 0x35 0x00 0x00 0x00
说明:byte5的0x35为升级包接收完整重启MCU指令。
MCU端应答 byte1(NAD) byte2(PCI) byte3(RSID) byte4 byte5 byte6 byte7 byte8
 单帧 MCU节点地址 0x06 0x62 0xFA 0x35 错误码 0x00 0x00
说明:byte6字节为错误码定义,参照升级错误码定义。

六、MCU端升级过程:

LIN诊断实现MCU本地OTA升级,LIN通信协议,mcu,OTA升级,LIN诊断

 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诊断实现MCU本地OTA升级,LIN通信协议,mcu,OTA升级,LIN诊断

图1

 LIN诊断实现MCU本地OTA升级,LIN通信协议,mcu,OTA升级,LIN诊断

 图2

  八、总结

通过实现LIN诊断协议OTA升级功能,让我对LIN诊断协议有了更加深刻的理解。本文定义的协议也适用于OTA远程升级,对升级流程中有考虑不足的请指出,谢谢。文章来源地址https://www.toymoban.com/news/detail-754926.html

到了这里,关于LIN诊断实现MCU本地OTA升级的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Stm32】【Lin通信协议】Lin通信点亮灯实验

    通过STM32的串口发送数据,然后通过串口转换模块将数据转换成LIN(Local Interconnect Network)协议,最终控制点亮灯。 需要工程和入门资料的可以私信我,看到了马上回。 入门书本推荐: 这个结构写成代码如下: 同步间隔段(Break Field) 是至少(注1)持续 13 位(以主机节点的位速率

    2024年02月05日
    浏览(51)
  • MCU固件在线升级系列合集

    STM32操作系统系列: RT-thread应用讲解——OTA RT-thread应用讲解——通过U盘升级程序固件 STM32裸机系列: STM32 IAP应用开发——自制BootLoader STM32 IAP应用开发——通过USB实现固件升级 STM32 IAP应用开发——通过串口/RS485实现固件升级(方式1) STM32 IAP应用开发——通过串口/RS485实现固件

    2024年02月11日
    浏览(75)
  • bootloader编写——MCU固件升级系列2(STM32)

    本系列将从升级流程、boot代码编写、APP代码编写以及固件打包来介绍,硬件选用STM32F407ZGT6(手里只有),来完成这系列教程。 开发STM32固件升级并编写Bootloader时,需要注意以下几个关键点: 熟悉硬件和数据手册:在开发过程中,确保充分理解STM32微控制器的特性和功能。阅

    2024年02月03日
    浏览(56)
  • MCU多核异构通信原理

    摘要: 本文结合瑞萨RZ/G2L 多核处理器,给大家讲述一下多核异构设计及通信的原理。 随着电子技术的不断发展,以及市场需求的日益增长,嵌入式系统不仅要求执行复杂的控制任务,还需要实时地采集和处理数据。 为了满足这些需求,多核异构处理器成为了一种流行的解决

    2024年03月08日
    浏览(55)
  • MCU常见通信总线串讲(一)—— UART和USART

    🙌秋名山码民的主页 😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 获取源码,添加WX 首先明确一个概念,关于MCU中通信总线和通信协议,通信总线是一种用于连接各种外设和模块的物理接口,它可以传输

    2024年02月03日
    浏览(27)
  • 嵌入式系统中MCU与SoC通信方式的选择与应用

    在探讨嵌入式系统中微控制器单元(MCU)和系统级芯片(SoC)之间的通信方式之前,让我们先对嵌入式系统的核心概念进行深入了解。嵌入式系统是一种专用的计算系统,它被设计来执行或支持特定的功能或任务。这些系统通常嵌入在更大的设备中,如家电、汽车、工业机器

    2024年01月21日
    浏览(56)
  • 第6章_瑞萨MCU零基础入门系列教程之串行通信接口(SCI)

    本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id=728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总 : https://blog.csdn.net/qq_35181236/article/details/132779862 本章目标 了解串行通信协

    2024年01月24日
    浏览(40)
  • 基于SPI的FPGA-MCU通用通信界面设计与技术详解

    FPGA与MCU之间的通信想必是很多异构人极为头疼的难题。如果每次写一个工程都要大费周章重写通信逻辑、通信协议之类的东西,不仅耗费心神,而且浪费时间。本文基于安陆PH1A90SBG484,提出一个已经通过门级仿真验证的通用通信界面解决方案。详细代码见以下链接: Github代

    2024年02月04日
    浏览(50)
  • STM32_通过Ymodem协议进行蓝牙OTA升级固件教程

    作为单片机进阶能力,IAP升级固件的学习是非常重要的。 想直接看如何操作的从第三条开始看。 蓝牙OTA(Over-The-Air)升级是指通过蓝牙无线技术,对设备中的固件或软件进行远程升级和更新的过程。蓝牙OTA升级在现代物联网和智能设备领域有着重要的应用和意义。 重要性:

    2024年02月04日
    浏览(46)
  • 基于stm32作品设计:多功能氛围灯、手机APP无线控制ws2812,MCU无线升级程序

    作品哔哩哔哩视频:https://www.bilibili.com/video/BV1Yb4y1a7AQ#reply5536921990 资料链接: 蓝牙彩灯v1.01资料链接: CSDN: https://download.csdn.net/download/mbs520/25149435 百度网盘: https://pan.baidu.com/s/14Vout7Q2P6JBDZCCd8Gm6w 提取码:b7it 蓝牙彩灯v1.03资料链接: https://download.csdn.net/download/mbs520/25150035 取

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包