HTTP模式下STM32程序远程升级设计

news2024/10/4 6:34:03

针对嵌入式终端设备架设分散、数量庞大以及应用程序更新迭代速度快带来的程序升级困难局面,运用STM32微控制器的在应用中编程(IAP)原理,设计了通过以太网远程升级程序的方案。

HTTP协议和LwIP协议的使用,不仅让整个方案具备高安全性、可靠性。易用性,还有效降低了硬件资源的消耗。该方案稳定、可靠、操作简单,可以广泛应用于网络环境下的IAP升级,具有较高的推广价值。

引言

目前STM32设备程序升级的通用解决方案是使用在应用中编程(IAP)原理进行设计,通过串口、USB、4G无线模块等通信方式将待升级程序文件传输至设备端,然后直接写入用户程序存储区来实现。

在实际使用场景中,串口、USB的方式不支持远程操作,而4G无线模块通信稳定性较差,硬件成本较高。

针对上述问题,本文以某信号处理项目健康管理单元模块为背景,开展使用以太网通信方式实现程序远程升级方法的研究,使用轻量化的通信协议以减少对内存资源的占用,并提供精简、安全的网页操作界面供用户使用。

LwIP协议

LwIP是一个小型开源的TCP/IP协议栈,有无操作系统的支持都可以运行,其实现的重点是在保持TCP协议主要功能的基础上最大程序地减少对设备内存的占用,以便在硬件资源紧张的嵌入式系统中使用。
其源代码全部使用C语言实现,开发人员可以方便地实现跨处理器、跨操作系统的移植。

数据流向

基于LwIP内核自身的内存管理策略和网络数据包管理策略,网卡数据传入LwIP内核的流程大致如下:当网口接收到网络数据产生一个中断后就会释放一个信号量,通知网卡接收数据区处理这些收到的数据,再将这些数据封装成消息投递到tcpip_mbox邮箱中,LwIP内核线程得到这个消息后就对其进行解析,根据消息中数据包的类型进行处理,同时调用ethernet_input函数决定是否递交到IP层。
如果是ARP包,内核就不会递交给IP层,仅仅只更新ARP缓存表;如果是IP数据包,则递交给IP层去处理。
在这里插入图片描述
这样的数据流向使内核处理数据包的效率得到较大提升,且各层之间保持相对独立,某一层并不需要指定下一层如何实现,仅需知道该层通过层间接口所提供的服务即可。用户程序与内核是完全独立的,通过操作系统进程间通信机制进行数据交互。

HTTP服务器

HTTP是用于从万维网服务器传输超文本到本地浏览器的传输协议,它是基于TCP/IP通信的,使用“客服端-服务器”模型运作,是一个应用层协议,可以用来传输服务器的各种资源,如文本、图片、音频等,本设计用它来传输应用程序的二进制文件。

资源管理

统一资源标识符(URI)是一个通用的概念,由2个子集组成,分别是统一资源定位符(URL)和统一资源名称(URN)。
URL是互联网上用来标识某一处资源的绝对地址,即通过资源的位置来标识资源,使用它就能找到资源。
其通用格式如下:😕/:@:/ ;?#
在这里插入图片描述
URL不一定包含所有的组件内容,常用的URL组件如表1所示。
本方案中升级网页的地址http://192.168.0.12就是一个最简单的URL,地址中的数字同时也是设备的IP地址,改变IP地址即可切换到局域网内不同终端设备的升级网页,有效提升程序升级效率。

HTTP报文

HTTP报文是在http应用程序之间发送的数据块,它包裹着请求数据交换的信息。
HTTP报文分请求报文和响应报文,其结构基本相同,分为:

  1. 起始行,它描述请求或响应的基本信息
  2. 头部,它使用关键词-数值的形式详细地说明报文
  3. 实体,即实际传输的数据,可以使纯文本,图片,视频等二进制数据。

一个完整的HTTP报文如图所示,需要特别注意的是,头部和实体之间有一个空行。
在这里插入图片描述

请求行
请求报文的起始行称为请求行,它简要描述了客户端想要如何操作服务器的资源。
请求行的构成:

  1. 请求方法:GET/POST,表示对资源的操作。
  2. 请求目标,通常是一个URI,标记了请求方法要操作的资源。
  3. 版本,表示报文使用的HTTP协议版本。
    在这里插入图片描述

