基于uds和modbus协议的bootloader对比

news2024/11/25 10:25:28

2022年参与了两个bootloader项目的开发,两个项目使用的芯片、通讯驱动不同,因此传输协议也不同,年底了将两个项目做一个对比,也顺便加深下对bootloader的理解。

相同点:

modbus

uds

刷新流程

刷新流程大同小异,简单来说:在应用报文中收到刷新请求报文,将刷新请求标志位置1存在E2中,然后执行复位操作。程序复位后判断存储在E2中的刷新请求标志位是否置1,如果置1了,那么清除刷新请求标志位并执行刷新流程;如果没有置1,则去判断程序有效性标志位是否置1,如果没有置1,那么也需要清除刷新请求标志位并执行刷新流程,如果置1了,说明应用程序是完整的,则直接调到应用程序入口处,执行应用程序。

整帧报文识别机制

只要涉及到通讯,那么就需要对整帧报文的判断识别。modbus和uds两种协议各自都有整帧报文的识别方法。

不同点:

modbus

uds

时间要求不同

  1. 在应用程序中收到刷新请求完成复位动作后,须在500ms内进入引导加载程序的刷新会话;

  1. 加载引导程序中刷新请求标志位的判断须在程序启动20ms内完成;

  1. 若刷新请求标志位为0,程序根据应用程序有效性标志位是否为1进行跳转,跳转的前提是程序须运行在默认会话模式下超过20ms。

报文解析不同

上位机可以直接解析hex文件,然后发送hex报文,加载引导程序需要对收到的hex报文进行解析,需要熟悉hex报文的构成及语法格式

需要用特定工具将hex文件转换为sff文件,然后用上位机发送sff文件里的报文,引导加载程序收到完整的报文后根据报文内的服务内容进行解析

整帧报文识别机制

modbus报文规定了两帧报文之间的时间间隔不能超过3.5个uart报文占用的时间,因此可以用这个规则作为一帧完整报文的识别依据,即:每收到一个uart字节,就启动专用的定时器,接下来如果能进到定时器中断里,则说明有一段时间没有收到uart报文,这种情况下认为收到的uart报文是完整的,可以认为是一帧modbus报文。

uds完整报文的识别比较简答,对于单帧而言,单帧本身已经构成了一帧完整的报文;对于多帧而言,首帧前两个字节中已经包含了该完整报文的长度,因此在接下里多帧的传输过程中,uds接收到的字节数达到报文长度,就可以认为收到了一帧完整的uds报文。

架构不同

上层的modbus协议和下层的uart协议完全分开,并由各自的状态机进行管理。

uart状态机会对uart接收过程中进行管理;

程序跑到专用定时器中断里,说明uart报文接收过程已经完成,在uart状态机中通过Uart_RxIndication将完整的uart报文托付给modbus状态机,并更新modbus状态机的标志位;modbus状态机在轮询过程中根据标志位进行modbus报文的处理;

modbus报文处理完毕后,会将待回复的modbus报文通过Modbus_Reply托付给uart状态机,并更新uart状态机的标志位;uart状态机在轮询过程中根据标志位进行uart报文的发送;

  1. uart报文的发送/接收是异步的,由于软件架构里uart报文的发送/接收都是在uart_manager里实现的,因此uart的发送函数只能在下一次while(1)的轮询过程中调用。目前还未发现此种实现方式的弊端。

  1. uart报文的发送/接收有专门的状态机进行管理,只有状态机的标志位满足条件,uart才会执行指定的动作。

上层的uds协议和下层的can协议完全分开。

can报文的接收由硬件支持,uds报文的整帧识别由uds管理。

  1. can报文的发送/接收是同步的,在一个while(1)轮询周期内,可以完成一次完整的can报文接收/发送。

  1. can报文的接收/发送没有专门的状态机进行管理,接收由硬件触发,在接收中断里通过CAN_RxIndication告诉程序报文接收完成;发送接口由程序直接调用发送can报文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

活动星投票技能创意大赛网络评选微信的投票方式线上免费投票

“技能创意大赛”网络评选投票_建立投票链接_作品投票小程序_扫码投票制作方法现在来说,公司、企业、学校更多的想借助短视频推广自己。通过微信投票小程序,网友们就可以通过手机拍视频上传视频参加活动,而短视频微信投票评选活动既可以给用户…

C语言详解——自定义类型:结构体、枚举、联合体

🌇个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html 小苏希望大家能从这篇文章中收获到许…

【Pytorch】稀疏矩阵的表示与加减运算

前提知识:LongTensor()是64位整数型向量,FloatTensor()是32位浮点数向量。 有大量0元素的时候,我们可以使用坐标形式存储稀疏矩阵。 一个3*3的矩阵,但是只有坐标(0,0)处有值(值为1)…

量子计算(二十二):Grover算法

文章目录 Grover算法 一、什么是搜索算法 二、怎么实现Grover搜索算法 Grover算法 一、什么是搜索算法 举一个简单的例子,在下班的高峰期,要从公司回到家里,开车走怎样的路线才能够耗时最短呢?最简单的想法,当然…

Radius vector (半径矢量)

