基于STM32处理器的WSN节点固件在线系统升级方法

2016-06-08 05:48蒋存波
计算机应用与软件 2016年5期
关键词:固件报文编程

蒋存波 焦 阳

(桂林理工大学信息科学与工程学院 广西 桂林 541004)



基于STM32处理器的WSN节点固件在线系统升级方法

蒋存波焦阳

(桂林理工大学信息科学与工程学院广西 桂林 541004)

摘要为满足无线传感网中节点设备的功能升级和系统重构需要,研究基于Cortex-Mx核的嵌入式系统固件IAP更新升级方法。利用命令请求加身份验证的方式触发升级,利用分拆函数将代码拆分成128字节信息块并将其组成138字节的ModBus报文进行传输,利用CRC进行数据校验,采用应答机制实现流量控制,利用Flash识别函数区分不同的Flash类型,利用Flash写入函数满足片内片外Flash、不同参数NorFlash和NandFlash编程需要。经实验测试,该方案能够实现WSN节点的固件升级与WSN在系统动态重构需要。

关键词嵌入式系统WSN固件在线升级ModBus协议

0引言

随着现代电子技术、计算机技术、控制技术的发展,物联网技术得到迅速发展及应用。在物联网系统中有许多基于ARM-Cortex-Mx(x=0,1,3)核的WSN节点,这些节点在布置完毕后,依据应用要求的变化需要在线进行固件更新升级[1,2],由于固件大小差异很大,一些可存储于片内Flash中,还有一些需要存储于外扩NorFlash或NandFlash中。ISP(in-system programming)方法可以实现在系统编程,但需要配置处理器的boot引脚,不适用WSN节点等的在系统升级要求。ST提供的IAP方法,不支持Flash扩展,亦不能完全满足用户对产品的升级需要。本文介绍一种IAP方法,可以在应用系统中实现处理器片内Flash和片外扩展Flash固件的在线升级,可满足WSN节点的在线固件更新与WSN在系统动态重构需要。

1STM32处理器在线编程特点

STM32F*使用Cortex-Mx内核,具有体积小、功耗低、实时性好、处理能力强、支持多种可编程IO接口的特点[3],STM32F*片内具有64~512 KB 的Flash和8~64 KB的SRAM,基于M3内核的大容量产品利用FSMC还可以扩展外部Flash。

STM32可使用ISP和IAP两种在线编程方法。ISP方法需要通过配置boot引脚激活,使用USART接口下载程序。IAP方式通过设计者设计的操作命令进入,通过执行IAP功能程序利用MCU支持的所有通信接口(I/Os,USB,CAN,UART,I2C,SPI等)接收命令、更新数据或代码[4]。

2IAP软件设计

2.1Flash编程方法

STM32的片内Flash以扇区为单位设置写保护,每扇区4 KB,根据Flash容量不同,页大小分为1和2 KB两种情况。复位后,Flash存储器默认为写保护状态,也可通过软件设置FLASH_CR寄存器中的LOCK位进行写保护。在写保护状态下只能按序在FLASH_KEYR寄存器中写入控制字CW1=0x45670123和CW2=0xCDEF89AB才能开启对FLASH_CR的访问权限。Flash需要擦除后再编程,最小擦除单位为页,也可以整片擦除,编程后将Flash进行上锁保护以防止意外写入。STM32通过FSMC对NorFlash进行编程,由FSMC的NorFlash控制器进行管理和控制,片外NandFlash的编程方法类似于片内Flash[5,6]。本方法采用按页擦除的方式。片内Flash编程函数采用(页号+页内偏移)形式的逻辑地址,处理器使用线性物理地址访问片内Flash,需要将其转换成逻辑地址,两者之间的关系为:物理地址=Flash基地址+页地址+页内偏移。具体可由式(1)得出:

(1)

其中Oreal表示Flash基地址偏移,Waddr为实际写入地址,Fbase为Flash基地址,Pno为页号,Psize为页容量,Poffset为页内偏移,‘’为取余,Premain为页内剩余的半字容量。

片外NorFlash使用物理线性地址[7],片外NandFlash的编程函数采用(单元号:块号:页号)形式的逻辑地址,编写NAND_ADDRESS结构体,通过配置结构体确定写入位置。

2.2IAP设计思路

图1 User Flash空间分配

将User Flash划分为三个区域,Boot区、File区和Code区[8,9],Boot区用于存放IAP相关功能程序[10]:基本硬件驱动程序、Flash操作相关程序、通信接口管理程序、通信协议栈等,在线升级禁止对该区域进行擦除与写操作。File区用于存放文件记录表,大小为一页,本文只有一条记录,存放了应用程序的文件名和起始地址。Code区存放WSN相关功能程序、用户其它应用程序。STM32F*中的用户程序块划分如图1所示。程序在更新过程中若出现掉电,失联等情况,系统仍可运行Boot区的代码,保证系统的稳定性。