状态行
响应报文的起始行又称为状态行,主要用来标识服务器响应的状态。
状态行的构成:
4. 版本,表示报文使用的HTTP协议版本。
5. 状态码,一个3位数,用代码的形式表示处理结果,比如200是成功,500是服务器错误。
6. 原因,作为数字状态码补充,是更详细的解释文字,帮助人理解原因。

在这里插入图片描述

总体架构

系统主要由远程电脑主机、嵌入式终端设备组成,2者通过网线接入到同一局域网。
当终端设备需要进行程序升级时,在电脑主机端通过网页登录HTTP服务器,输入用户名和密码进入到程序升级网页,然后选择目标程序文件并点击升级按钮,即可对设备程序进行升级。

在嵌入式设备端,系统引导程序加载完毕后,首先检查是否需要对设备程序进行升级,若检查到标志位,则通过以太网接口接收目标程序文件,校验成功后烧写到用户应用程序分区中,接着复位系统,便可运行升级后的用户应用程序;若为检测到标志位,则直接运行用户原来的应用程序。

在这里插入图片描述
相比采用串口、USB、无线模块等实现的在线升级功能,本方案对于设备维护人员来说,无需进行复杂的接线操作,免去上位机繁琐的安装及设置过程,只要电脑主机和设备端位于同一局域网即可。

LwIP支持的通信协议较为完整,支持多种编程接口,开源免费,其流畅运行只需要40kB的存储空间和几十kB的运行内存,消耗的硬件资源较少。

升级代码由跳转检测代码和用户程序烧写代码2部分组成,当检测代码识别到升级标志位后,系统则等待网络中传来的程序文件。程序文件传送完毕且校验无误后,随机跳转到用户程序区烧写代码,完成终端设备的程序升级工作。

跳转代码

为了区别IAP模式与正常运行的用户程序,系统在初始化完外围器件后需要读取一个状态标志位来确定是否进行用户程序升级。
使用内部存储区的某个特定区域来存放升级标志位,当程序读取到该标志位后便进入IAP模式,否则直接运行用户应用程序。

当跳转程序检查栈顶地址合法后便设置用户代码区第二个字位程序开始地址,接着初始化应用程序堆栈指针,最后跳转到应用程序,等待接收升级文件。

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

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

相关文章

安装mmdetection2.22(windows下)

安装mmdetection2.22 确定版本安装mmcv1.4安装mmdetection测试方案1方案2 确定版本 安装mmcv1.4 首先.cuda,pytorch得安装好,这里我拷贝pt1.8虚拟环境 安装mmcv1.4 安装mmdetection 参考文章 下载 cd E:\Code\mmdetection\mmdetection-2.22.0 pip install -r…

机械臂笛卡尔空间轨迹规划

目录 1 引言 2 任务位置规划 2.1直线轨迹规划 2.2圆弧轨迹规划 (1)进行第一个步骤: (2) 进行第二步骤: (3)进行第三个步骤: (4)进行第四个步骤: 1 引言 随着6R机械人的使用…

设备通过ehome接入到EasyCVR后,通道数量显示不全是什么原因?

EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。 有用…

【LeetCode】HOT 100(19)

题单介绍: 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

linux修改oracle sys密码

忘记了sys密码 su - oracle; sqlplus / as sysdba; alter user system identified by test; navicat测试连接

【软件测试三】测试用例篇

目录 1.测试用例的基本要素 2.测试用例的给我们带来的好处 3.设计测试用例的万能公式 3.1.水杯的测试用例 3.2.微信发送朋友圈的测试用例 4.设计测试用例的方法 基于需求设计的测试用例 1.等价类 2.边界值 3.判定表 4.正交法 1.正交表表达式 2.特点: …

【OSI体系结构】网络杂谈(14)之OSI体系结构精准理解

涉及知识点 什么是OSI体系结构,OSI体系结构的概念,网络协议三要素,应用层,表示层,会话层,传输层,表示层,数据链路层,物理层,开放系统互连参考模型各层的功能…

