基于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区域)范围内;取出应用程序复位函数地址;设置栈指针;程序跳转到应用程序复位函数地址处,应用程序开始执行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于Lora技术的水表集中采集系统是一种利用无线通信技术实现远程水表数据采集的系统。该系统包括水表、Lora通信模块、数据采集终端和数据接收服务器等组成部分。 首先,每个水表都装备了Lora通信模块,通过无线方式将水表读数和其他相关数据传输给数据采集终端Lora通信技术具有广阔的覆盖范围和较低的功耗,能够实现长距离、低功耗的数据传输,方便实现水表远程读数。 其次,数据采集终端负责收集水表传输的数据,并进行处理和存储。该终端具备数据处理和存储功能,能够自动收集水表的读数数据,并将其存储到本地数据库中。同时,数据采集终端还具备与数据接收服务器的通信能力,能够将采集到的数据传送给服务器进行进一步处理和管理。 最后,数据接收服务器是整个系统的核心部分,负责接收和管理从数据采集终端传来的水表数据。服务器能够对接收到的数据进行分析和处理,并可根据需求生成水表用水量报表、异常报警等功能,帮助用水单位或管理部门进行用水管理和监控。 基于Lora技术的水表集中采集系统具有多个优势。首先,它能实现水表的远程自动读数,省去了人工收集水表读数的时间和人力成本。其次,系统具备低功耗和长距离的通信特性,能够实现水表数据的远程传输,避免了传统有线采集方式的限制。最后,系统能够通过数据处理和分析,帮助用水单位进行用水量管控和异常监测,提高用水管理的效率和精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饼干饼干圆又圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值