Radius vector引言定义引言 今天给大家介绍一下什么是Radius vector。 定义 从圆心到当前位置的矢量r⃗\vec{r}r。它也被叫做位置向量。 其中,O表示圆心,这里我们称之为原点位置,A表示当前位置。因此矢量OA⃗\vec{OA}OA是一个Radius vec…

VsCode简单使用,配置c/c++编译环境,个人感受

整体感觉 本质就是一个加强的文本编译器,增加了终端和控制台,可以程序交互,相当于一个IDE的外部框架。和sublime有一定相似性,但界面和插件安装方面远远优于sublime。应该说这是一种为编译语言设计的显示框架,真正起作…

代码随想录算法训练营第二十天 二叉树 java : 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

LeetCode 654.最大二叉树 题目讲解 思路 二叉树的根是最大值左子树最大值左边部分构造的最大二叉树右子树最大值是右边部分构造的最大二叉树 AC代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode ri…

可视化监控告警-grafana

需求背景 根据我们的业务背景,需要监控3个纬度。 Iaas层:即腾讯云的基础设施CVMPaas层:即使用的腾讯云Paas服务,各种中间件Saas层:即我们本身的服务指标监控。 腾讯云监控,可以覆盖1,2场景, …

HarmonyOS/OpenHarmony应用开发-ArkTS的声明式开发范式

基于ArkTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、跨设备应用的UI开发框架,支持开发者高效的构建跨设备应用UI界面。 基础能力 使用基于ArkTS的声明式开发范式的方舟开发框架,采用更接近自然语义的编程方式,让开发者可以直…

「自控原理」2.2 控制系统的复域数学模型

本节引入控制模型的复域模型——传递函数,并介绍其构建和使用方法。 本节介绍了几种常见环节的传递函数 文章目录传递函数的定义传递函数的标准形式首1标准型尾1标准型传递函数的性质传递函数的局限性典型环节的传递函数控制系统的复域数学模型是传递函数。拉普拉斯…

深入浅出java并发编程(Thread)

快速了解 package java.lang;public class Thread implements Runnable {}Thread是lang包下的一个类,实现了Runnable接口。源码如下 FunctionalInterface public interface Runnable {public abstract void run(); }Runnable是一个函数式接口不会抛出异常没有返回…

Minecraft 1.19.2 Fabric模组开发 05.动画效果物品

我们本次在Fabric中实现一个具有动画效果的物品,本次演示的模型代码均在文末给出 效果演示效果演示效果演示 首先,请确保你的开发包中引入了geckolib依赖,相关教程请参考:Minecraft 1.19.2 Fabric模组开发 03.动画生物实体 1.首先我们要使用…

nvidia显卡编码并发session限制破解

对于服务器型显卡(比如:Tesla T4、NVIDIA A100等),nvidia显卡编码并发session路数没有限制,对于消费型显卡(比如:GeForce RTX 3070、GeForce RTX 3080等),nvidia显卡编码并发session…

Odoo 16 企业版手册 - 财务管理之会计仪表板

会计仪表板 财务管理是任何类型业务不可避免的一部分。无论您经营的业务规模或类型如何,如果财务流程没有得到适当的管理和监控,您将在未来面临严重的财务失败。手动管理所有会计操作不是一个好主意,因为它需要大量的时间和精力。在人工会计管…

esp32 Python开发快速入门--环境配置以及点亮LED灯

esp32 Python开发快速入门--环境配置以及点亮LED灯1. 环境配置2. 固件的烧录3 下面开始点灯1. 环境配置 需要配置两个环境, 开发的IDE Thonny 链接如下 https://thonny.org/ 安装串口助手,芯片是通过串口来实现通信的,需要驱动,…

Openresty宏观概述笔记

最近由于项目需要学习了安全代理的相关知识,其实刚开始的时候是非常需要一个入门的介绍,大概说明下这个到底是个什么东西,能干啥,简单的原理是什么,为此我记录下我看完用完的心得,记录成笔记。 一般我们代码…

Nginx基础01:安装和基本使用

背景Nginx是一个高性能的Web服务器,几乎所有的Web服务都需要使用Nginx。关于Nginx的功能特性这里不再赘述,让我们从0开始,了解Nginx的基本用法,学习它在Web服务中都有哪些应用。本文主要介绍Nginx的安装以及基础的控制命令。Nginx…

讨论| 电视行业已是落日夕阳?

如今,随着移动设备、互联网技术的发展,电视似乎逐渐淡出人们的视野。近期,与电视相关的热门讨论似乎都是对于各大视频平台的会员投屏制度,这似乎更加减少了大众对于电视的使用欲望。那么电视领域是否真的趋于淘汰了呢?…

PASCAL VOC 数据集的标注格式

PASCAL VOC 数据集的标注格式 PASCAL VOC 挑战赛 ( **The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛。 PASCAL的全称是Pattern Analysis, Statistical Modelling and Computational Learning,很多优秀的计算机视觉模型…

区块链知识系列 - 系统学习EVM(一)

EVM有一个基于栈的架构,在一个栈中保存了所有内存数值。EVM的数据处理单位被定义为256位的“字”(这主要是为了方便处理哈希运算和椭圆曲线运算操作) 这里所说的内存数值是指那些EVM字节码运行所需要的输入、输出参数数据和智能合约程序运行中…