CRM系统助力医疗机构数字化营销全链路,让获客和留存更简单

在数字经济背景下,医疗行业面临经营、管理、组织变革升级的迫切需求。伴随云计算、大数据、物联网、5G、人工智能等数字化技术的创新应用,加速推动了国内医疗机构数字化转型地落地。后疫情时代下,如何展望未来、寻找医疗健康行业重回增长轨道…

原生DOM与组件绑定 原生DOM事件和自定义事件

1. 原生DOM可以绑定原生DOM系统事件 2. 组件标签可以绑定系统事件(不起作用,因为属于自定义事件)------ .native (可以把自定义事件变为原生DOM事件) 3. 原生DOM绑定自定义事件 ---无意义:因为没有办法触…

企业部署MES管理系统需要配置专业团队吗

随着数字化转型的推进,越来越多的企业开始考虑部署MES生产管理系统来提高生产效率和管理水平。在部署制造企业MES系统时,是否需要配置专业团队是一个关键问题。本文将探讨企业部署MES管理系统所需的专业团队的重要性,并提供一些建议。 全球制…

微服务进阶篇

文章目录 1、SpringCloud面试快速答法 1.1、Eureka1.2、Nacos面试快速答法 1.3、Ribbon负载小总结面试快速答法 1.4、服务雪崩小总结面试快速答法 1.5、服务监控小总结面试快速答法 2、业务相关2.1、限流Nginx限流网关限流小总结面试快速答法 2.2、分布式事务分布式理论CAP、BA…

WEB漏洞-XXEXML之利用检测绕过全解(39)

#概念 xml:xml被设计成传输和储存数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容。就类似于一种数据的格式,代码类的一些东西; xxe:是xml上面的一个漏洞,…

STM32F407 基本定时器配置输出PWM方波

介绍STM32F407定时器PWM波形输出配置方式。 通过逻辑分析采集波形数据进行可视化显示对比。 【1】定时器PWM功能介绍 STM32F4 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也…

Vmware 虚拟机win7不识别usb3.0/3.1解决方案

问题现象: VMware安装的Win7系统,虚拟机设置USB控制器已打开,可以识别USB2.0U盘,不识别USB3.0/3.1U盘( 本人使用的金士顿U3.1)。 尝试方案: 1:检查本机系统Vmware USB 服务是否开启,重启虚拟机…

基于Ant DesignPro Vue + SpringBoot 前后端分离 - 后端微服化 + 接口网关 + Nacos + Sentinel

基于Ant DesignPro Vue SpringBoot 前后端分离 - 后端微服化 接口网关 Nacos Sentinel 通过Ant DesignPro Vue SpringBoot 搭建的后台管理系统后,实现了前后端分离,并实现了登录认证,认证成功后返回该用户相应权限范围内可见的菜单。 后…

小白也能学会!人物百度百科怎么创建?5分钟教会你怎么创建人物百度百科

在当今互联网的时代,越来越多的小伙伴都有了打造个人IP意识,把个人形象展示出来,形成一张网络名片。人物百度百科就是是我们一个不错的选择,它具有体面和象征性。大家都知道在搜索引擎上随便搜索一个明星的名字,都可以…

【Servlet学习五】实现一个简单的数据库版本的留言墙!

目录 一、前期环境搭建 二、具体后端代码实现 🌈1、创建数据库 🌈2、创建message类:定义属性和相应的get和set方法 🌈3、创建JDBC工具类:DBUtil文件,定义一些数据库的基本操作 🌈4、创建m…

【doxygen】doxygen 支持宏判断

文章目录 配置 doxygen代码中判断宏 配置 doxygen 定义自己的宏 HAL_CONFIG_USB 代码中判断宏 if HAL_CONFIG_USB your contents endif需要注意的是 Doxygen不支持直接的 elif 指令。Doxygen只提供了 if 和 endif 指令来实现条件性文档生成。如果您需要多个条件进行判断&am…

VRRP协议是什么?详解它的工作原理

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 前言 本文将讲解VRRP是什么,以及它的工作原理,优点以及基本概念。 目录 一、VRRP协议是什么? 二、VRR…

Kubernetes·陈述式声明式资源管理

陈述式资源管理方法: 1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 2.kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信…