上位机图像处理和嵌入式模块部署(树莓派4b与mcu固件升级)

news2024/11/17 17:40:50

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        在一个系统当中,可能不止需要树莓派4b一个设备,有的时候还需要搭载一个mcu,做一些运动控制的事情。比如说,图像处理的结果传给mcu,mcu拿到这个结果之后做一些机械控制的事情。这里面最简单的,就是控制一个电机将残次品推到残次品框里面。

        既然涉及到mcu,那么mcu的版本升级肯定是少不了的。一般的mcu升级,都是通过jtag或者swd烧入的。但是后期维护的时候,总不能让fae或者客户自己用jtag烧入吧,一方面不是很方便,另外一方面很容易烧错。今天,我们就来了解下,怎么用树莓派4b给mcu固件做升级。

1、mcu启动的原理

        一个mcu想要启动起来,除了电源之外,就是复位、晶振、输入和输出。所以控制好了复位按钮,就可以实现mcu的重启。另外mcu如果需要升级固件,那么就要把原来的固件一分为二,一个是bootloader的部分,一个是应用的部分。我们升级的就是应用的部分。

2、bootloader由哪些部分构成

        一般bootloader有这么几个部分,首先是上电检测按键是否需要升级;接着就是中断向量表的设置;紧接着就是串口或者usb的读写;然后是flash的烧写;最后是应用程序的跳转。如果bootloader做的比较好一点,还可以增加一个应用固件的crc校验动作,这主要也是为了防止应用固件在运行的过程中被无意改写。

3、应用固件由哪些部分构成

        应用固件和bootloader部分最大的不同,就是它的启动地址和中断向量地址部分都要被改写。这就意味着link file要重新写。首先肯定是两者的启动地址不一样,其次就是中断向量。假设bootloader的中断向量地址是0x0,那么应用固件的中断向量就是另外一个地址,这点需要注意下。最后的话,就是sram大小、flash大小不太一样。毕竟应用固件功能更多一点,所以编译出来的bin文件也更大一点。

        因此,在前期设计的时候,对于bootloader使用的ram、flash,以及应用固件使用的ram、flash就要做好区分,不然很容易overlap,容易出错。

4、为什么是soc来做mcu固件升级

        mcu如果要自己做固件升级,那么它就要支持网络连接。但是部分mcu没有这个功能。所以很多时候,都是soc先把固件下载到本地,然后通过串口实现mcu的固件升级,这是比较常用的做法。另外,mcu的资源也是非常有限的,即使有网络通信,那么势必要引入对应的tcp/ip协议代码、下载代码,这部分都比串口要复杂一点,并且不是所有mcu都支持。

        而mcu的固件大小本身并不大,更新的频率并不是那么高,所以这种情况下用soc进行升级是比较合适的做法。一般升级好了之后,直接给mcu一个复位信号即可。

void updateFirmware()
{
	triggerMcuReboot();
	waitForOKFromMcu();
	
	while(1)
	{
		SendDataToMcu();
		WaitForAck();
		
		if(timeout)
		{
			return;
		}
	}
	
	SendFinishCmd();
}

5、其他要注意的事情

        其他需要注意的事项,就是如何选择升级的时机。刚才讨论的都是mcu启动的时候,实现固件升级,还有一种情况就是soc发起请求进行固件升级,这个时候要确保当前没有任务正在运行才可以。以汽车为例,总不能在开车的时候,升级发动机和变速箱的固件代码吧。

6、其他升级的通信方式

        除了串口之外,还可以利用can、usb、网络实现固件升级,这取决于对应的mcu是否有相应的资源。用网络肯定是最快的,但复杂性会稍微高一点。usb也不错,特别是高速usb,下载速度也比较快。can的话,主要就是汽车用的比较多。

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

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

相关文章

react —— useState 深入

基础用法 useState Hook 提供了这两个功能: State 变量 在第一次重新渲染期间,这将具有作为参数传递的值State setter 函数 set 函数将允许将状态的值更新为不同的值,如果 set 函数中提供的值不同,则将触发重新渲染。 注意&…

【stomp 实战】spring websocket源码分析之握手请求的处理

上一节【搭建一套websocket推送平台】我们通过一个项目,实现了一套推送平台。由于spring框架对于websocket的支持和stomp协议的良好封装,我们很容易地就实现了websocket的消息推送功能。虽然搭建这么一套推送系统不难,但是如果不了解其底层原…

2024年Q1企业邮箱安全性研究报告:钓鱼邮件同比增长59.9%

4月23日,Coremail邮件安全联合北京中睿天下信息技术有限公司发布《2024年第一季度企业邮箱安全性研究报告》。对当前企业邮箱的应用状况和安全风险进行了分析。 1、垃圾邮件持续增长 根据Coremail邮件安全人工智能实验室最新数据显示,2024年第一季度&am…

【Web】第三次

【Web】第三次 1.完成学校官方网站页面制作2.使用动画完成过渡变换效果 1.完成学校官方网站页面制作 2.使用动画完成过渡变换效果 1.完成学校官方网站页面制作 html&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://…

【从后端日志文件中过滤出sql语句】

从后端日志文件中过滤出sql语句 why?思路日志文件的格式 结果 why? 为什么会有这种需求&#xff1f;&#xff0c;mysql数据不小心被删了完全可以从备份数据恢复&#xff0c;或者从binlog中恢复&#xff0c;但是如果前面这两种方法没办法处理&#xff08;没有备份数据库文件、…

opencv基础篇 ——(八)图像平滑滤波

