基于LoRa技术的网络终端无线程序升级系统研究(学习)

摘要

设计了一种基于LoRa技术的STM32F4无线程序升级系统。此系统由PC及相关STM32软件开发环境、LoRa通信模块及控制器和STM32F4终端三部分组成。

本系统采用LoRa技术将程序数据无线发送到终端,终端通过IAP技术实现远程无线程序自动升级。测试结果表明,此系统能够有效地进行无线传感网络终端的程序升级,极大节约了时间和人力成本。

引言

近年来,基于物联网应用的各种嵌入式产品层出不穷。但由于物联网应用中节点众多、分布广泛,为嵌入式终端固件升级带来了很多不便,于是远程、无线程序升级方法吸引了很多学者的研究,其中基于IAP编程模式的程序升级方法应用较多。

有文献提出了利用GPRS通信技术实现51单片机的远程IAP功能;还有文献提出了一种基于HTTP协议的远程嵌入式产品程序升级方法;还有文献实现了一种基于nRF905通信技术的无线程序编程器,可以实现对51系列单片机的无线程序烧写;还有文献提到了Wi-Fi环境覆盖下的嵌入式产品系统升级方法;还由文献提出了一种基于蓝牙串口模块,通过ymodem传输协议实现的IAP方案。

以上的程序升级方法很难在节点众多的物联网应用中取得广泛应用。LoRa技术适合组建低功耗无线传感器网络,广泛应用于物联网研究中。
本文尝试将LoRa技术和IAP技术相结合,实现一种应用与STM32F4控制器的无线程序升级系统。
采用此方案进行程序升级,节约了成本,减少了人力物力的消耗,对同类无线终端和节点的程序升级有借鉴意义。

STM32F4芯片IAP编程基础

IAP即在应用中编程,是指通过一种通信接口(USART、USB、CAN等)下载程序或应用数据到存储器中。
通常用户在实现IAP功能时,需要人为地将芯片内部存储区分为两块:一块用于存储IAP程序,称为BOOT区;另一块用于存储除IAP功能外的应用程序,称为常态存储区。
在这里插入图片描述
通过设置BOOT0和BOOT1两引脚的高低电平来设置程序的启动区域。一般将程序烧录到主存储区,启动区域设置为主存储区。

STM32F4系列控制器加入IAP后,程序流程为:先取出栈顶地址,然后是复位中断向量,跳转至复位程序处执行,接下来程序便跳转至main函数处(为IAP程序的main)执行IAP过程。

IAP过程中控制器会接收功能程序,写入FLASH并执行。执行过程与IAP程序开始执行过程相似,此时FLASH内部存在着两个不同位置的向量表,当应用程序运行时,产生的中断首先仍然返回地址为0x08000004处的向量表,然后根据设置的向量表偏移量找到向量中断源并执行中断服务程序,执行完成后会返回应用程序的main函数。

系统总体设计

本系统由PC及相关STM32软件开发环境、LoRa通信模块及控制器和STM32F4终端三部分组成。

  • 利用STM32软件开发工具完成程序的编写、调试,生成bin文件;
  • PC机与LoRa模块控制器通过串口相连,收到数据后,串口会将数据每512字节打成一个数据包,然后发送给LoRa模块进行无线发送;
  • 与终端相连的LoRa模块接收到数据后会发送给STM32F4终端,终端判断完成数据接收后会写入FLASH并执行。

LoRa模块及控制器设计与分析

近年来,LoRa技术因支持远距离传输、大数量子节点和低功耗技术,在物联网应用中取得了广泛的使用。

本设计采用成都亿百特电子有限公司的LoRa模块,该模块采用Semtech公司SX1278射频芯片,传输距离最远可达到8km,工作频段为411~441MHz;该模块支持4种工作模式和空中唤醒,可最大限度降低功耗;模块通过串口实现外部通信,易于实现。

该模块共有7个引脚,通过串口实现与外部设备通信,引脚M0,M1来设置模块工作模式,AUX用来指示模块工作状态。

在这里插入图片描述
LoRa模块控制器的流程图如图所示,LoRa模块与控制器的连接关系如图所示:
在这里插入图片描述
控制器从PC接收程序代码,由于LoRa模块接收缓存有限,控制器须将代码分包,以一定时间间隔发送给LoRa模块。

