4G无线通信技术的单片机远程升级研究(学习)

介绍了一种基于4G无线通信技术的单片机远程在线升级系统及方法,由上位机、4G无线模块、嵌入式设备终端3部分组成。
结合EC20 R2.1 4G模块,介绍了4G无线网络的组建方法,借助4G网络实现远程无线升级。
通过验证测试,系统能够实现嵌入式程序可靠、稳定地快速升级。
本设计特别适用于恶劣环境、偏远地区等特殊场合,可大大提高设备维护效率,降低维护成本,具有很高的应用价值。

嵌入式设备在使用过程中,经常因功能更新、缺陷修改、性能提升等原因需要进行升级。
程序升级的传统手段是维护人员亲赴现场烧写程序,如果设备应用在高温高湿、腐蚀、密闭空间、野外等恶劣偏远环境中,人工操作是很困难的。此外,传统手段速度慢、差旅费用高,尤其是当设备数量庞大、分布范围广时,耗费的成本是不可估量的。

随着无线通信技术的发展,GPRS、4G等应用越来越简单,本文提出基于4G无线网络的嵌入式程序IAP远程在线升级方案。
使用4G无线网络,无需现场布线,设备安装位置灵活,只要有4G信号覆盖即可,非常适合用于恶劣环境、设备量大、分布范围广等特殊场合。

IAP在线升级原理

对单片机进行编程,常用方式有JTAG、ISP、IAP等。

  • JATG一般用于程序开发阶段在线调试。
  • ISP需要依靠单片机厂商预先固化在片内的引导程序(Bootloader)通过串行外设等程序下载到存储器,这种方式需要通过更改硬件设置选择程序启动位置。
  • IAP依靠用户自己的程序在运行中对单片机进行编程,不需要更改硬件设置,无人参与即可实现升级,具有更好的灵活性。

单片机实现IAP升级需要将片内存储器人为地分为两部分:一部分存储IAP程序,称为IAP程序区;另一部分存储正常的APP应用程序,称为APP程序区。

在STM32F103ZET6上实现IAP,需要将单片机配置为从Flash主存储器启动。

在这里插入图片描述
STM32F103ZET6的Flash存储器组织结构如表1所列,IAP程序放置在Flash基地址处(0x08000000)。在本应用中,将前20KB区域划为IAP程序区,其余划为APP程序区。

STM32主存储区起始地址为0x0800 0000,IAP程序从此地址开始写入。
在STM32中,程序的第1个字是栈顶地址,第2个字是复位向量指针,然后依次是其他中断向量指针(即中断向量表从第2个字开始)。

在设备生成阶段,将IAP和APP程序按照表1区域划分烧写到对应区域,系统启动及工作流程如图所示:
在这里插入图片描述
系统复位后从0x08000004地址取出复位中断指针,跳转到IAP复位中断程序执行,执行完后跳转到IAP程序main函数继续执行,如标号①所示。
在IAP的main函数中判断是否更新程序,并执行相应操作,最后从IAP向APP的跳转,取出APP复位中断向量指针,跳转到APP复位中断函数执行,如标号②所示,执行完APP复位中断函数后,返回到APP的main函数继续执行,这就完成了IAP向APP的跳转。

需要注意的是,在APP的main函数执行过程中,如果发生中断,PC指针仍跳转到0x08000004地址中断向量表,然后根据APP中设置的中断向量表偏移量跳转到APP对应中断服务程序执行,执行完后再返回APP程序的main函数。

关键:
在设备生产阶段,将IAP和APP程序按照表1区域划分烧写到对应区域。系统复位后从0x08000004地址取出复位中断指针,跳转到IAP复位中断程序执行,执行完后跳转到IAP程序main函数继续执行。在IAP的main函数中判断是否更新程序,并执行相应操作,最后完成IAP向APP的跳转,取出APP复位中断向量指针,跳转到APP复位中断函数执行。

4G无线通信技术

本设计中4G模块选用上海移远通信公司的EC20 R2.1,该模块支持最大下载速度150Mbps和最大上行速率50Mbps,内置丰富的网络协议,支持TCP/IP协议。

在本设计中,EC20 R2.1在APP程序中初始化,使用TCP/IP组网,组网过程如图2所示。
在这里插入图片描述
当模块复位后,首先进行基础配置,如UART波特率,是否回显等,模块自动检测SIM卡,自动附着4G网络,网络附着成功后,设置APN名称、目标IP、目标端口号等参数,然后激活PDP场景,打开网络连接,此时单片机就通过4G无线网络接入了Internet。

基站可接入设备数量是有限的,为了保证可随时接入新的设备,基站会主动断开长时间无数据交互的设备。
本设计中为实现4G网络长连接,设置有心跳功能,定时向上位机发送心跳数据,上位机收到后回应心跳应答。
另外,当网络异常断开后,为了保证网络可恢复,必须在APP程序中设置有自动重新组网机制。

系统总体设计

本系统包括上位机、4G无线模块、STM32F103RCT6设备终端3个部分。单片机外接EEPROM,临时存储上位机发来的升级数据,单片机通过UART和4G模块相连,4G模块通过无线网络连接到上位机。

使用开发软件(如Keil MDK)完成程序编写、调试、编译,并转换为*.bin格式文件用于IAP升级。
进行升级时,上位机将待升级文件按规则分多包发送到STM32设备,并做好缺包查询、重发、校验等,确保升级数据正确。