在需要更新程序时,发送方服务器通过选定的通信方式向特定设备地址(ID)发送升级命令,升级命令采用RTU形式的ModBus报文传输,选择功能码42H作为升级报文,命令字CV=01作为升级命令,如表1所示。设备收到升级命令后向用户发送身份验证报文,在成功验证身份后可获得对设备的升级权限,被寻址设备进入IAP功能,以此提高程序更新的安全性。采用ModBus协议进行数据传输,设备在收到2 KB有效数据时进行Flash编程操作。

表1 命令报文

对于一个任意长度的数据文件,发送方服务器利用报文组织函数Protocol_Packed(*pBuffer)将其拆分成n个128 bit的信息块,并为每个信息块添加首部和校验值组织成138 bit的RTU形式的ModBus数据帧[10],*pBuffer为数据文件的首地址。通过应答机制实现发送方与接收方的速度传输协调,实现流量控制。

接收方利用解包函数Protocol_Unpacked()得到有效数据,并将其存储到SRAM的缓冲池中,缓冲池大小为2 KB,缓冲池满即将数据写入Flash。利用Flash识别函数Flash_rec(Flash_ID,Psize)识别片内Flash、扩展NorFlash和NandFlash,Flash_ID为Flash类型号,0表示片内Flash,1表示NandFlash,2表示NorFlash,Psize为页大小。通过配置不同的存储器访问时序参数匹配不同Flash的写入速度,考虑到最大的读/写访问时间,FSMC内部各部分的延迟,存储器内部各部分的延迟,NorFlash由式(2)、式(3)得出,NandFlash由式(2)、式(3)、式(4)得出。

(2)

(3)

(4)

其中,Twc,Trc为所选芯片的写/读操作周期长度,Twp为所选信号的写信号持续长度,TAVQV为地址有效到数据有效的时间域,Tsu(Data_NE),Ttv(A_NE)为STM32特征参数,分别表示从数据有效到FSMC片选有效与从FSMC片选有效到地址有效。

根据Flash_rec的识别的结果调用不同的Flash写函数STMFLASH_Write(WriteAddr,*pBuffer,NumToWriter)写入Flash,若为片内Flash,WriteAddr需由式(1)转换为逻辑地址,若为NorFlash,WriteAddr为物理线性地址,若为NandFlash,WriteAddr为NAND_ADDRESS结构体指针。*puffer为数据指针,NumToWriter为数据长度。利用STMFLASH_Read(WriteAddr,*pBuffer,NumToRead)进行回读校验,在数据传输完毕后调用库函数中的上锁函数设置写保护并返回成功标志,完成本次升级。

2.3数据传输协议及校验机制

数据传输使用的协议为半双工传输的send-ack模式,基于ModBus协议[11]的RTU传输模式,利用留给用户的功能编号41H~48H定义:传输命令与应答等用户报文。选择功能码F_C=65(41H)作为传输命令与应答报文,其报文格式如表2、表3所示。

表2 数据帧报文

表3 响应帧报文

发送方服务器发送数据帧,并在成功发送一帧后将帧序号自动增加,范围为0~65 536。其数据帧长度最短为11字节,最长为259字节。

本方法采用循环冗余校验(CRC)和延时重传机制保证数据的可靠性。接收方调用Protocol_Unpacked()函数进行解包操作得到帧序号、有效数据长度、有效代码、校验值。于此同时计算数据帧的CRC16校验码,以帧序号和校验值作为解包成功的判定条件。若解包成功,则发送响应报文,提示发送方准备发送下一帧,若解包失败,则不发送响应报文,发送方在超过1000 ms仍未收到响应就会启用重传机制,在连续发送十次数据仍得不到响应报文的情况下则执行报错机制。

2.4程序设计

在keil Vision4 IDE中使用C语言进行程序设计,使用ST为用户提供的库函数进行软件编写,本方法所需的目标代码bin文件由keil内部的fromelf工具进行转换。IAP软件的功能主要包括ModBus报文的接收处理和响应报文的发送,Flash的擦除和重写等,Flash编程函数流程如图2所示,软件的协议传输流程如图3所示。

图2 Flash编程函数流程图

图3 协议传输流程图

利用通信接口中断接收更新代码,通过解包操作获得有效数据字段,并将有效数据存入缓冲池,调用Flash编程函数,完成代码的更新和维护工作。

3实验验证

