APP下载

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

2017-11-09,,,,

单片机与嵌入式系统应用 2017年10期
关键词:串口应用程序升级

,,,,

(北京工业大学 信息学部,北京 100124)

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

高祥凯,耿淑琴,何蕴良,彭晓宏,侯立刚

(北京工业大学 信息学部,北京 100124)

设计了一种基于LoRa技术的STM32F4无线程序升级系统。此系统由PC及相关STM32软件开发环境、LoRa通信模块及其控制器和STM32F4终端三部分组成。本系统采用LoRa技术将程序数据无线发送到终端,终端通过IAP技术实现远程无线程序自动升级。测试结果表明,此系统能够有效地进行无线传感网络终端的程序升级,极大节约了时间和人力成本。

LoRa技术;STM32F4微控制器;IAP技术

引 言

近年来,基于物联网应用的各种嵌入式产品层出不穷。但由于物联网应用中节点众多、分布广泛,为嵌入式终端固件升级带来了很多不便,于是远程、无线程序升级方法便吸引了很多学者的研究,其中基于IAP编程模式的程序升级方法应用较多。参考文献[1]提出了利用GPRS通信技术实现基于51单片机的远程IAP功能;参考文献[2]提出了一种基于HTTP协议的远程嵌入式产品程序升级方法;参考文献[3]实现了一种基于nRF905通信技术的无线程序编程器,可以实现对51系列单片机的无线程序烧写;参考文献[4]提到了Wi-Fi环境覆盖下的嵌入式产品系统升级方法;参考文献[5]提出了一种基于蓝牙串口模块,通过ymodem传输协议实现的IAP方案。

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

1 STM32F4芯片IAP编程基础

IAP即在应用中编程,是指通过一种通信接口(USART、USB、CAN等)下载程序或应用数据到存储器中。通常用户在实现IAP功能时,需要人为地将芯片内部存储区分为两块:一块用于存储IAP程序,称为BOOT区;另一块用于存储除IAP功能外的应用程序,称为常态存储区。STM32F40X/41X系列芯片的FLASH存储区域组织如表1所列。通过设置BOOT0和BOOT1两引脚的高低电平可设置程序的启动区域。一般将程序烧录到主存储区中,启动区域应设置为主存储区[6]。

STM32F4系列控制器加入IAP后,程序流程为:程序从主存储区(0x0800 0000)处开始执行,先取出栈顶地址,然后是复位中断向量,跳转至复位程序处执行,接下来程序便跳转至mian函数处(为IAP程序的main 函数)执行IAP过程。IAP过程中控制器会接收功能程序,写入FLASH并执行。执行过程与IAP程序开始执行过程相似,此时FLASH内部存在着两个不同位置的向量表,当应用程序运行时,产生的中断首先仍然返回到地址为0x0800 0004处的向量表,然后根据所设置的向量表偏移量找到向量中断源并执行中断服务程序,执行完成后会返回应用程序的main函数。

表1 FLASH模块组织

2 系统设计

2.1 系统总体设计

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

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

近些年来,LoRa技术因支持远距离传输、大数量子节点和低功耗技术[7],在物联网应用中取得了广泛的使用。本设计采用成都亿百特电子有限公司的E32-TTL-1W LoRa模块,该模块采用Semtech公司SX1278射频芯片,传输距离最远可达到8 km,工作频段为411~441 MHz;该模块支持4种工作模式和空中唤醒,可最大限度降低功耗;模块通过串口实现外部通信,易于实现。该模块共有7个引脚,通过串口实现与外部设备通信,引脚M0、M1用来设置模块工作模式,AUX用来指示模块工作状态[8]。

图1 LoRa模块控制器程序流程图

图2 LoRa模块与控制器连接图