在APP程序中接收升级数据。设备收到升级数据包后,临时存储在EEPROM中,待所有升级包发送完且验证正确后,“升级标记”置位,然后软件复位重启系统,重新进入IAP程序,在IAP中将升级数据从EEPROM转存到单片机内Flash的APP程序区,完成升级。

IAP程序设计与分析

在这里插入图片描述
上电后程序从Flash存储区(起始位置为0x08000000)启动,执行IAP程序,依次进行外设初始化、“升级标志”检查、升级数据验证等,将升级数据转存到APP程序区,并清除“升级标志”,跳转到APP程序区执行。若“升级标志”无效,则直接跳转执行原来的APP程序。

在IAP程序中将升级数据转存到APP程序区如下:(首先擦除Flash空间,然后从临时存储区中读出数据,写入APP程序区)

NbrOfPage = FLASH_PagesMask(size); //计算升级文件占用多少Flash页
//擦除需要重新编写程序的Flash页
for(EraseCnt=0; EraseCnt<NbrOfPage; EraseCnt++){
	FLASHStatus = FLASH_ErasePage(FalshDest + (PageSize * EraseCnt));
	for(j=0; j<=size/512; j++){
		//将升级代码写入Flash,每次512字节
		if(j == size/512){
			packet_len = size % 512;
		}else{
			packet_len = 512;
		}
		SDReadDate(path,Buff,packet_len,512*j); //从备份区读出升级代码
		Source = (uint32_t)Buff;
		for(i=0;(i<packet_len)&&(FlashDest<RunAppAddr+size); i+=4)
			FLASH_ProgramWorld(FlashDest, *(uint32_t *)Source);
			FlshDest += 4;
			Source += 4;	
	}
}

将升级数据全部写到APP区后,清除“升级标志”并跳转到APP区继续执行。跳转代码如下:

//RunAppAddr为APP程序起始地址,本设计中为0x08005000
//检查栈顶地址是否合法
JumpAddr =*(__IO uint32_t *)(RunAppAddr+4); //获取APP的复位函数地址
Jump_To_App(pFunction)JumpAddr; //将跳转地址强制转换为指针函数
__set_MSP(RunAppAddr); //设置主堆栈指针
Jump_To_App(); //跳转执行APP程序

执行跳转程序时,首先检查栈顶地址是否合法,RunAppAddr是APP的起始地址,为0x08005000,程序的第1个字(4个字节)为栈顶地址,判断栈顶地址是否在RAM区域(0x20000000~0x2001FFFF),如果栈顶地址合法,取出APP复位中断指针(第2个字),并设置栈顶指针,最后跳转到APP复位中断服务函数,开始执行升级后的APP程序。

APP程序设计与分析

在APP程序中,首先要设置中断向量偏移表。在APP运行过程中如果发生中断,跳转到0x0800 0004复位中断向量后,根据设置的中断向量偏移量跳转到APP对应的中断服务程序。如果在偏移量设置前发生中断,将不能正确返回原地址运行导致系统异常,所以在APP程序中要尽早设置中断向量表偏移量。

本设计中IAP升级过程主要由“升级开始、缺包查询、发包数据、升级结束”4组指令完成,结合图5,具体操作流程如下:
在这里插入图片描述

  1. 升级开始,上位机发送“升级开始”指令,设备收到后做好升级准备工作,记录代码总大小,每包大小、总包数等信息,进行相应参数的初始化,并向上位机返回应答。
  2. 准备工作做好后,上位机发送“缺包查询”指令,设备向上位机返回缺包序号。
  3. 上位机收到缺包信息后,依据缺包号逐包发送升级程序。发送升级包时采取无应答发送,每隔一段时间(如400ms)发送一包数据,不必关心设备有没有正确接收。设备收到升级包后,按照包序号、大小顺序存储在临时存储区中。
  4. 上位机按照确保信息发送完所有包后,再次发送缺包查询指令,在步骤3发送升级包失败的,在此步骤上位机可以重新获取缺包序号。
  5. 按照新的缺包信息,逐包发送升级包。
  6. 重复步骤4、5,直至所有升级包发送完成。
  7. 成功发送完所有升级包后,上位机发“升级结束”指令,其中包含整个升级文件的CRC校验码,设备收到结束指令后,对接收到的全部升级数据进行CRC校验,如果校验码和上位机发送的一致,则认为升级数据正确,置位“升级标志”,并软重启设备,进入IAP程序,将临时存储区的升级数据复制到APP程序区,跳转到新程序执行,至此升级完成。

系统验证与分析

将EEPROM更换为256KB容量,保证临时存储空间足够。
使用Keil MDK完成IAP和APP程序后,使用JTAG分别烧写到IAP区和APP区。

系统启动后从IAP跳转到APP开始工作,待4G组网登录上位机后,开始远程升级测试。
本设计可靠性主要体现在:

  1. 设备4G网络断线后,可自动重新登录,避免因网络问题找不到设备,重新登录后,可从断点继续执行,不必重新发送所有数据。
  2. 通信协议设置有严格的校验机制,保证接收到每一帧数据正确。
  3. 缺包查询机制严谨,保证设备正确接收到每一个升级包。
  4. 在升级结束指令中发送整个升级文件的CRC校验码,设备将收到的升级数据以相同方式校验,与上位机发来的CRC对比,确保升级数据正确。
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

饼干饼干圆又圆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值