控制器上电会完成两个串口的初始化,串口1用来接收PC发送的bin文件,串口6用来向LoRa模块发送数据。

串口1接收到数据后会进入串口接收中断函数,数据由DMA通道存储到内存特定区域,串口总线空闲中断标志接收代码完成。

发送循环中,控制器每次将一个512字节的数据包(最后一次将剩余全部)发送给LoRa模块。当LoRa模块内部缓冲区的数据被读取时,AUX引脚的电平会发生变化,PA1引脚会捕捉AUX电平变化并产生中断,中断函数会设置发送下一个数据包,程序依次循环直至代码发送完全。

由于AUX的变化智能表示LoRa模块已开始发送缓冲区内的数据,并不能确保数据已被完全发生且接收方LoRa模块也需要足够的时间来接收数据,因此发生下一个数据包之前会有一段延时,确保完整的数据发送和接收,这个延时数值在应用中赢根据无线传输的距离而定,不能小于数据从写进发送端LoRa缓冲区到接收端完全接收的时间间隔,本系统中设置的时间为1s,满足这一要求。

终端IAP程序设计与分析

IAP程序以SWD方式下载至芯片中,IAP程序流程如图3所示。
在这里插入图片描述
上电复位后,依照BOOT模式设置,程序会从主存储区开始执行IAP程序。首先完成初始化,LoRa模块处于休眠状态;然后查询存储于FLASH地址为0x080E0000处的更新标志位(upstate_mark)的值,如果该值为0x01,则表示程序需要等待更新,此时需要将LoRa模块从休眠状态唤醒,终端会等待接收程序代码。

终端一旦通过串口接收到LoRa模块发送的程序数据,就会记录所接收的数据的长度,并且以1s的时间间隔查询数据长度,如有两次发现数据长度不变,则判定接收完成,紧接着将update_mark置0x00,表示下次终端上电无需等待更新。

应用程序会被写到起始地址为FLASH_APP1_ADDR的连续FLASH存储区内。在此终端程序中给它分配的值为0x08010000,即在此之前给IAP程序预留的空间为64KB,通过Keil软件查看编译后的IAP程序代码大小完全够用。

向FLASH写入代码前,首先要判断一下复位向量所在的物理存储空间是不是指向FLASH的,代码如下:

(*(u32_t *)(FLASH_APP1_ADDR+4)) & 0xFF000000 == 0x08000000

确认无误后,开始调用向FLASH写应用程序函数,代码如下:

iap_write_app(FLASH_APP1_ADDR,(uint32_t)USART_RX_BUF,REC_CNT);

此函数会调用STM32F4开发库中的写FLASH函数,代码如下:

if(FLASH_ProgramWolrd(WriteAddr, *pBuffer) != FLASH_COMPLETE){break;
}
WriteAddr += 4;
pBuffer++;

FLASH_ProgramWolrd()每次会向FLASH写入一个字(4字节),接收数组是字节类型的,因此调用时要强调地址类型转换。
执行完写程序后,将upstate_mark变量重写为0x00,下次上电复位标志无需等待更新,直接执行程序调整。

if(((uint32_t *)App1Addr) & 0x2FFE0000) == 0x20000000){JumpToApp() = (iapfun)*(vu32*)(App1Addr+4); //取出复位函数地址MSR_MSP(*(uint32_t *)App1Addr); //设置主堆栈指针JumpToApp(); //跳转执行应用程序
}

首先检查栈顶地址是否合法,App1Addr为应用程序地址,程序代码第一个字为栈顶地址,判断栈顶地址是否在0x2000 0000 ~ 0x2001 FFFF(RAM区域)范围内;取出应用程序复位函数地址;设置栈指针;程序跳转到应用程序复位函数地址处,应用程序开始执行。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iManager for K8S 站点定制(以MongoDB为例)

作者:ls 目录 背景前期准备实现效果实现过程附录YAML中的属性配置占位符列表 背景 SuperMap iManager支持一键创建用户定制的站点,可将已添加的站点模板创建为站点环境,并通过站点使用应用。   定制站点与其他站点相同,在监管方…

2023年最新水果编曲软件FLStudio21.0.3.3517中文直装完整至尊解版下载