选择芯片核心为STM32F103ZET6的设备使用 IAP方法进行下载升级,为设备外接蓝牙模块,外接AM29LV800BB与K9F8G08U0M-P两块Flash芯片,分别对片内和片外的Flash进行测试,使用PC机发送测试代码与测试数组,每组试验经过两次测试。代码的BIN文件大小与测试结果如表4所示,测试数组为从0x5A开始的递增序列,数组大小与测试结果如表5所示,表中Y表示进行了实验测试,N表示未进行试验测试。

表4 代码测试结果

表5 数组测试结果

试验结果表明,该IAP方法可以在蓝牙环境下,通过软件触发的方式实现不同长度代码的更新,能保证传输的可靠性,能够满足片内片外Flash程序升级的需要。

4结语

本文基于STM32芯片平台设计了一种IAP在线升级方法,该方法使用ModBus协议,采用应答机制及延时重传机制将代码进行分段传输,能够支持片内片外Flash的编程操作,并且无需改变硬件配置,解决了WSN中节点设备固件在线升级的问题,满足了WSN在系统动态重构需要。而且此方法还可以适用于其它基于Cortex-Mx核的嵌入式产品。不足的是该方法只能适用于点对点的数据传输,日后可继续改进,使其适用于广播式数据传播。

参考文献

[1] 朱晓瑞,陶先平,谢宏伟,等.一种面向无线传感网应用重编程的逻辑式编程语言[J].软件学报,2014,25(2):326-340.

[2] Gursel Serpen,Jiakai Li.AI-WSN:Adaptive and Intelligent Wireless Sensor Network[J].Procedia Computer Science,2013(20):406-413.

[3] 李鹏.简化家电和工业控制应用开发任务意法半导体(ST)发布STM32F0系列[J].家电科技,2012(6):28.

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

[5] Guanying Wu,Ping Huang.Reducing SSD access latency via NAND flash program and erase suspension[J].Journal of Systems Architecture,2013,12(2):345-356.

[6] 刘洲洲,张捷.基于嵌入式系统的NANDFlash坏块处理和FMM实现[J].计测技术,2006(6):42-44.

[7] 邓中亮,孙静.嵌入式设备在线系统升级的设计与实现[J].计算机工程与设计,2009,30(13):3085-3087.

[8] 蒋建春,王正树,冯辉宗,等.基于软件触发的在应用编程在线升级技术的设计与实现[J].计算机应用,2012(6):1721-1723.

[9] 彭亮,沈安文,张宁,等.基于无线IAP的工业嵌入式系统升级技术应用[J].仪表技术与传感器,2013(12):36-38.

[10] 蔡利平,任家富,童锐,等,基于ARM的Nand Flash启动分析与移植[J].计算机工程与设计,2012(3):931-935.

[11] 刘桂臣,阳宪惠.Modbus报文有线/无线混合传输的实现[J].清华大学学报:自然科学版,2008(S2):1844-1847.

ONLINE SYSTEM UPGRADING METHOD FOR WSN NODE FIRMWARE BASED ON STM32 PROCESSOR

Jiang CunboJiao Yang

(SchoolofInformationScienceandEngineering,GuilinUniversityofTechnology,Guilin541004,Guangxi,China)

AbstractIn order to meet the needs of function upgrade and system reconstruction of the node devices in WSN (wireless sensor network), we studied the Cortex-Mx core-based renewing and upgrading method for embedded system firmware IAP. It triggers the upgrade by using the way of command requests plus authentication, splits the code into 128 byte information block by utilising partition function and then composes them into ModBus packet with 138 bytes for transmission. It employs CRC for data checking, adopts response mechanism to achieve flow control, utilises Flash recognition function to distinguish different Flash types, and applies Flash writing function to meet the programming needs of internal and external Flash, different parameters of NorFlash and NandFlash. By testing with experiment, this scheme can realise the upgrade of WSN nodes firmware and the need of WSNs in dynamic system reconstruction.

KeywordsEmbedded systemWSNOnline firmware upgradeModBus protocol

收稿日期:2014-12-15。蒋存波,教授,主研领域:嵌入式系统及应用,自动检测与控制装置,计算机应用。焦阳,硕士生。

中图分类号TP368.1

文献标识码A

DOI:10.3969/j.issn.1000-386x.2016.05.056

猜你喜欢
固件报文编程
基于J1939 协议多包报文的时序研究及应用
编程,是一种态度
元征X-431实测:奔驰发动机编程
CTCS-2级报文数据管理需求分析和实现
编程小能手
纺织机上诞生的编程
浅析反驳类报文要点
基于固件的远程身份认证
ATS与列车通信报文分析
提取ROM固件中的APP