均值滤波blur 用于对图像进行均值滤波&#xff08;Mean Filtering&#xff09;的函数。它通过对图像中每个像素点邻域内所有像素值求平均来计算新的像素值&#xff0c;以此达到平滑图像、降低噪声和消除细节的目的 函数原型&#xff1a; void cv::blur(InputArray src,Output…

百面算法工程师 | 分类和聚类

目录 6.1 为什么正确率有时不能有效评估分类算法&#xff1f; 6.2 什么样的分类器最好&#xff1f; 6.3 什么是聚类&#xff0c;你知道哪些聚类算法&#xff1f; 6.4 K-Means聚类算法如何调优? 6.5 K-Means聚类算法如何选择初始点? 6.6 K-Means聚类聚的是特征还是样本 …

贪吃蛇身子改进加贪吃蛇向右移动

1. 蛇移动的思想&#xff1a; 其实就是删除头节点 &#xff0c;增加尾节点&#xff1b;一句代码搞定 struct Snake *p; p head; head head -> next; free(p) 防止造成多的空间节点 2.增加尾节点代码思想&#xff1a; 2.1 .开辟new 节点的空间 struct Snake *new (stru…

2015年中国电子地图数据

这是一份收藏得比较久的电子地图数据&#xff0c;虽然很比较旧&#xff0c;但数据内容很丰富&#xff0c;它可以在一些GIS系统中作测试用。 2015中国电子地图 2015年中国电子地图数据的压缩包有3.29GB大小&#xff0c;如下图所示。 压缩文件大小 该数据进行解压之后&…

CentOS 7虚拟机配置过程中所需组件的安装(二)

1.安装net-tools组件&#xff08;解决无 ifconfig&#xff09; # yum install net-tools 2.安装gcc、c编译器以及内核文件 # yum -y install gcc gcc-c kernel-devel 验证安装成功 3.安装nano&#xff08;文本编辑器&#xff09; # yum install nano

Qt 把.exe打包成安装文件形式

目录 1.下载工具 Qt Installer Framework2.将bin文件添加到环境变量3.拷贝startmenu示例-备用4.准备Qt Release打包好的程序5.把Release打包好的程序放到packages\org.qtproject.ifw.example\data文件夹下6.生成安装包7.修改安装包图标8.修改主程序程序安装引导-创建快捷键9.添…

vue快速入门(四十四)自定义组件

注释很详细&#xff0c;直接上代码 上一篇 新增内容 全局注册自定义组件并应用局部注册自定义组件并应用 此篇使用了axios模块没有安装导入的先看这一篇 axios模块下载与导入 源码 main.js import Vue from vue import App from ./App.vue//全局引入axios // 引入axios impor…

(九)Pandas表格样式 学习简要笔记 #Python #CDA学习打卡

目录 一. Pandas表格样式 1&#xff09;举例数据 2&#xff09;字体颜色 3&#xff09;背景高亮 4&#xff09;极值背景高亮 &#xff08;a&#xff09;高亮最大值 highlight_max() &#xff08;b&#xff09;高亮最小值 highlight_min() &#xff08;c&#xff09;同时…

viewerjs在vue中实现点击图片预览、切换、缩放、拖拽、旋转等功能

1、下载依赖&#xff1a; npm i viewerjs 2、定义html结构 <template> <div><ul class"artBody"><li><img src"picture-1.jpg" alt"Picture 1"></li><li><img src"picture-2.jpg" alt&…

WinForm右键菜单的快键键设置

Form中有一个富文本框控件&#xff0c;在里面右键鼠标&#xff0c;弹出下拉菜单。快捷键的效果则是按下altp,触发按下属性事件。 1.从工具箱添加RichTextBox 2.然后添加ContextMenuStrip 3.选择RichTextBox的ContextMenuStrip属性值为contextMenuStrip1 4.按照下图设置“属…

基于Python实现心脏病数据可视化DEA+预测【500010103.1】

一、数据说明 该心脏病数据集是通过组合 5 个已经独立可用但以前未合并的流行心脏病数据集来策划的。在这个数据集中&#xff0c;5 个心脏数据集结合了 11 个共同特征&#xff0c;使其成为迄今为止可用于研究目的的最大心脏病数据集。 该数据集由 1190 个实例和 11 个特征组成…

Springboot+Vue项目-基于Java+MySQL的IT技术交流和分享平台系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

【人工智能】AIGC(Artificial Intelligence Generated Content)

随着生成式 AI 应用快速进入市场&#xff0c;以及越来越多大模型的不断面世&#xff0c;2023 年已经成为生成式 AI 的元年&#xff1a;不同区域、各行各业、不同领域的人们开始尝试在工作和生活中使用生成式 AI&#xff0c;以探索各种可能性。于企业而言&#xff0c;生成式 AI …

Matlab图像处理-均值滤波,中值滤波和高斯滤波。

针对添加了零均值高斯噪声的图像&#xff0c;以取得尽可能好的处理效果为目的&#xff0c;采用不少于3种方法进行处理&#xff1b;对处理结果进行定性和定量的比较、并得出相应的结论。 1.算法原理&#xff1a; 采用的图像滤波包括均值滤波&#xff0c;中值滤波和高斯滤波。 …

算法基础:并查集详解

并查集 并查集&#xff0c;在一些有N个元素的集合应用问题中&#xff0c;我们通常是在开始时让每个元素构成一个单元素的集合&#xff0c;然后按一定顺序将属于同一组的元素所在的集合合并&#xff0c;其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学…