2023年最新水果编曲软件FLStudio21.0.3.3517中文直装完整至尊解版下载 是最好的音乐开发和制作软件也称为水果循环。它是最受欢迎的工作室,因为它包含了一个主要的听觉工作场所。 最新fl studio 21有不同的功能,如它包含图形和音乐音序器,帮助…

HTML5和CSS3新特性

文章目录 1.HTML5新特性1.1 概述1.2 语义化标签1.3 多媒体标签1.3.1 视频标签- video1.3.2 音频标签- audio 1.4 新增的表单元素1.5 新增表单属性 2.CSS3新特性2.1新增选择器2.1.1 属性选择器2.1.2 结构伪类选择器E:first-childE:nth-child(n)E:nth-child 与 E:nth-of-type 的区…

WebSocket协议基础

文章目录 什么是websocketwebsocet 特点 一、websocket 建立连接流程二、websocket 握手流程客户端握手包2.服务端握手包 三、websocket数据总结参考 什么是websocket WebSOcket 是基于TCP的应用层协议。该协议和http或https 相似,但是却区别于http的一种新的协议。…

Web_php_include

代码审计 进入环境&#xff0c;根据题目的提示&#xff0c;本题考察文件包含漏洞 <?php show_source(__FILE__); echo $_GET[hello]; $page$_GET[page]; while (strstr($page, "php://")) {$pagestr_replace("php://", "", $page); } incl…

一些抄袭CSDN的爬虫网站(长期收集更新)

目录 一、CodeAntenna1. 简介2. 网址 二、待更新。。。 本文由CSDN点云侠原创&#xff0c;爬虫网站请努力加油爬。 一、CodeAntenna 1. 简介 互联网耻辱柱排行榜Top 1。本人博客里任何一点免费可读的部分都被该网站爬得体无完肤。 2. 网址 https://codeantenna.com/a/B4cMB…

数据可视化:揭开数据的视觉奇迹

随着大数据时代的到来&#xff0c;我们面临着海量的数据&#xff0c;如何从中获取有价值的信息成为一项重要的挑战。数据可视化作为一种强大的工具&#xff0c;通过图表、图形和交互界面&#xff0c;将数据转化为可视化的形式&#xff0c;帮助我们更好地理解和分析数据。 数据可…

AlGaN基深紫外FP激光器仿真模型及材料信息数据库有何用途?

波长范围为UVC波段&#xff08;100-280 nm&#xff09;的深紫外FP&#xff08;Fabry-Pero&#xff0c;法布里和珀罗是两位法国的科学家&#xff09;激光器可广泛应用于数据通信、光通信、3D打印、材料加工、显示与照明、激光雷达、人脸/手势识别、医疗和表面监测等领域。FP激光…

数据分析——AB测试应用与实战

摘要 某电商公司非常注重自己的落地页设计&#xff0c;希望通过改进设计来提高转化率。以往该公司全年转化率平均在13%左右&#xff0c;现在希望设计的新页面能够带来更高的转化率&#xff0c;希望新页面的转化率能有2%的提升&#xff0c;达到15%。在正式推出新页面之前&#…

Non-Local Video Denoising by CNN

摘要 Non-local patch based methods were until recently state-of-the-art for image denoising but are now outper formed by CNNs. Y et they are still the state-of-the-art for video denoising, as video redundancy is a key factor to attain high denoising perfor…

【分布式任务调度】XXL-JOB的任务调度实现原理(四)

文章目录 1.前言2.调度中心流程2.1.任务配置扫描流程2.2.计算任务触发时机2.2.1.已超时5秒以上2.2.2.超时未超过5秒2.2.3.还未到触发时间 2.3.任务触发流程2.3.1.任务触发线程池2.3.2.参数处理2.3.3.任务触发2.3.4.分片广播策略&#xff08;补充&#xff09; 3.执行器流程3.1.任…

Python - Gradio用Blocks构建自定义界面布局的应用程序

什么是Blocks Blocks是Gradio的低级API&#xff0c;它允许你创建比Interfaces更多的自定义web应用程序和演示。简单来说就是比Interfaces更灵活。 一般使用上下文管理&#xff0c;示例代码如下&#xff1a; import gradio as grwith gr.Blocks() as demo:gr.Image("lion…