LoRa模块控制器的程序流程图如图1所示,LoRa模块与控制器的连接关系如图2所示。控制器从PC接收程序代码,由于LoRa模块接收缓存有限,控制器须将代码分包,以一定时间间隔发送给LoRa模块。控制器上电会完成两个串口的初始化,串口1用来接收PC发送的bin文件,串口6用来向LoRa模块发送数据。串口1接收到数据后会进入串口接收中断函数,数据由DMA通道存储到内存特定区域,串口总线空闲中断标志接收代码完成。发送循环中,控制器每次将一个512字节的数据包(最后一次将剩余全部)发送给LoRa模块。当LoRa模块内部缓冲区的数据被读取时,AUX引脚的电平会发生变化,PA1引脚会捕捉AUX电平变化并产生中断,中断函数会设置发送下一个数据包,程序依次循环直至代码发送完全。

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

2.3 终端程序设计与分析

2.3.1 终端IAP程序设计与分析

IAP程序以SWD方式下载至芯片中,IAP程序流程图如图3所示。

图3 终端IAP程序流程图

上电复位后,依照BOOT模式设置,程序会从主存储区开始执行IAP程序。首先完成初始化,LoRa模块处于休眠状态;然后查询存储于FLASH地址为0x080E 0000处的变量更新标志位(upstate_mark)的值,如果该值为0x01,则表示程序需要等待更新,此时需将LoRa模块从休眠状态唤醒,终端会等待接收程序代码。终端一旦通过串口接收到LoRa模块发送的程序数据,就会记录所接收数据的长度,并且以1 s的时间间隔查询数据长度,如有两次发现数据长度不变,则判定接收完成,紧接着将update_mark置0x00,表示下次终端上电无需等待更新。应用程序代码会被写到起始地址为FLASH_APP1_ADDR的连续FLASH存储区内。在此终端程序中给它分配的值为0x0801 0000,即在此之前给IAP程序预留的空间为64 KB,通过Keil软件查看编译后的IAP程序代码大小完全够用。向FLASH写入代码前,首先要判断一下复位向量所在的物理存储空间是不是指向FLASH的,代码如下:

(*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000;

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

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

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

if(FLASH_ProgramWord(WriteAddr,*pBuffer)!=FLASH_COMPLETE){ //写入FLASH

break;}

WriteAddr+=4;

pBuffer++;

……

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

if(((*(vu32 *)App1Addr)&0x2FFE0000)==0x20000000){

//检查栈顶地址是否合法

JumpToApp=(iapfun)*(vu32*)( App1Addr +4);

//取出复位函数地址

MSR_MSP(*(vu32*) App1Addr);

//设置主堆栈指针

JumpToApp ();

//跳转执行应用程序

}

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

2.3.2 终端IAP程序设计与分析

终端应用程序中首先要设置中断向量表偏移量:SCB->VTOR = FLASH_BASE|0x1 0000;这样在main函数执行过程中,如果CPU得到一个中断请求,PC指针仍强制跳转到地址0x0800 0004中断向量表处,然后再根据设置的中断向量表偏移量跳转到对应中断服务程序中,最后进入正常的应用程序功能。

图4 终端应用程序流程图

当终端正常运行时要进行程序升级,只需通过LoRa模块向指定终端发送更新指令(本次系统设置为“up”两个字节),终端收到指令后将update_mark置0x01,紧接着执行一次软件复位,程序将再次进入到IAP程序,检查到update_mark为0x01会一直等待接收程序,从而可以完成程序的升级。终端应用程序流程图如图4所示。

3 实验验证和分析

本文实验所采用的STM32F4终端为ST官方开发板STM32F4DICOVERY,实验在同一楼层内相距约40 m的两间实验室内进行。PC通过串口发送给LoRa控制器,控制器返回一些信息用来提示程序进程,每发送完一个512字节的数据包,就会返回一个blockxover信息,以便查看程序进程。

本文通过连续两次对同一终端进行程序更新,首先在PC上完成第一个程序的编译调试,得到程序bin文件大小为3.25 KB,发送完成后检测终端运行情况正常。之后如果需要再次更新程序,先发送更新指令(本次设计为字符串“up”),然后发送第二个程序bin文件即可,本次实验第二个应用程序编译之后bin文件大小为4.52 KB。

进行实验时,PC端发送完程序后,在另一个实验地点观察终端指示灯LD3的状态,当终端运行IAP程序时,LD3处于熄灭状态,当其点亮的时候表明应用程序已开始运行,此时检验终端功能是否与程序一致。先后下载的两个应用程序与预期结果表现一致,验证了本系统的可靠性。

结 语

[1] 胡静静.实现基于GPRS的无线远程IAP功能[J].单片机与嵌入式系统应用, 2005(6):21-23,38.

[2] QINGQING X.A design and implement of IAP based on HTTP[C]//proceedings of the 2011 International Conference on Computer Science and Service System (CSSS),2011.

[3] 薛秀云,洪添胜,宋淑然,等.基于无线通信技术的程序编程器[J].沈阳农业大学学报,2013,44(3):15-20.

[4] ZAWARE P G,SHINDE S V.Wireless monitoring, control-

ling and firmware upgradation of embedded devices using Wi-Fi[C]//Proceedings of the 2014 International Conference on Advances in Communication and Computing Technologies (ICACACT 2014),2014.

[5] 徐洋,马跃.STM32F103系列微控制器在应用编程技术研究[J].单片机与嵌入式系统应用,2013(8):35-37,40.

[6] STMicroelectronics.DM00031020 F4xx Reference Manual[EB/OL].[2017-06].http://www.stmcu.org/document.

[7] STAN V A,TIMNEA R S,GHEORGHIU R A.Overview of high reliable radio data infrastructures for public automation applications:LoRa networks[C]//Proceedings of the 2016 8th International Conference on Electronics,Computers and Artificial Intelligence,2016.

[8] 成都亿百特电子科技有限公司.AN001产品应用手册[EB/OL].[2017-06].http://www.cdebyte.com.

[9] 张舞杰,南亦民.基于STM32F103VB的应用编程技术的实现[J].计算机应用,2009(10):2820-2822.

高祥凯(硕士研究生),主要研究方向为无线传感器网络; 耿淑琴(高级讲师),主要研究方向为射频识别、无线传感网等;何蕴良(硕士研究生),主要研究方向为集成电路设计与系统集成。

结 语

参考文献

[1] 王诚.Altera FPGA/CPLD设计(基础篇)[M].2版.北京:人民邮电出版社,2011.

[2] 吴厚航.FPGA/CPLD边练边学——快速入门Verilog/VHDL[M].北京:北京航空航天大学出版社,2013.

[3] 王忠林.基于Quartus II的CPLD的数字系统设计与实现[M].北京:机械工业出版社,2012.

[4] Altera.Altera Device Package Information[EB/OL].[2017-05].https://www.altera.com.cn/.

[5] Altera.MAX V Device Handbook[EB/OL].[2017-05].https://www.altera.com.cn/.

[6] Altera.MAX V Device Family Pin Connection Guidelines[EB/OL].[2017-05].https://www.altera.com.cn/.

[7] Altera.Pin Information for the MAX V 5M570Z Device[EB/OL].[2017-05].https://www.altera.com.cn/.

[8] Altera.MAX V Device Family Overview[EB/OL].[2017-05].https://www.altera.com.cn/.

WirelessProgramUpdatingSystemofNetworkTerminalBasedonLoRaTechnology

GaoXiangkai,GengShuqin,HeYunliang,PengXiaohong,HouLigang

(College of Information Technology,Beijing University of Technology,Beijing 100124,China)

In the paper,a wireless program updating system of STM32F4 microcontroller based on LoRa technology is proposed.The system consists of three parts:a PC and related software development tools,the communication module of LoRa with microcontroller and STM32F4 terminal.The wireless communication between the terminal and the PC is achieved through LoRa technology,and the terminal could update its program automatically using IAP technology.The experiment results show that it’s an effective method for wireless program updating with saving time and labor costs.

LoRa technology;STM32F4 microcontroller;IAP technology

北京市自然科学基金(Z2002013201501);北京市自然科学基金资助项目(4172010)。

TP311

A

2017-06-02)

(责任编辑:薛士然 收稿日期:2017-05-12)

猜你喜欢

串口应用程序升级
小投入,大升级 Polk Audio Monitor XT系列
浅谈AB PLC串口跟RFID传感器的通讯应用
幸福,在“家门口”升级
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
回暖与升级
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
三星电子将开设应用程序下载商店